From 01e19702439aff3274f3b81dedb2a85e4072bd5f Mon Sep 17 00:00:00 2001 From: Deploy from CI <> Date: Sat, 14 Jun 2025 21:52:39 +0000 Subject: [PATCH] Deploy 59756939d58a2b6e058cc5cacf4248dfb4f56814 to gh-pages --- .nojekyll | 1 + 404.html | 205 + CNAME | 1 + FontAwesome/css/font-awesome.css | 4 + FontAwesome/fonts/FontAwesome.ttf | Bin 0 -> 165548 bytes FontAwesome/fonts/fontawesome-webfont.eot | Bin 0 -> 165742 bytes FontAwesome/fonts/fontawesome-webfont.svg | 2671 + FontAwesome/fonts/fontawesome-webfont.ttf | Bin 0 -> 165548 bytes FontAwesome/fonts/fontawesome-webfont.woff | Bin 0 -> 98024 bytes FontAwesome/fonts/fontawesome-webfont.woff2 | Bin 0 -> 77160 bytes about-this-guide.html | 294 + appendix/background.html | 483 + appendix/bibliography.html | 311 + appendix/code-index.html | 246 + appendix/compiler-lecture.html | 274 + appendix/glossary.html | 313 + appendix/humorust.html | 226 + asm.html | 363 + ast-lowering.html | 278 + ast-validation.html | 243 + attributes.html | 257 + autodiff/debugging.html | 286 + autodiff/flags.html | 247 + autodiff/installation.html | 281 + autodiff/internals.html | 232 + autodiff/limitations.html | 231 + ayu-highlight.css | 78 + backend/backend-agnostic.html | 397 + backend/codegen.html | 276 + backend/debugging.html | 451 + backend/implicit-caller-location.html | 441 + backend/libs-and-metadata.html | 345 + backend/lowering-mir.html | 254 + backend/monomorph.html | 276 + backend/updating-llvm.html | 445 + book.js | 769 + borrow_check.html | 267 + borrow_check/drop_check.html | 357 + borrow_check/moves_and_initialization.html | 258 + .../moves_and_initialization/move_paths.html | 313 + ...e-types-region-inference-restrictions.html | 454 + borrow_check/region_inference.html | 406 + .../region_inference/closure_constraints.html | 243 + .../constraint_propagation.html | 396 + .../region_inference/error_reporting.html | 219 + .../region_inference/lifetime_parameters.html | 311 + .../region_inference/member_constraints.html | 363 + .../placeholders_and_universes.html | 539 + borrow_check/two_phase_borrows.html | 298 + borrow_check/type_check.html | 265 + bug-fix-procedure.html | 505 + .../bootstrap-in-dependencies.html | 251 + .../bootstrapping/debugging-bootstrap.html | 359 + .../bootstrapping/how-bootstrap-does-it.html | 259 + building/bootstrapping/intro.html | 233 + .../what-bootstrapping-does.html | 603 + .../writing-tools-in-bootstrap.html | 241 + .../build-install-distribution-artifacts.html | 235 + building/compiler-documenting.html | 255 + building/how-to-build-and-run.html | 555 + building/new-target.html | 361 + building/optimized-build.html | 318 + building/prerequisites.html | 249 + building/quickstart.html | 268 + building/suggested.html | 587 + cli.html | 242 + clipboard.min.js | 7 + closure.html | 363 + coherence.html | 284 + compiler-debugging.html | 549 + compiler-src.html | 362 + compiler-team.html | 329 + compiletest.html | 12 + const-eval.html | 267 + const-eval/interpret.html | 407 + contributing.html | 603 + conventions.html | 344 + coroutine-closures.html | 523 + crates-io.html | 234 + css/chrome.css | 643 + css/general.css | 279 + css/print.css | 50 + css/variables.css | 319 + debugging-support-in-rustc.html | 546 + diagnostics.html | 1143 + diagnostics/diagnostic-codes.html | 12 + diagnostics/diagnostic-items.html | 352 + diagnostics/diagnostic-structs.html | 664 + diagnostics/error-codes.html | 296 + diagnostics/error-guaranteed.html | 244 + diagnostics/lintstore.html | 302 + diagnostics/sessiondiagnostic.html | 12 + diagnostics/translation.html | 390 + early_late_parameters.html | 609 + effects.html | 339 + elasticlunr.min.js | 10 + external-repos.html | 324 + favicon.png | Bin 0 -> 5679 bytes favicon.svg | 22 + feature-gate-ck.html | 219 + feature-gates.html | 271 + fonts/OPEN-SANS-LICENSE.txt | 202 + fonts/SOURCE-CODE-PRO-LICENSE.txt | 93 + fonts/fonts.css | 100 + fonts/open-sans-v17-all-charsets-300.woff2 | Bin 0 -> 44352 bytes ...open-sans-v17-all-charsets-300italic.woff2 | Bin 0 -> 40656 bytes fonts/open-sans-v17-all-charsets-600.woff2 | Bin 0 -> 44936 bytes ...open-sans-v17-all-charsets-600italic.woff2 | Bin 0 -> 42120 bytes fonts/open-sans-v17-all-charsets-700.woff2 | Bin 0 -> 44988 bytes ...open-sans-v17-all-charsets-700italic.woff2 | Bin 0 -> 40800 bytes fonts/open-sans-v17-all-charsets-800.woff2 | Bin 0 -> 44536 bytes ...open-sans-v17-all-charsets-800italic.woff2 | Bin 0 -> 40812 bytes fonts/open-sans-v17-all-charsets-italic.woff2 | Bin 0 -> 41076 bytes .../open-sans-v17-all-charsets-regular.woff2 | Bin 0 -> 43236 bytes ...source-code-pro-v11-all-charsets-500.woff2 | Bin 0 -> 59140 bytes fuzzing.html | 330 + generic_parameters_summary.html | 229 + getting-started.html | 350 + git.html | 720 + guides/editions.html | 537 + highlight.css | 83 + highlight.js | 54 + hir-debugging.html | 228 + hir.html | 331 + img/coverage-branch-counting-01.png | Bin 0 -> 11282 bytes img/dataflow-graphviz-example.png | Bin 0 -> 81892 bytes img/github-cli.png | Bin 0 -> 26790 bytes img/github-whitespace-changes.png | Bin 0 -> 29217 bytes img/llvm-cov-show-01.png | Bin 0 -> 416748 bytes img/other-peoples-commits.png | Bin 0 -> 301512 bytes img/rustbot-submodules.png | Bin 0 -> 26028 bytes img/submodule-conflicts.png | Bin 0 -> 20216 bytes img/wpa-initial-memory.png | Bin 0 -> 312637 bytes img/wpa-stack.png | Bin 0 -> 145576 bytes implementing_new_features.html | 381 + incrcomp-debugging.html | 308 + index.html | 350 + lang-items.html | 271 + licenses.html | 258 + llvm-coverage-instrumentation.html | 323 + macro-expansion.html | 676 + mark.min.js | 7 + memory.html | 282 + mermaid-init.js | 1 + mermaid.min.js | 4 + method-lookup.html | 313 + mir/construction.html | 337 + mir/dataflow.html | 378 + mir/debugging.html | 289 + mir/drop-elaboration.html | 389 + mir/index.html | 493 + mir/mir_cfg.svg | 270 + mir/mir_detailed.dot | 27 + mir/mir_detailed.svg | 300 + mir/mir_overview.dot | 10 + mir/mir_overview.svg | 103 + mir/optimizations.html | 307 + mir/passes.html | 369 + mir/visitor.html | 251 + miri.html | 12 + name-resolution.html | 372 + normalization.html | 471 + notification-groups/about.html | 299 + notification-groups/apple.html | 254 + notification-groups/arm.html | 230 + notification-groups/emscripten.html | 230 + notification-groups/fuchsia.html | 223 + notification-groups/risc-v.html | 230 + notification-groups/rust-for-linux.html | 231 + notification-groups/wasi.html | 230 + notification-groups/wasm.html | 230 + notification-groups/windows.html | 238 + opaque-types-impl-trait-inference.html | 466 + opaque-types-type-alias-impl-trait.html | 260 + overview.html | 615 + panic-implementation.html | 324 + parallel-rustc.html | 358 + part-2-intro.html | 229 + part-3-intro.html | 225 + part-4-intro.html | 228 + part-5-intro.html | 264 + pat-exhaustive-checking.html | 400 + print.html | 27705 ++ profile-guided-optimization.html | 331 + profiling.html | 329 + profiling/with_perf.html | 461 + profiling/with_rustc_perf.html | 244 + profiling/wpa_profiling.html | 318 + queries/example-0.counts.txt | 104 + queries/example-0.html | 313330 +++++++++++++++ queries/example-0.png | Bin 0 -> 106577 bytes .../incremental-compilation-in-detail.html | 718 + queries/incremental-compilation.html | 385 + queries/query-evaluation-model-in-detail.html | 387 + queries/salsa.html | 398 + query.html | 430 + return-position-impl-trait-in-trait.html | 583 + rustbot.html | 263 + rustc-driver/getting-diagnostics.html | 326 + rustc-driver/interacting-with-the-ast.html | 327 + rustc-driver/intro.html | 241 + .../remarks-on-perma-unstable-features.html | 257 + rustdoc-internals.html | 463 + rustdoc-internals/rustdoc-gui-test-suite.html | 224 + .../rustdoc-json-test-suite.html | 221 + rustdoc-internals/rustdoc-test-suite.html | 361 + rustdoc-internals/search.html | 670 + rustdoc.html | 395 + sanitizers.html | 314 + searcher.js | 526 + searchindex.js | 1 + serialization.html | 341 + solve/caching.html | 297 + solve/canonicalization.html | 277 + solve/coinduction.html | 455 + solve/invariants.html | 332 + solve/opaque-types.html | 306 + solve/proof-trees.html | 250 + solve/significant-changes.html | 287 + solve/the-solver.html | 272 + solve/trait-solving.html | 249 + stability.html | 369 + stabilization_guide.html | 356 + syntax-intro.html | 227 + test-implementation.html | 336 + tests/adding.html | 390 + tests/best-practices.html | 396 + tests/ci.html | 583 + tests/codegen-backend-tests/cg_clif.html | 219 + tests/codegen-backend-tests/cg_gcc.html | 219 + tests/codegen-backend-tests/intro.html | 225 + tests/compiletest.html | 862 + tests/crater.html | 261 + tests/directives.html | 698 + tests/docker.html | 268 + tests/ecosystem-test-jobs/fuchsia.html | 339 + tests/ecosystem-test-jobs/rust-for-linux.html | 263 + tests/ecosystem.html | 238 + tests/fuchsia.html | 12 + tests/headers.html | 12 + tests/integration.html | 12 + tests/intro.html | 355 + tests/minicore.html | 271 + tests/misc.html | 247 + tests/perf.html | 264 + tests/running.html | 498 + tests/rust-for-linux.html | 12 + tests/suggest-tests.html | 268 + tests/ui.html | 731 + the-parser.html | 277 + thir.html | 468 + toc.html | 32 + toc.js | 70 + tomorrow-night.css | 104 + tracing.html | 398 + traits/caching.html | 261 + traits/canonical-queries.html | 412 + traits/canonicalization.html | 405 + traits/chalk.html | 243 + traits/goals-and-clauses.html | 431 + traits/hrtb.html | 321 + traits/implied-bounds.html | 266 + traits/lowering-to-logic.html | 375 + traits/resolution.html | 438 + traits/specialization.html | 263 + traits/unsize.html | 294 + ty-fold.html | 297 + ty.html | 455 + ty_module/binders.html | 254 + ty_module/early_binder.html | 265 + ty_module/generic_arguments.html | 297 + ty_module/instantiating_binders.html | 329 + ty_module/param_ty_const_regions.html | 279 + type-checking.html | 244 + type-inference.html | 410 + typing_parameter_envs.html | 375 + unsafety-checking.html | 278 + variance.html | 465 + walkthrough.html | 428 + 279 files changed, 421035 insertions(+) create mode 100644 .nojekyll create mode 100644 404.html create mode 100644 CNAME create mode 100644 FontAwesome/css/font-awesome.css create mode 100644 FontAwesome/fonts/FontAwesome.ttf create mode 100644 FontAwesome/fonts/fontawesome-webfont.eot create mode 100644 FontAwesome/fonts/fontawesome-webfont.svg create mode 100644 FontAwesome/fonts/fontawesome-webfont.ttf create mode 100644 FontAwesome/fonts/fontawesome-webfont.woff create mode 100644 FontAwesome/fonts/fontawesome-webfont.woff2 create mode 100644 about-this-guide.html create mode 100644 appendix/background.html create mode 100644 appendix/bibliography.html create mode 100644 appendix/code-index.html create mode 100644 appendix/compiler-lecture.html create mode 100644 appendix/glossary.html create mode 100644 appendix/humorust.html create mode 100644 asm.html create mode 100644 ast-lowering.html create mode 100644 ast-validation.html create mode 100644 attributes.html create mode 100644 autodiff/debugging.html create mode 100644 autodiff/flags.html create mode 100644 autodiff/installation.html create mode 100644 autodiff/internals.html create mode 100644 autodiff/limitations.html create mode 100644 ayu-highlight.css create mode 100644 backend/backend-agnostic.html create mode 100644 backend/codegen.html create mode 100644 backend/debugging.html create mode 100644 backend/implicit-caller-location.html create mode 100644 backend/libs-and-metadata.html create mode 100644 backend/lowering-mir.html create mode 100644 backend/monomorph.html create mode 100644 backend/updating-llvm.html create mode 100644 book.js create mode 100644 borrow_check.html create mode 100644 borrow_check/drop_check.html create mode 100644 borrow_check/moves_and_initialization.html create mode 100644 borrow_check/moves_and_initialization/move_paths.html create mode 100644 borrow_check/opaque-types-region-inference-restrictions.html create mode 100644 borrow_check/region_inference.html create mode 100644 borrow_check/region_inference/closure_constraints.html create mode 100644 borrow_check/region_inference/constraint_propagation.html create mode 100644 borrow_check/region_inference/error_reporting.html create mode 100644 borrow_check/region_inference/lifetime_parameters.html create mode 100644 borrow_check/region_inference/member_constraints.html create mode 100644 borrow_check/region_inference/placeholders_and_universes.html create mode 100644 borrow_check/two_phase_borrows.html create mode 100644 borrow_check/type_check.html create mode 100644 bug-fix-procedure.html create mode 100644 building/bootstrapping/bootstrap-in-dependencies.html create mode 100644 building/bootstrapping/debugging-bootstrap.html create mode 100644 building/bootstrapping/how-bootstrap-does-it.html create mode 100644 building/bootstrapping/intro.html create mode 100644 building/bootstrapping/what-bootstrapping-does.html create mode 100644 building/bootstrapping/writing-tools-in-bootstrap.html create mode 100644 building/build-install-distribution-artifacts.html create mode 100644 building/compiler-documenting.html create mode 100644 building/how-to-build-and-run.html create mode 100644 building/new-target.html create mode 100644 building/optimized-build.html create mode 100644 building/prerequisites.html create mode 100644 building/quickstart.html create mode 100644 building/suggested.html create mode 100644 cli.html create mode 100644 clipboard.min.js create mode 100644 closure.html create mode 100644 coherence.html create mode 100644 compiler-debugging.html create mode 100644 compiler-src.html create mode 100644 compiler-team.html create mode 100644 compiletest.html create mode 100644 const-eval.html create mode 100644 const-eval/interpret.html create mode 100644 contributing.html create mode 100644 conventions.html create mode 100644 coroutine-closures.html create mode 100644 crates-io.html create mode 100644 css/chrome.css create mode 100644 css/general.css create mode 100644 css/print.css create mode 100644 css/variables.css create mode 100644 debugging-support-in-rustc.html create mode 100644 diagnostics.html create mode 100644 diagnostics/diagnostic-codes.html create mode 100644 diagnostics/diagnostic-items.html create mode 100644 diagnostics/diagnostic-structs.html create mode 100644 diagnostics/error-codes.html create mode 100644 diagnostics/error-guaranteed.html create mode 100644 diagnostics/lintstore.html create mode 100644 diagnostics/sessiondiagnostic.html create mode 100644 diagnostics/translation.html create mode 100644 early_late_parameters.html create mode 100644 effects.html create mode 100644 elasticlunr.min.js create mode 100644 external-repos.html create mode 100644 favicon.png create mode 100644 favicon.svg create mode 100644 feature-gate-ck.html create mode 100644 feature-gates.html create mode 100644 fonts/OPEN-SANS-LICENSE.txt create mode 100644 fonts/SOURCE-CODE-PRO-LICENSE.txt create mode 100644 fonts/fonts.css create mode 100644 fonts/open-sans-v17-all-charsets-300.woff2 create mode 100644 fonts/open-sans-v17-all-charsets-300italic.woff2 create mode 100644 fonts/open-sans-v17-all-charsets-600.woff2 create mode 100644 fonts/open-sans-v17-all-charsets-600italic.woff2 create mode 100644 fonts/open-sans-v17-all-charsets-700.woff2 create mode 100644 fonts/open-sans-v17-all-charsets-700italic.woff2 create mode 100644 fonts/open-sans-v17-all-charsets-800.woff2 create mode 100644 fonts/open-sans-v17-all-charsets-800italic.woff2 create mode 100644 fonts/open-sans-v17-all-charsets-italic.woff2 create mode 100644 fonts/open-sans-v17-all-charsets-regular.woff2 create mode 100644 fonts/source-code-pro-v11-all-charsets-500.woff2 create mode 100644 fuzzing.html create mode 100644 generic_parameters_summary.html create mode 100644 getting-started.html create mode 100644 git.html create mode 100644 guides/editions.html create mode 100644 highlight.css create mode 100644 highlight.js create mode 100644 hir-debugging.html create mode 100644 hir.html create mode 100644 img/coverage-branch-counting-01.png create mode 100644 img/dataflow-graphviz-example.png create mode 100644 img/github-cli.png create mode 100644 img/github-whitespace-changes.png create mode 100644 img/llvm-cov-show-01.png create mode 100644 img/other-peoples-commits.png create mode 100644 img/rustbot-submodules.png create mode 100644 img/submodule-conflicts.png create mode 100644 img/wpa-initial-memory.png create mode 100644 img/wpa-stack.png create mode 100644 implementing_new_features.html create mode 100644 incrcomp-debugging.html create mode 100644 index.html create mode 100644 lang-items.html create mode 100644 licenses.html create mode 100644 llvm-coverage-instrumentation.html create mode 100644 macro-expansion.html create mode 100644 mark.min.js create mode 100644 memory.html create mode 100644 mermaid-init.js create mode 100644 mermaid.min.js create mode 100644 method-lookup.html create mode 100644 mir/construction.html create mode 100644 mir/dataflow.html create mode 100644 mir/debugging.html create mode 100644 mir/drop-elaboration.html create mode 100644 mir/index.html create mode 100644 mir/mir_cfg.svg create mode 100644 mir/mir_detailed.dot create mode 100644 mir/mir_detailed.svg create mode 100644 mir/mir_overview.dot create mode 100644 mir/mir_overview.svg create mode 100644 mir/optimizations.html create mode 100644 mir/passes.html create mode 100644 mir/visitor.html create mode 100644 miri.html create mode 100644 name-resolution.html create mode 100644 normalization.html create mode 100644 notification-groups/about.html create mode 100644 notification-groups/apple.html create mode 100644 notification-groups/arm.html create mode 100644 notification-groups/emscripten.html create mode 100644 notification-groups/fuchsia.html create mode 100644 notification-groups/risc-v.html create mode 100644 notification-groups/rust-for-linux.html create mode 100644 notification-groups/wasi.html create mode 100644 notification-groups/wasm.html create mode 100644 notification-groups/windows.html create mode 100644 opaque-types-impl-trait-inference.html create mode 100644 opaque-types-type-alias-impl-trait.html create mode 100644 overview.html create mode 100644 panic-implementation.html create mode 100644 parallel-rustc.html create mode 100644 part-2-intro.html create mode 100644 part-3-intro.html create mode 100644 part-4-intro.html create mode 100644 part-5-intro.html create mode 100644 pat-exhaustive-checking.html create mode 100644 print.html create mode 100644 profile-guided-optimization.html create mode 100644 profiling.html create mode 100644 profiling/with_perf.html create mode 100644 profiling/with_rustc_perf.html create mode 100644 profiling/wpa_profiling.html create mode 100644 queries/example-0.counts.txt create mode 100644 queries/example-0.html create mode 100644 queries/example-0.png create mode 100644 queries/incremental-compilation-in-detail.html create mode 100644 queries/incremental-compilation.html create mode 100644 queries/query-evaluation-model-in-detail.html create mode 100644 queries/salsa.html create mode 100644 query.html create mode 100644 return-position-impl-trait-in-trait.html create mode 100644 rustbot.html create mode 100644 rustc-driver/getting-diagnostics.html create mode 100644 rustc-driver/interacting-with-the-ast.html create mode 100644 rustc-driver/intro.html create mode 100644 rustc-driver/remarks-on-perma-unstable-features.html create mode 100644 rustdoc-internals.html create mode 100644 rustdoc-internals/rustdoc-gui-test-suite.html create mode 100644 rustdoc-internals/rustdoc-json-test-suite.html create mode 100644 rustdoc-internals/rustdoc-test-suite.html create mode 100644 rustdoc-internals/search.html create mode 100644 rustdoc.html create mode 100644 sanitizers.html create mode 100644 searcher.js create mode 100644 searchindex.js create mode 100644 serialization.html create mode 100644 solve/caching.html create mode 100644 solve/canonicalization.html create mode 100644 solve/coinduction.html create mode 100644 solve/invariants.html create mode 100644 solve/opaque-types.html create mode 100644 solve/proof-trees.html create mode 100644 solve/significant-changes.html create mode 100644 solve/the-solver.html create mode 100644 solve/trait-solving.html create mode 100644 stability.html create mode 100644 stabilization_guide.html create mode 100644 syntax-intro.html create mode 100644 test-implementation.html create mode 100644 tests/adding.html create mode 100644 tests/best-practices.html create mode 100644 tests/ci.html create mode 100644 tests/codegen-backend-tests/cg_clif.html create mode 100644 tests/codegen-backend-tests/cg_gcc.html create mode 100644 tests/codegen-backend-tests/intro.html create mode 100644 tests/compiletest.html create mode 100644 tests/crater.html create mode 100644 tests/directives.html create mode 100644 tests/docker.html create mode 100644 tests/ecosystem-test-jobs/fuchsia.html create mode 100644 tests/ecosystem-test-jobs/rust-for-linux.html create mode 100644 tests/ecosystem.html create mode 100644 tests/fuchsia.html create mode 100644 tests/headers.html create mode 100644 tests/integration.html create mode 100644 tests/intro.html create mode 100644 tests/minicore.html create mode 100644 tests/misc.html create mode 100644 tests/perf.html create mode 100644 tests/running.html create mode 100644 tests/rust-for-linux.html create mode 100644 tests/suggest-tests.html create mode 100644 tests/ui.html create mode 100644 the-parser.html create mode 100644 thir.html create mode 100644 toc.html create mode 100644 toc.js create mode 100644 tomorrow-night.css create mode 100644 tracing.html create mode 100644 traits/caching.html create mode 100644 traits/canonical-queries.html create mode 100644 traits/canonicalization.html create mode 100644 traits/chalk.html create mode 100644 traits/goals-and-clauses.html create mode 100644 traits/hrtb.html create mode 100644 traits/implied-bounds.html create mode 100644 traits/lowering-to-logic.html create mode 100644 traits/resolution.html create mode 100644 traits/specialization.html create mode 100644 traits/unsize.html create mode 100644 ty-fold.html create mode 100644 ty.html create mode 100644 ty_module/binders.html create mode 100644 ty_module/early_binder.html create mode 100644 ty_module/generic_arguments.html create mode 100644 ty_module/instantiating_binders.html create mode 100644 ty_module/param_ty_const_regions.html create mode 100644 type-checking.html create mode 100644 type-inference.html create mode 100644 typing_parameter_envs.html create mode 100644 unsafety-checking.html create mode 100644 variance.html create mode 100644 walkthrough.html diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 000000000..f17311098 --- /dev/null +++ b/.nojekyll @@ -0,0 +1 @@ +This file makes sure that Github Pages doesn't process mdBook's output. diff --git a/404.html b/404.html new file mode 100644 index 000000000..5c573a411 --- /dev/null +++ b/404.html @@ -0,0 +1,205 @@ + + + + + + Page not found - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Document not found (404)

+

This URL is invalid, sorry. Please use the navigation bar or search to continue.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/CNAME b/CNAME new file mode 100644 index 000000000..a59cd86cd --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +rustc-dev-guide.rust-lang.org diff --git a/FontAwesome/css/font-awesome.css b/FontAwesome/css/font-awesome.css new file mode 100644 index 000000000..540440ce8 --- /dev/null +++ b/FontAwesome/css/font-awesome.css @@ -0,0 +1,4 @@ +/*! + * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.7.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.fa-gitlab:before{content:"\f296"}.fa-wpbeginner:before{content:"\f297"}.fa-wpforms:before{content:"\f298"}.fa-envira:before{content:"\f299"}.fa-universal-access:before{content:"\f29a"}.fa-wheelchair-alt:before{content:"\f29b"}.fa-question-circle-o:before{content:"\f29c"}.fa-blind:before{content:"\f29d"}.fa-audio-description:before{content:"\f29e"}.fa-volume-control-phone:before{content:"\f2a0"}.fa-braille:before{content:"\f2a1"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:"\f2a4"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-signing:before,.fa-sign-language:before{content:"\f2a7"}.fa-low-vision:before{content:"\f2a8"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-pied-piper:before{content:"\f2ae"}.fa-first-order:before{content:"\f2b0"}.fa-yoast:before{content:"\f2b1"}.fa-themeisle:before{content:"\f2b2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\f2b3"}.fa-fa:before,.fa-font-awesome:before{content:"\f2b4"}.fa-handshake-o:before{content:"\f2b5"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-o:before{content:"\f2b7"}.fa-linode:before{content:"\f2b8"}.fa-address-book:before{content:"\f2b9"}.fa-address-book-o:before{content:"\f2ba"}.fa-vcard:before,.fa-address-card:before{content:"\f2bb"}.fa-vcard-o:before,.fa-address-card-o:before{content:"\f2bc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-circle-o:before{content:"\f2be"}.fa-user-o:before{content:"\f2c0"}.fa-id-badge:before{content:"\f2c1"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-drivers-license-o:before,.fa-id-card-o:before{content:"\f2c3"}.fa-quora:before{content:"\f2c4"}.fa-free-code-camp:before{content:"\f2c5"}.fa-telegram:before{content:"\f2c6"}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-shower:before{content:"\f2cc"}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:"\f2cd"}.fa-podcast:before{content:"\f2ce"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-times-rectangle:before,.fa-window-close:before{content:"\f2d3"}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:"\f2d4"}.fa-bandcamp:before{content:"\f2d5"}.fa-grav:before{content:"\f2d6"}.fa-etsy:before{content:"\f2d7"}.fa-imdb:before{content:"\f2d8"}.fa-ravelry:before{content:"\f2d9"}.fa-eercast:before{content:"\f2da"}.fa-microchip:before{content:"\f2db"}.fa-snowflake-o:before{content:"\f2dc"}.fa-superpowers:before{content:"\f2dd"}.fa-wpexplorer:before{content:"\f2de"}.fa-meetup:before{content:"\f2e0"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto} diff --git a/FontAwesome/fonts/FontAwesome.ttf b/FontAwesome/fonts/FontAwesome.ttf new file mode 100644 index 0000000000000000000000000000000000000000..35acda2fa1196aad98c2adf4378a7611dd713aa3 GIT binary patch literal 165548 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 z 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 d0mW2@EHO9NV8h3u2x_sp}KECIB>@9+Qn{FBV{ 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 G*yFsbY~cLNXLP73aA74Mq6M9f^&YV`isWW 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

5q!RY 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 + + + +Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 + By ,,, +Copyright Dave Gandy 2016. All rights reserved. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/FontAwesome/fonts/fontawesome-webfont.ttf b/FontAwesome/fonts/fontawesome-webfont.ttf new file mode 100644 index 0000000000000000000000000000000000000000..35acda2fa1196aad98c2adf4378a7611dd713aa3 GIT binary patch literal 165548 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 z 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 d0mRO}xo^G_%I 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 SdSQM28?+M|D(2r_;{O0|uQ74} literal 0 HcmV?d00001 diff --git a/FontAwesome/fonts/fontawesome-webfont.woff2 b/FontAwesome/fonts/fontawesome-webfont.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..4d13fc60404b91e398a37200c4a77b645cfd9586 GIT binary patch literal 77160 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 literal 0 HcmV?d00001 diff --git a/about-this-guide.html b/about-this-guide.html new file mode 100644 index 000000000..285ccfd1a --- /dev/null +++ b/about-this-guide.html @@ -0,0 +1,294 @@ + + + + + + About this guide - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

About this guide

+

This guide is meant to help document how rustc – the Rust compiler – works, +as well as to help new contributors get involved in rustc development.

+

There are several parts to this guide:

+
    +
  1. Building and debugging rustc: +Contains information that should be useful no matter how you are contributing, +about building, debugging, profiling, etc.
  2. +
  3. Contributing to Rust: +Contains information that should be useful no matter how you are contributing, +about procedures for contribution, using git and Github, stabilizing features, etc.
  4. +
  5. Bootstrapping: +Describes how the Rust compiler builds itself using previous versions, including +an introduction to the bootstrap process and debugging methods.
  6. +
  7. High-level Compiler Architecture: +Discusses the high-level architecture of the compiler and stages of the compile process.
  8. +
  9. Source Code Representation: +Describes the process of taking raw source code from the user +and transforming it into various forms that the compiler can work with easily.
  10. +
  11. Supporting Infrastructure: +Covers command-line argument conventions, compiler entry points like rustc_driver and +rustc_interface, and the design and implementation of errors and lints.
  12. +
  13. Analysis: +Discusses the analyses that the compiler uses to check various properties of the code +and inform later stages of the compile process (e.g., type checking).
  14. +
  15. MIR to Binaries: How linked executable machine code is generated.
  16. +
  17. Appendices at the end with useful reference information. +There are a few of these with different information, including a glossary.
  18. +
+

Constant change

+

Keep in mind that rustc is a real production-quality product, +being worked upon continuously by a sizeable set of contributors. +As such, it has its fair share of codebase churn and technical debt. +In addition, many of the ideas discussed throughout this guide are idealized designs +that are not fully realized yet. +All this makes keeping this guide completely up to date on everything very hard!

+

The Guide itself is of course open-source as well, +and the sources can be found at the GitHub repository. +If you find any mistakes in the guide, please file an issue about it. +Even better, open a PR with a correction!

+

If you do contribute to the guide, +please see the corresponding subsection on writing documentation in this guide.

+
+

“‘All conditioned things are impermanent’ — +when one sees this with wisdom, one turns away from suffering.” +The Dhammapada, verse 277

+
+

Other places to find information

+

You might also find the following sites useful:

+
    +
  • This guide contains information about how various parts of the +compiler work and how to contribute to the compiler.
  • +
  • rustc API docs -- rustdoc documentation for the compiler, devtools, and internal tools
  • +
  • Forge -- contains documentation about Rust infrastructure, team procedures, and more
  • +
  • compiler-team -- the home-base for the Rust compiler team, with description +of the team procedures, active working groups, and the team calendar.
  • +
  • std-dev-guide -- a similar guide for developing the standard library.
  • +
  • The t-compiler zulip
  • +
  • #contribute and #wg-rustup on Discord.
  • +
  • The Rust Internals forum, a place to ask questions and +discuss Rust's internals
  • +
  • The Rust reference, even though it doesn't specifically talk about +Rust's internals, is a great resource nonetheless
  • +
  • Although out of date, Tom Lee's great blog article is very helpful
  • +
  • The Rust Compiler Testing Docs
  • +
  • For @bors, this cheat sheet is helpful
  • +
  • Google is always helpful when programming. +You can search all Rust documentation (the standard library, +the compiler, the books, the references, and the guides) to quickly find +information about the language and compiler.
  • +
  • You can also use Rustdoc's built-in search feature to find documentation on +types and functions within the crates you're looking at. You can also search +by type signature! For example, searching for * -> vec should find all +functions that return a Vec<T>. +Hint: Find more tips and keyboard shortcuts by typing ? on any Rustdoc +page!
  • +
+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/appendix/background.html b/appendix/background.html new file mode 100644 index 000000000..8253e20a1 --- /dev/null +++ b/appendix/background.html @@ -0,0 +1,483 @@ + + + + + + Appendix A: Background topics - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Background topics

+

This section covers a numbers of common compiler terms that arise in +this guide. We try to give the general definition while providing some +Rust-specific context.

+

+

What is a control-flow graph?

+

A control-flow graph (CFG) is a common term from compilers. If you've ever +used a flow-chart, then the concept of a control-flow graph will be +pretty familiar to you. It's a representation of your program that +clearly exposes the underlying control flow.

+

A control-flow graph is structured as a set of basic blocks +connected by edges. The key idea of a basic block is that it is a set +of statements that execute "together" – that is, whenever you branch +to a basic block, you start at the first statement and then execute +all the remainder. Only at the end of the block is there the +possibility of branching to more than one place (in MIR, we call that +final statement the terminator):

+
bb0: {
+    statement0;
+    statement1;
+    statement2;
+    ...
+    terminator;
+}
+
+

Many expressions that you are used to in Rust compile down to multiple +basic blocks. For example, consider an if statement:

+
a = 1;
+if some_variable {
+    b = 1;
+} else {
+    c = 1;
+}
+d = 1;
+

This would compile into four basic blocks in MIR. In textual form, it looks like +this:

+
BB0: {
+    a = 1;
+    if some_variable {
+        goto BB1;
+    } else {
+        goto BB2;
+    }
+}
+
+BB1: {
+    b = 1;
+    goto BB3;
+}
+
+BB2: {
+    c = 1;
+    goto BB3;
+}
+
+BB3: {
+    d = 1;
+    ...
+}
+
+

In graphical form, it looks like this:

+
                BB0
+       +--------------------+
+       | a = 1;             |
+       +--------------------+
+             /       \
+  if some_variable   else
+           /           \
+     BB1  /             \  BB2
+    +-----------+   +-----------+
+    | b = 1;    |   | c = 1;    |
+    +-----------+   +-----------+
+            \          /
+             \        /
+              \ BB3  /
+            +----------+
+            | d = 1;   |
+            | ...      |
+            +----------+
+
+

When using a control-flow graph, a loop simply appears as a cycle in +the graph, and the break keyword translates into a path out of that +cycle.

+

+

What is a dataflow analysis?

+

Static Program Analysis by Anders Møller +and Michael I. Schwartzbach is an incredible resource!

+

Dataflow analysis is a type of static analysis that is common in many +compilers. It describes a general technique, rather than a particular analysis.

+

The basic idea is that we can walk over a control-flow graph (CFG) and +keep track of what some value could be. At the end of the walk, we might have +shown that some claim is true or not necessarily true (e.g. "this variable must +be initialized"). rustc tends to do dataflow analyses over the MIR, since MIR +is already a CFG.

+

For example, suppose we want to check that x is initialized before it is used +in this snippet:

+
fn foo() {
+    let mut x;
+
+    if some_cond {
+        x = 1;
+    }
+
+    dbg!(x);
+}
+

A CFG for this code might look like this:

+
 +------+
+ | Init | (A)
+ +------+
+    |   \
+    |   if some_cond
+  else    \ +-------+
+    |      \| x = 1 | (B)
+    |       +-------+
+    |      /
+ +---------+
+ | dbg!(x) | (C)
+ +---------+
+
+

We can do the dataflow analysis as follows: we will start off with a flag init +which indicates if we know x is initialized. As we walk the CFG, we will +update the flag. At the end, we can check its value.

+

So first, in block (A), the variable x is declared but not initialized, so +init = false. In block (B), we initialize the value, so we know that x is +initialized. So at the end of (B), init = true.

+

Block (C) is where things get interesting. Notice that there are two incoming +edges, one from (A) and one from (B), corresponding to whether some_cond is true or not. +But we cannot know that! It could be the case the some_cond is always true, +so that x is actually always initialized. It could also be the case that +some_cond depends on something random (e.g. the time), so x may not be +initialized. In general, we cannot know statically (due to Rice's +Theorem). So what should the value of init be in block (C)?

+

Generally, in dataflow analyses, if a block has multiple parents (like (C) in +our example), its dataflow value will be some function of all its parents (and +of course, what happens in (C)). Which function we use depends on the analysis +we are doing.

+

In this case, we want to be able to prove definitively that x must be +initialized before use. This forces us to be conservative and assume that +some_cond might be false sometimes. So our "merging function" is "and". That +is, init = true in (C) if init = true in (A) and in (B) (or if x is +initialized in (C)). But this is not the case; in particular, init = false in +(A), and x is not initialized in (C). Thus, init = false in (C); we can +report an error that "x may not be initialized before use".

+

There is definitely a lot more that can be said about dataflow analyses. There is an +extensive body of research literature on the topic, including a lot of theory. +We only discussed a forwards analysis, but backwards dataflow analysis is also +useful. For example, rather than starting from block (A) and moving forwards, +we might have started with the usage of x and moved backwards to try to find +its initialization.

+

+

What is "universally quantified"? What about "existentially quantified"?

+

In math, a predicate may be universally quantified or existentially +quantified:

+
    +
  • Universal quantification: +
      +
    • the predicate holds if it is true for all possible inputs.
    • +
    • Traditional notation: ∀x: P(x). Read as "for all x, P(x) holds".
    • +
    +
  • +
  • Existential quantification: +
      +
    • the predicate holds if there is any input where it is true, i.e., there +only has to be a single input.
    • +
    • Traditional notation: ∃x: P(x). Read as "there exists x such that P(x) holds".
    • +
    +
  • +
+

In Rust, they come up in type checking and trait solving. For example,

+
fn foo<T>()
+

This function claims that the function is well-typed for all types T: ∀ T: well_typed(foo).

+

Another example:

+
fn foo<'a>(_: &'a usize)
+

This function claims that for any lifetime 'a (determined by the +caller), it is well-typed: ∀ 'a: well_typed(foo).

+

Another example:

+
fn foo<F>()
+where for<'a> F: Fn(&'a u8)
+

This function claims that it is well-typed for all types F such that for all +lifetimes 'a, F: Fn(&'a u8): ∀ F: ∀ 'a: (F: Fn(&'a u8)) => well_typed(foo).

+

One more example:

+
fn foo(_: dyn Debug)
+

This function claims that there exists some type T that implements Debug +such that the function is well-typed: ∃ T: (T: Debug) and well_typed(foo).

+

+

What is a de Bruijn Index?

+

De Bruijn indices are a way of representing, using only integers, +which variables are bound in which binders. They were originally invented for +use in lambda calculus evaluation (see this Wikipedia article for +more). In rustc, we use de Bruijn indices to represent generic types.

+

Here is a basic example of how de Bruijn indices might be used for closures (we +don't actually do this in rustc though!):

+
|x| {
+    f(x) // de Bruijn index of `x` is 1 because `x` is bound 1 level up
+
+    |y| {
+        g(x, y) // index of `x` is 2 because it is bound 2 levels up
+                // index of `y` is 1 because it is bound 1 level up
+    }
+}
+

What are co- and contra-variance?

+

Check out the subtyping chapter from the +Rust Nomicon.

+

See the variance chapter of this guide for more info on how +the type checker handles variance.

+

+

What is a "free region" or a "free variable"? What about "bound region"?

+

Let's describe the concepts of free vs bound in terms of program +variables, since that's the thing we're most familiar with.

+
    +
  • Consider this expression, which creates a closure: |a, b| a + b. +Here, the a and b in a + b refer to the arguments that the closure will +be given when it is called. We say that the a and b there are bound to +the closure, and that the closure signature |a, b| is a binder for the +names a and b (because any references to a or b within refer to the +variables that it introduces).
  • +
  • Consider this expression: a + b. In this expression, a and b refer to +local variables that are defined outside of the expression. We say that +those variables appear free in the expression (i.e., they are free, +not bound (tied up)).
  • +
+

So there you have it: a variable "appears free" in some +expression/statement/whatever if it refers to something defined +outside of that expressions/statement/whatever. Equivalently, we can +then refer to the "free variables" of an expression – which is just +the set of variables that "appear free".

+

So what does this have to do with regions? Well, we can apply the +analogous concept to type and regions. For example, in the type &'a u32, 'a appears free. But in the type for<'a> fn(&'a u32), it +does not.

+

Further Reading About Compilers

+
+

Thanks to mem, scottmcm, and Levi on the official Discord for the +recommendations, and to tinaun for posting a link to a twitter thread from +Graydon Hoare +which had some more recommendations!

+

Other sources: https://gcc.gnu.org/wiki/ListOfCompilerBooks

+

If you have other suggestions, please feel free to open an issue or PR.

+
+

Books

+ +

Courses

+ +

Wikis

+ +

Misc Papers and Blog Posts

+ + +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/appendix/bibliography.html b/appendix/bibliography.html new file mode 100644 index 000000000..8163d92c1 --- /dev/null +++ b/appendix/bibliography.html @@ -0,0 +1,311 @@ + + + + + + Appendix E: Bibliography - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Rust Bibliography

+

This is a reading list of material relevant to Rust. It includes prior +research that has - at one time or another - influenced the design of +Rust, as well as publications about Rust.

+

Type system

+ +

Concurrency

+ +

Others

+ +

Papers about Rust

+ + +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/appendix/code-index.html b/appendix/code-index.html new file mode 100644 index 000000000..04e892ac6 --- /dev/null +++ b/appendix/code-index.html @@ -0,0 +1,246 @@ + + + + + + Appendix C: Code Index - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Code Index

+

rustc has a lot of important data structures. This is an attempt to give some +guidance on where to learn more about some of the key data structures of the +compiler.

+
+ + + + + + + + + + + + + + + + + + + + + + + +
ItemKindShort descriptionChapterDeclaration
BodyIdstructOne of four types of HIR node identifiersIdentifiers in the HIRcompiler/rustc_hir/src/hir.rs
CompilerstructRepresents a compiler session and can be used to drive a compilation.The Rustc Driver and Interfacecompiler/rustc_interface/src/interface.rs
ast::CratestructA syntax-level representation of a parsed crateThe parsercompiler/rustc_ast/src/ast.rs
rustc_hir::CratestructA more abstract, compiler-friendly form of a crate's ASTThe Hircompiler/rustc_hir/src/hir.rs
DefIdstructOne of four types of HIR node identifiersIdentifiers in the HIRcompiler/rustc_hir/src/def_id.rs
DiagstructA struct for a compiler diagnostic, such as an error or lintEmitting Diagnosticscompiler/rustc_errors/src/diagnostic.rs
DocContextstructA state container used by rustdoc when crawling through a crate to gather its documentationRustdocsrc/librustdoc/core.rs
HirIdstructOne of four types of HIR node identifiersIdentifiers in the HIRcompiler/rustc_hir/src/hir_id.rs
LexerstructThis is the lexer used during parsing. It consumes characters from the raw source code being compiled and produces a series of tokens for use by the rest of the parserThe parsercompiler/rustc_parse/src/lexer/mod.rs
NodeIdstructOne of four types of HIR node identifiers. Being phased outIdentifiers in the HIRcompiler/rustc_ast/src/ast.rs
PstructAn owned immutable smart pointer. By contrast, &T is not owned, and Box<T> is not immutable.Nonecompiler/rustc_ast/src/ptr.rs
ParamEnvstructInformation about generic parameters or Self, useful for working with associated or generic itemsParameter Environmentcompiler/rustc_middle/src/ty/mod.rs
ParseSessstructThis struct contains information about a parsing sessionThe parsercompiler/rustc_session/src/parse/parse.rs
RibstructRepresents a single scope of namesName resolutioncompiler/rustc_resolve/src/lib.rs
SessionstructThe data associated with a compilation sessionThe parser, The Rustc Driver and Interfacecompiler/rustc_session/src/session.rs
SourceFilestructPart of the SourceMap. Maps AST nodes to their source code for a single source file. Was previously called FileMapThe parsercompiler/rustc_span/src/lib.rs
SourceMapstructMaps AST nodes to their source code. It is composed of SourceFiles. Was previously called CodeMapThe parsercompiler/rustc_span/src/source_map.rs
SpanstructA location in the user's source code, used for error reporting primarilyEmitting Diagnosticscompiler/rustc_span/src/span_encoding.rs
rustc_ast::token_stream::TokenStreamstructAn abstract sequence of tokens, organized into TokenTreesThe parser, Macro expansioncompiler/rustc_ast/src/tokenstream.rs
TraitDefstructThis struct contains a trait's definition with type informationThe ty modulescompiler/rustc_middle/src/ty/trait_def.rs
TraitRefstructThe combination of a trait and its input types (e.g. P0: Trait<P1...Pn>)Trait Solving: Goals and Clausescompiler/rustc_middle/src/ty/sty.rs
Ty<'tcx>structThis is the internal representation of a type used for type checkingType checkingcompiler/rustc_middle/src/ty/mod.rs
TyCtxt<'tcx>structThe "typing context". This is the central data structure in the compiler. It is the context that you use to perform all manner of queriesThe ty modulescompiler/rustc_middle/src/ty/context.rs
+
+
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/appendix/compiler-lecture.html b/appendix/compiler-lecture.html new file mode 100644 index 000000000..812cb3347 --- /dev/null +++ b/appendix/compiler-lecture.html @@ -0,0 +1,274 @@ + + + + + + Appendix D: Compiler Lecture Series - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Compiler Lecture Series

+

These are videos where various experts explain different parts of the compiler:

+

General

+ +

Rust Analyzer

+ +

Type System

+ +

Closures

+ +

Chalk

+ +

Polonius

+ +

Miri

+ +

Async

+ +

Code Generation

+ + +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/appendix/glossary.html b/appendix/glossary.html new file mode 100644 index 000000000..3cbf9f721 --- /dev/null +++ b/appendix/glossary.html @@ -0,0 +1,313 @@ + + + + + + Appendix B: Glossary - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Glossary

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TermMeaning
arena, arena allocationAn arena is a large memory buffer from which other memory allocations are made. This style of allocation is called arena allocation. See this chapter for more info.
ASTThe abstract syntax tree produced by the rustc_ast crate; reflects user syntax very closely.
APITAn argument-position impl Trait. Also known as an anonymous type parameter. (see the reference).
binderA binder is a place where a variable or type is declared; for example, the <T> is a binder for the generic type parameter T in fn foo<T>(..), and |a| ... is a binder for the parameter a. See the background chapter for more.
BodyIdAn identifier that refers to a specific body (definition of a function or constant) in the crate. See the HIR chapter for more.
bound variableA bound variable is one that is declared within an expression/term. For example, the variable a is bound within the closure expression |a| a * 2. See the background chapter for more
codegenShort for code generation. The code to translate MIR into LLVM IR.
codegen unitWhen we produce LLVM IR, we group the Rust code into a number of codegen units (sometimes abbreviated as CGUs). Each of these units is processed by LLVM independently from one another, enabling parallelism. They are also the unit of incremental re-use. (see more)
completenessA technical term in type theory, it means that every type-safe program also type-checks. Having both soundness and completeness is very hard, and usually soundness is more important. (see "soundness").
control-flow graphA representation of the control-flow of a program; see the background chapter for more
CTFEShort for compile-time function evaluation, this is the ability of the compiler to evaluate const fns at compile time. This is part of the compiler's constant evaluation system. (see more)
cxWe tend to use cx as an abbreviation for context. See also tcx, infcx, etc.
ctxtWe also use ctxt as an abbreviation for context, e.g. TyCtxt. See also cx or tcx.
DAGA directed acyclic graph is used during compilation to keep track of dependencies between queries. (see more)
data-flow analysisA static analysis that figures out what properties are true at each point in the control-flow of a program; see the background chapter for more.
de Bruijn indexA technique for describing which binder a variable is bound by using only integers. It has the benefit that it is invariant under variable renaming. (see more)
DefIdAn index identifying a definition (see rustc_middle/src/hir/def_id.rs). Uniquely identifies a DefPath. See the HIR chapter for more.
discriminantThe underlying value associated with an enum variant or generator state to indicate it as "active" (but not to be confused with its "variant index"). At runtime, the discriminant of the active variant is encoded in the tag.
double pointerA pointer with additional metadata. See fat pointer for more.
drop glue(Internal) compiler-generated instructions that handle calling the destructors (Drop) for data types.
DSTShort for dynamically-sized type, this is a type for which the compiler cannot statically know the size in memory (e.g. str or [u8]). Such types don't implement Sized and cannot be allocated on the stack. They can only occur as the last field in a struct. They can only be used behind a pointer (e.g. &str or &[u8]).
early-bound lifetimeA lifetime region that is substituted at its definition site. Bound in an item's Generics and substituted/instantiated using a GenericArgs. Contrast with late-bound lifetime. (see more)
effectsRight now only means const traits and ~const bounds. (see more)
empty typeSee uninhabited type.
fat pointerA two word value carrying the address of some value, along with some further information necessary to put the value to use. Rust includes two kinds of fat pointers: references to slices, and trait objects. A reference to a slice carries the starting address of the slice and its length. A trait object carries a value's address and a pointer to the trait's implementation appropriate to that value. "Fat pointers" are also known as "wide pointers", and "double pointers".
free variableA free variable is one that is not bound within an expression or term; see the background chapter for more
genericsThe list of generic parameters defined on an item. There are three kinds of generic parameters: Type, lifetime and const parameters.
HIRThe high-level IR, created by lowering and desugaring the AST. (see more)
HirIdIdentifies a particular node in the HIR by combining a def-id with an "intra-definition offset". See the HIR chapter for more.
ICEShort for internal compiler error, this is when the compiler crashes.
ICHShort for incremental compilation hash, these are used as fingerprints for things such as HIR and crate metadata, to check if changes have been made. This is useful in incremental compilation to see if part of a crate has changed and should be recompiled.
infcxThe type inference context (InferCtxt). (see rustc_middle::infer)
inference variable, infer var When doing type, region, const inference, an inference variable is a kind of special type/region that represents what you are trying to infer. Think of X in algebra. For example, if we are trying to infer the type of a variable in a program, we create an inference variable to represent that unknown type.
internInterning refers to storing certain frequently-used constant data, such as strings, and then referring to the data by an identifier (e.g. a Symbol) rather than the data itself, to reduce memory usage and number of allocations. See this chapter for more info.
interpreterThe heart of const evaluation, running MIR code at compile time. (see more)
intrinsicIntrinsics are special functions that are implemented in the compiler itself but exposed (often unstably) to users. They do magical and dangerous things. (See std::intrinsics)
IRShort for intermediate representation, a general term in compilers. During compilation, the code is transformed from raw source (ASCII text) to various IRs. In Rust, these are primarily HIR, MIR, and LLVM IR. Each IR is well-suited for some set of computations. For example, MIR is well-suited for the borrow checker, and LLVM IR is well-suited for codegen because LLVM accepts it.
IRLO, irloSometimes used as an abbreviation for internals.rust-lang.org.
itemA kind of "definition" in the language, such as a static, const, use statement, module, struct, etc. Concretely, this corresponds to the Item type.
lang itemItems that represent concepts intrinsic to the language itself, such as special built-in traits like Sync and Send; or traits representing operations such as Add; or functions that are called by the compiler. (see more)
late-bound lifetimeA lifetime region that is substituted at its call site. Bound in a HRTB and substituted by specific functions in the compiler, such as liberate_late_bound_regions. Contrast with early-bound lifetime. (see more)
local crateThe crate currently being compiled. This is in contrast to "upstream crates" which refer to dependencies of the local crate.
LTOShort for link-time optimizations, this is a set of optimizations offered by LLVM that occur just before the final binary is linked. These include optimizations like removing functions that are never used in the final program, for example. ThinLTO is a variant of LTO that aims to be a bit more scalable and efficient, but possibly sacrifices some optimizations. You may also read issues in the Rust repo about "FatLTO", which is the loving nickname given to non-Thin LTO. LLVM documentation: here and here.
LLVM(actually not an acronym :P) an open-source compiler backend. It accepts LLVM IR and outputs native binaries. Various languages (e.g. Rust) can then implement a compiler front-end that outputs LLVM IR and use LLVM to compile to all the platforms LLVM supports.
memoizationThe process of storing the results of (pure) computations (such as pure function calls) to avoid having to repeat them in the future. This is typically a trade-off between execution speed and memory usage.
MIRThe mid-level IR that is created after type-checking for use by borrowck and codegen. (see more)
MiriA tool to detect Undefined Behavior in (unsafe) Rust code. (see more)
monomorphizationThe process of taking generic implementations of types and functions and instantiating them with concrete types. For example, in the code we might have Vec<T>, but in the final executable, we will have a copy of the Vec code for every concrete type used in the program (e.g. a copy for Vec<usize>, a copy for Vec<MyStruct>, etc).
normalizeA general term for converting to a more canonical form, but in the case of rustc typically refers to associated type normalization.
newtypeA wrapper around some other type (e.g., struct Foo(T) is a "newtype" for T). This is commonly used in Rust to give a stronger type for indices.
nicheInvalid bit patterns for a type that can be used for layout optimizations. Some types cannot have certain bit patterns. For example, the NonZero* integers or the reference &T cannot be represented by a 0 bitstring. This means the compiler can perform layout optimizations by taking advantage of the invalid "niche value". An example application for this is the Discriminant elision on Option-like enums, which allows using a type's niche as the "tag" for an enum without requiring a separate field.
NLLShort for non-lexical lifetimes, this is an extension to Rust's borrowing system to make it be based on the control-flow graph.
node-id or NodeIdAn index identifying a particular node in the AST or HIR; gradually being phased out and replaced with HirId. See the HIR chapter for more.
obligationSomething that must be proven by the trait system. (see more)
placeholderNOTE: skolemization is deprecated by placeholder a way of handling subtyping around "for-all" types (e.g., for<'a> fn(&'a u32)) as well as solving higher-ranked trait bounds (e.g., for<'a> T: Trait<'a>). See the chapter on placeholder and universes for more details.
pointUsed in the NLL analysis to refer to some particular location in the MIR; typically used to refer to a node in the control-flow graph.
projectionA general term for a "relative path", e.g. x.f is a "field projection", and T::Item is an "associated type projection".
promoted constantsConstants extracted from a function and lifted to static scope; see this section for more details.
providerThe function that executes a query. (see more)
quantifiedIn math or logic, existential and universal quantification are used to ask questions like "is there any type T for which is true?" or "is this true for all types T?"; see the background chapter for more.
queryA sub-computation during compilation. Query results can be cached in the current session or to disk for incremental compilation. (see more)
recoveryRecovery refers to handling invalid syntax during parsing (e.g. a missing comma) and continuing to parse the AST. This avoid showing spurious errors to the user (e.g. showing 'missing field' errors when the struct definition contains errors).
regionAnother term for "lifetime" often used in the literature and in the borrow checker.
ribA data structure in the name resolver that keeps track of a single scope for names. (see more)
RPITA return-position impl Trait. (see the reference).
RPITITA return-position impl Trait in trait. Unlike RPIT, this is desugared to a generic associated type (GAT). Introduced in RFC 3425. (see more)
scrutineeA scrutinee is the expression that is matched on in match expressions and similar pattern matching constructs. For example, in match x { A => 1, B => 2 }, the expression x is the scrutinee.
sessThe compiler session, which stores global data used throughout compilation
side tablesBecause the AST and HIR are immutable once created, we often carry extra information about them in the form of hashtables, indexed by the id of a particular node.
sigilLike a keyword but composed entirely of non-alphanumeric tokens. For example, & is a sigil for references.
soundnessA technical term in type theory. Roughly, if a type system is sound, then a program that type-checks is type-safe. That is, one can never (in safe rust) force a value into a variable of the wrong type. (see "completeness").
spanA location in the user's source code, used for error reporting primarily. These are like a file-name/line-number/column tuple on steroids: they carry a start/end point, and also track macro expansions and compiler desugaring. All while being packed into a few bytes (really, it's an index into a table). See the Span datatype for more.
substThe act of substituting the generic parameters inside of a type, constant expression, etc. with concrete generic arguments by supplying substs. Nowadays referred to as instantiating in the compiler.
substsThe substitutions for a given generic item (e.g. the i32, u32 in HashMap<i32, u32>). Nowadays referred to as the list of generic arguments in the compiler (but note that strictly speaking these two concepts differ, see the literature).
sysrootThe directory for build artifacts that are loaded by the compiler at runtime. (see more)
tagThe "tag" of an enum/generator encodes the discriminant of the active variant/state. Tags can either be "direct" (simply storing the discriminant in a field) or use a "niche".
TAITA type-alias impl Trait. Introduced in RFC 2515.
tcxStandard variable name for the "typing context" (TyCtxt), main data structure of the compiler. (see more)
'tcxThe lifetime of the allocation arenas used by TyCtxt. Most data interned during a compilation session will use this lifetime with the exception of HIR data which uses the 'hir lifetime. (see more)
tokenThe smallest unit of parsing. Tokens are produced after lexing (see more).
TLSThread-local storage. Variables may be defined so that each thread has its own copy (rather than all threads sharing the variable). This has some interactions with LLVM. Not all platforms support TLS.
trait reference, trait ref The name of a trait along with a suitable list of generic arguments. (see more)
transShort for translation, the code to translate MIR into LLVM IR. Renamed to codegen.
TyThe internal representation of a type. (see more)
TyCtxtThe data structure often referred to as tcx in code which provides access to session data and the query system.
UFCSShort for universal function call syntax, this is an unambiguous syntax for calling a method. Term no longer in use! Prefer fully-qualified path/syntax. (see more, see the reference)
uninhabited typeA type which has no values. This is not the same as a ZST, which has exactly 1 value. An example of an uninhabited type is enum Foo {}, which has no variants, and so, can never be created. The compiler can treat code that deals with uninhabited types as dead code, since there is no such value to be manipulated. ! (the never type) is an uninhabited type. Uninhabited types are also called empty types.
upvarA variable captured by a closure from outside the closure.
varianceDetermines how changes to a generic parameter affect subtyping; for example, if T is a subtype of U, then Vec<T> is a subtype Vec<U> because Vec is covariant in its generic parameter. See the background chapter for a more general explanation. See the variance chapter for an explanation of how type checking handles variance.
variant indexIn an enum, identifies a variant by assigning them indices starting at 0. This is purely internal and not to be confused with the "discriminant" which can be overwritten by the user (e.g. enum Bool { True = 42, False = 0 }).
well-formednessSemantically: An expression that evaluates to meaningful result. In type systems: A type related construct which follows rules of the type system.
wide pointerA pointer with additional metadata. See fat pointer for more.
ZSTZero-sized type. A type whose values have size 0 bytes. Since 2^0 = 1, such types can have exactly one value. For example, () (unit) is a ZST. struct Foo; is also a ZST. The compiler can do some nice optimizations around ZSTs.
+
+
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/appendix/humorust.html b/appendix/humorust.html new file mode 100644 index 000000000..f34732880 --- /dev/null +++ b/appendix/humorust.html @@ -0,0 +1,226 @@ + + + + + + Appendix Z: HumorRust - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + + +
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/asm.html b/asm.html new file mode 100644 index 000000000..342e91b61 --- /dev/null +++ b/asm.html @@ -0,0 +1,363 @@ + + + + + + Inline assembly - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Inline assembly

+ +

Overview

+

Inline assembly in rustc mostly revolves around taking an asm! macro invocation and plumbing it +through all of the compiler layers down to LLVM codegen. Throughout the various stages, an +InlineAsm generally consists of 3 components:

+
    +
  • +

    The template string, which is stored as an array of InlineAsmTemplatePiece. Each piece +represents either a literal or a placeholder for an operand (just like format strings).

    +
    #![allow(unused)]
    +fn main() {
    +pub enum InlineAsmTemplatePiece {
    +    String(String),
    +    Placeholder { operand_idx: usize, modifier: Option<char>, span: Span },
    +}
    +}
    +
  • +
  • +

    The list of operands to the asm! (in, [late]out, in[late]out, sym, const). These are +represented differently at each stage of lowering, but follow a common pattern:

    +
      +
    • in, out and inout all have an associated register class (reg) or explicit register +("eax").
    • +
    • inout has 2 forms: one with a single expression that is both read from and written to, and +one with two separate expressions for the input and output parts.
    • +
    • out and inout have a late flag (lateout / inlateout) to indicate that the register +allocator is allowed to reuse an input register for this output.
    • +
    • out and the split variant of inout allow _ to be specified for an output, which means +that the output is discarded. This is used to allocate scratch registers for assembly code.
    • +
    • const refers to an anonymous constants and generally works like an inline const.
    • +
    • sym is a bit special since it only accepts a path expression, which must point to a static +or a fn.
    • +
    +
  • +
  • +

    The options set at the end of the asm! macro. The only ones that are of particular interest to +rustc are NORETURN which makes asm! return ! instead of (), and RAW which disables format +string parsing. The remaining options are mostly passed through to LLVM with little processing.

    +
    #![allow(unused)]
    +fn main() {
    +bitflags::bitflags! {
    +    pub struct InlineAsmOptions: u16 {
    +        const PURE = 1 << 0;
    +        const NOMEM = 1 << 1;
    +        const READONLY = 1 << 2;
    +        const PRESERVES_FLAGS = 1 << 3;
    +        const NORETURN = 1 << 4;
    +        const NOSTACK = 1 << 5;
    +        const ATT_SYNTAX = 1 << 6;
    +        const RAW = 1 << 7;
    +        const MAY_UNWIND = 1 << 8;
    +    }
    +}
    +}
    +
  • +
+

AST

+

InlineAsm is represented as an expression in the AST with the ast::InlineAsm type.

+

The asm! macro is implemented in rustc_builtin_macros and outputs an InlineAsm AST node. The +template string is parsed using fmt_macros, positional and named operands are resolved to +explicit operand indices. Since target information is not available to macro invocations, +validation of the registers and register classes is deferred to AST lowering.

+

HIR

+

InlineAsm is represented as an expression in the HIR with the hir::InlineAsm type.

+

AST lowering is where InlineAsmRegOrRegClass is converted from Symbols to an actual register or +register class. If any modifiers are specified for a template string placeholder, these are +validated against the set allowed for that operand type. Finally, explicit registers for inputs and +outputs are checked for conflicts (same register used for different operands).

+

Type checking

+

Each register class has a whitelist of types that it may be used with. After the types of all +operands have been determined, the intrinsicck pass will check that these types are in the +whitelist. It also checks that split inout operands have compatible types and that const +operands are integers or floats. Suggestions are emitted where needed if a template modifier should +be used for an operand based on the type that was passed into it.

+

THIR

+

InlineAsm is represented as an expression in the THIR with the InlineAsmExpr type.

+

The only significant change compared to HIR is that Sym has been lowered to either a SymFn +whose expr is a Literal ZST of the fn, or a SymStatic which points to the DefId of a +static.

+

MIR

+

InlineAsm is represented as a Terminator in the MIR with the TerminatorKind::InlineAsm variant

+

As part of THIR lowering, InOut and SplitInOut operands are lowered to a split form with a +separate in_value and out_place.

+

Semantically, the InlineAsm terminator is similar to the Call terminator except that it has +multiple output places where a Call only has a single return place output.

+

Codegen

+

Operands are lowered one more time before being passed to LLVM codegen, this is represented by the InlineAsmOperandRef type from rustc_codegen_ssa.

+

The operands are lowered to LLVM operands and constraint codes as follows:

+
    +
  • out and the output part of inout operands are added first, as required by LLVM. Late output +operands have a = prefix added to their constraint code, non-late output operands have a =& +prefix added to their constraint code.
  • +
  • in operands are added normally.
  • +
  • inout operands are tied to the matching output operand.
  • +
  • sym operands are passed as function pointers or pointers, using the "s" constraint.
  • +
  • const operands are formatted to a string and directly inserted in the template string.
  • +
+

The template string is converted to LLVM form:

+
    +
  • $ characters are escaped as $$.
  • +
  • const operands are converted to strings and inserted directly.
  • +
  • Placeholders are formatted as ${X:M} where X is the operand index and M is the modifier +character. Modifiers are converted from the Rust form to the LLVM form.
  • +
+

The various options are converted to clobber constraints or LLVM attributes, refer to the +RFC +for more details.

+

Note that LLVM is sometimes rather picky about what types it accepts for certain constraint codes +so we sometimes need to insert conversions to/from a supported type. See the target-specific +ISelLowering.cpp files in LLVM for details of what types are supported for each register class.

+

Adding support for new architectures

+

Adding inline assembly support to an architecture is mostly a matter of defining the registers and +register classes for that architecture. All the definitions for register classes are located in +compiler/rustc_target/asm/.

+

Additionally you will need to implement lowering of these register classes to LLVM constraint codes +in compiler/rustc_codegen_llvm/asm.rs.

+

When adding a new architecture, make sure to cross-reference with the LLVM source code:

+
    +
  • LLVM has restrictions on which types can be used with a particular constraint code. Refer to the +getRegForInlineAsmConstraint function in lib/Target/${ARCH}/${ARCH}ISelLowering.cpp.
  • +
  • LLVM reserves certain registers for its internal use, which causes them to not be saved/restored +properly around inline assembly blocks. These registers are listed in the getReservedRegs +function in lib/Target/${ARCH}/${ARCH}RegisterInfo.cpp. Any "conditionally" reserved register +such as the frame/base pointer must always be treated as reserved for Rust purposes because we +can't know ahead of time whether a function will require a frame/base pointer.
  • +
+

Tests

+

Various tests for inline assembly are available:

+
    +
  • tests/assembly/asm
  • +
  • tests/ui/asm
  • +
  • tests/codegen/asm-*
  • +
+

Every architecture supported by inline assembly must have exhaustive tests in +tests/assembly/asm which test all combinations of register classes and types.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/ast-lowering.html b/ast-lowering.html new file mode 100644 index 000000000..2a7c4a1d5 --- /dev/null +++ b/ast-lowering.html @@ -0,0 +1,278 @@ + + + + + + Lowering AST to HIR - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

AST lowering

+

The AST lowering step converts AST to HIR. +This means many structures are removed if they are irrelevant +for type analysis or similar syntax agnostic analyses. Examples +of such structures include but are not limited to

+
    +
  • Parenthesis +
      +
    • Removed without replacement, the tree structure makes order explicit
    • +
    +
  • +
  • for loops and while (let) loops +
      +
    • Converted to loop + match and some let bindings
    • +
    +
  • +
  • if let +
      +
    • Converted to match
    • +
    +
  • +
  • Universal impl Trait +
      +
    • Converted to generic arguments +(but with some flags, to know that the user didn't write them)
    • +
    +
  • +
  • Existential impl Trait +
      +
    • Converted to a virtual existential type declaration
    • +
    +
  • +
+

Lowering needs to uphold several invariants in order to not trigger the +sanity checks in compiler/rustc_passes/src/hir_id_validator.rs:

+
    +
  1. A HirId must be used if created. So if you use the lower_node_id, +you must use the resulting NodeId or HirId (either is fine, since +any NodeIds in the HIR are checked for existing HirIds)
  2. +
  3. Lowering a HirId must be done in the scope of the owning item. +This means you need to use with_hir_id_owner if you are creating parts +of an item other than the one being currently lowered. This happens for +example during the lowering of existential impl Trait
  4. +
  5. A NodeId that will be placed into a HIR structure must be lowered, +even if its HirId is unused. Calling +let _ = self.lower_node_id(node_id); is perfectly legitimate.
  6. +
  7. If you are creating new nodes that didn't exist in the AST, you must +create new ids for them. This is done by calling the next_id method, +which produces both a new NodeId as well as automatically lowering it +for you so you also get the HirId.
  8. +
+

If you are creating new DefIds, since each DefId needs to have a +corresponding NodeId, it is advisable to add these NodeIds to the +AST so you don't have to generate new ones during lowering. This has +the advantage of creating a way to find the DefId of something via its +NodeId. If lowering needs this DefId in multiple places, you can't +generate a new NodeId in all those places because you'd also get a new +DefId then. With a NodeId from the AST this is not an issue.

+

Having the NodeId also allows the DefCollector to generate the DefIds +instead of lowering having to do it on the fly. Centralizing the DefId +generation in one place makes it easier to refactor and reason about.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/ast-validation.html b/ast-validation.html new file mode 100644 index 000000000..c28a7d1ed --- /dev/null +++ b/ast-validation.html @@ -0,0 +1,243 @@ + + + + + + AST validation - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

AST validation

+

AST validation is a separate AST pass that visits each +item in the tree and performs simple checks. This pass +doesn't perform any complex analysis, type checking or +name resolution.

+

Before performing any validation, the compiler first expands +the macros. Then this pass performs validations to check +that each AST item is in the correct state. And when this pass +is done, the compiler runs the crate resolution pass.

+

Validations

+

Validations are defined in AstValidator type, which +itself is located in rustc_ast_passes crate. This +type implements various simple checks which emit errors +when certain language rules are broken.

+

In addition, AstValidator implements Visitor trait +that defines how to visit AST items (which can be functions, +traits, enums, etc).

+

For each item, visitor performs specific checks. For +example, when visiting a function declaration, +AstValidator checks that the function has:

+
    +
  • no more than u16::MAX parameters;
  • +
  • c-variadic argument goes the last in the declaration;
  • +
  • documentation comments aren't applied to function parameters;
  • +
  • and other validations.
  • +
+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/attributes.html b/attributes.html new file mode 100644 index 000000000..b238c2484 --- /dev/null +++ b/attributes.html @@ -0,0 +1,257 @@ + + + + + + Attributes - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Attributes

+

Attributes come in two types: inert (or built-in) and active (non-builtin).

+

Builtin/inert attributes

+

These attributes are defined in the compiler itself, in +compiler/rustc_feature/src/builtin_attrs.rs.

+

Examples include #[allow] and #[macro_use].

+

These attributes have several important characteristics:

+
    +
  • They are always in scope, and do not participate in typical path-based resolution.
  • +
  • They cannot be renamed. For example, use allow as foo will compile, but writing #[foo] will +produce an error.
  • +
  • They are 'inert', meaning they are left as-is by the macro expansion code. +As a result, any behavior comes as a result of the compiler explicitly checking for their presence. +For example, lint-related code explicitly checks for #[allow], #[warn], #[deny], and +#[forbid], rather than the behavior coming from the expansion of the attributes themselves.
  • +
+

'Non-builtin'/'active' attributes

+

These attributes are defined by a crate - either the standard library, or a proc-macro crate.

+

Important: Many non-builtin attributes, such as #[derive], are still considered part of the +core Rust language. However, they are not called 'builtin attributes', since they have a +corresponding definition in the standard library.

+

Definitions of non-builtin attributes take two forms:

+
    +
  1. Proc-macro attributes, defined via a function annotated with #[proc_macro_attribute] in a +proc-macro crate.
  2. +
  3. AST-based attributes, defined in the standard library. These attributes have special 'stub' +macros defined in places like library/core/src/macros/mod.rs.
  4. +
+

These definitions exist to allow the macros to participate in typical path-based resolution - they +can be imported, re-exported, and renamed just like any other item definition. However, the body of +the definition is empty. Instead, the macro is annotated with the #[rustc_builtin_macro] +attribute, which tells the compiler to run a corresponding function in rustc_builtin_macros.

+

All non-builtin attributes have the following characteristics:

+
    +
  • Like all other definitions (e.g. structs), they must be brought into scope via an import. +Many standard library attributes are included in the prelude - this is why writing #[derive] +works without an import.
  • +
  • They participate in macro expansion. The implementation of the macro may leave the attribute +target unchanged, modify the target, produce new AST nodes, or remove the target entirely.
  • +
+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/autodiff/debugging.html b/autodiff/debugging.html new file mode 100644 index 000000000..79612d050 --- /dev/null +++ b/autodiff/debugging.html @@ -0,0 +1,286 @@ + + + + + + How to debug - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Reporting backend crashes

+

If after a compilation failure you are greeted by a large amount of llvm-ir code, then our enzyme backend likely failed to compile your code. These cases are harder to debug, so your help is highly appreciated. Please also keep in mind that release builds are usually much more likely to work at the moment.

+

The final goal here is to reproduce your bug in the enzyme compiler explorer, in order to create a bug report in the Enzyme repository.

+

We have an autodiff flag which you can pass to rustflags to help with this. it will print the whole llvm-ir module, along with some __enzyme_fwddiff or __enzyme_autodiff calls. A potential workflow on linux could look like:

+

Controlling llvm-ir generation

+

Before generating the llvm-ir, keep in mind two techniques that can help ensure the relevant rust code is visible for debugging:

+
    +
  • std::hint::black_box: wrap rust variables or expressions in std::hint::black_box() to prevent rust and llvm from optimizing them away. This is useful when you need to inspect or manually manipulate specific values in the llvm-ir.
  • +
  • extern "rust" or extern "c": if you want to see how a specific function declaration is lowered to llvm-ir, you can declare it as extern "rust" or extern "c". You can also look for existing __enzyme_autodiff or similar declarations within the generated module for examples.
  • +
+

1) Generate an llvm-ir reproducer

+
rustflags="-z autodiff=enable,printmodbefore" cargo +enzyme build --release &> out.ll 
+
+

This also captures a few warnings and info messages above and below your module. open out.ll and remove every line above ; moduleid = <somehash>. Now look at the end of the file and remove everything that's not part of llvm-ir, i.e. remove errors and warnings. The last line of your llvm-ir should now start with !<somenumber> = , i.e. !40831 = !{i32 0, i32 1037508, i32 1037538, i32 1037559} or !43760 = !dilocation(line: 297, column: 5, scope: !43746).

+

The actual numbers will depend on your code.

+

2) Check your llvm-ir reproducer

+

To confirm that your previous step worked, we will use llvm's opt tool. find your path to the opt binary, with a path similar to <some_dir>/rust/build/<x86/arm/...-target-tripple>/build/bin/opt. also find llvmenzyme-19.<so/dll/dylib> path, similar to /rust/build/target-tripple/enzyme/build/enzyme/llvmenzyme-19. Please keep in mind that llvm frequently updates it's llvm backend, so the version number might be higher (20, 21, ...). Once you have both, run the following command:

+
<path/to/opt> out.ll -load-pass-plugin=/path/to/llvmenzyme-19.so -passes="enzyme" -s
+
+

If the previous step succeeded, you are going to see the same error that you saw when compiling your rust code with cargo.

+

If you fail to get the same error, please open an issue in the rust repository. If you succeed, congrats! the file is still huge, so let's automatically minimize it.

+

3) Minimize your llvm-ir reproducer

+

First find your llvm-extract binary, it's in the same folder as your opt binary. then run:

+
<path/to/llvm-extract> -s --func=<name> --recursive --rfunc="enzyme_autodiff*" --rfunc="enzyme_fwddiff*" --rfunc=<fnc_called_by_enzyme> out.ll -o mwe.ll 
+
+

This command creates mwe.ll, a minimal working example.

+

Please adjust the name passed with the last --func flag. You can either apply the #[no_mangle] attribute to the function you differentiate, then you can replace it with the rust name. otherwise you will need to look up the mangled function name. To do that, open out.ll and search for __enzyme_fwddiff or __enzyme_autodiff. the first string in that function call is the name of your function. example:

+
define double @enzyme_opt_helper_0(ptr %0, i64 %1, double %2) {
+  %4 = call double (...) @__enzyme_fwddiff(ptr @_zn2ad3_f217h3b3b1800bd39fde3e, metadata !"enzyme_const", ptr %0, metadata !"enzyme_const", i64 %1, metadata !"enzyme_dup", double %2, double %2)
+  ret double %4
+}
+
+

Here, _zn2ad3_f217h3b3b1800bd39fde3e is the correct name. make sure to not copy the leading @. redo step 2) by running the opt command again, but this time passing mwe.ll as the input file instead of out.ll. Check if this minimized example still reproduces the crash.

+

4) (Optional) Minimize your llvm-ir reproducer further.

+

After the previous step you should have an mwe.ll file with ~5k loc. let's try to get it down to 50. find your llvm-reduce binary next to opt and llvm-extract. Copy the first line of your error message, an example could be:

+
opt: /home/manuel/prog/rust/src/llvm-project/llvm/lib/ir/instructions.cpp:686: void llvm::callinst::init(llvm::functiontype*, llvm::value*, llvm::arrayref<llvm::value*>, llvm::arrayref<llvm::operandbundledeft<llvm::value*> >, const llvm::twine&): assertion `(args.size() == fty->getnumparams() || (fty->isvararg() && args.size() > fty->getnumparams())) && "calling a function with bad signature!"' failed.
+
+

If you just get a segfault there is no sensible error message and not much to do automatically, so continue to 5).
+otherwise, create a script.sh file containing

+
#!/bin/bash
+<path/to/your/opt> $1 -load-pass-plugin=/path/to/llvmenzyme-19.so -passes="enzyme" \
+    |& grep "/some/path.cpp:686: void llvm::callinst::init"
+
+

Experiment a bit with which error message you pass to grep. it should be long enough to make sure that the error is unique. However, for longer errors including ( or ) you will need to escape them correctly which can become annoying. Run

+
<path/to/llvm-reduce> --test=script.sh mwe.ll 
+
+

If you see input isn't interesting! verify interesting-ness test, you got the error message in script.sh wrong, you need to make sure that grep matches your actual error. If all works out, you will see a lot of iterations, ending with a new reduced.ll file. Verify with opt that you still get the same error.

+

Advanced debugging: manual llvm-ir investigation

+

Once you have a minimized reproducer (mwe.ll or reduced.ll), you can delve deeper:

+
    +
  • manual editing: try manually rewriting the llvm-ir. for certain issues, like those involving indirect calls, you might investigate enzyme-specific intrinsics like __enzyme_virtualreverse. Understanding how to use these might require consulting enzyme's documentation or source code.
  • +
  • enzyme test cases: look for relevant test cases within the enzyme repository that might demonstrate the correct usage of features or intrinsics related to your problem.
  • +
+

5) Report your bug.

+

Afterwards, you should be able to copy and paste your mwe.ll (or reduced.ll) example into our compiler explorer.

+
    +
  • Select llvm ir as language and opt 20 as compiler.
  • +
  • Replace the field to the right of your compiler with -passes="enzyme", if it is not already set.
  • +
  • Hopefully, you will see once again your now familiar error.
  • +
  • Please use the share button to copy links to them.
  • +
  • Please create an issue on https://github.com/enzymead/enzyme/issues and share mwe.ll and (if you have it) reduced.ll, as well as links to the compiler explorer. Please feel free to also add your rust code or a link to it.
  • +
+

Documenting findings

+

some enzyme errors, like "attempting to call an indirect active function whose runtime value is inactive", have historically caused confusion. If you investigate such an issue, even if you don't find a complete solution, please consider documenting your findings. If the insights are general to enzyme and not specific to its rust usage, contributing them to the main enzyme documentation is often the best first step. You can also mention your findings in the relevant enzyme github issue or propose updates to these docs if appropriate. This helps prevent others from starting from scratch.

+

With a clear reproducer and documentation, hopefully an enzyme developer will be able to fix your bug. Once that happens, the enzyme submodule inside the rust compiler will be updated, which should allow you to differentiate your rust code. Thanks for helping us to improve rust-ad.

+

Minimize rust code

+

Beyond having a minimal llvm-ir reproducer, it is also helpful to have a minimal rust reproducer without dependencies. This allows us to add it as a test case to ci once we fix it, which avoids regressions for the future.

+

There are a few solutions to help you with minimizing the rust reproducer. This is probably the most simple automated approach: cargo-minimize.

+

Otherwise we have various alternatives, including treereduce, halfempty, or picireny, potentially also creduce.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/autodiff/flags.html b/autodiff/flags.html new file mode 100644 index 000000000..7b708460d --- /dev/null +++ b/autodiff/flags.html @@ -0,0 +1,247 @@ + + + + + + Autodiff flags - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Supported RUSTFLAGS

+

To support you while debugging or profiling, we have added support for an experimental -Z autodiff rustc flag (which can be passed to cargo via RUSTFLAGS), which allow changing the behaviour of Enzyme, without recompiling rustc. We currently support the following values for autodiff.

+

Debug Flags

+
PrintTA // Print TypeAnalysis information
+PrintAA // Print ActivityAnalysis information
+Print // Print differentiated functions while they are being generated and optimized
+PrintPerf // Print AD related Performance warnings
+PrintModBefore // Print the whole LLVM-IR module directly before running AD
+PrintModAfter // Print the whole LLVM-IR module after running AD, before optimizations
+PrintModFinal // Print the whole LLVM-IR module after running optimizations and AD
+LooseTypes // Risk incorrect derivatives instead of aborting when missing Type Info 
+
+
+

LooseTypes is often helpful to get rid of Enzyme errors stating Can not deduce type of <X> and to be able to run some code. But please keep in mind that this flag absolutely has the chance to cause incorrect gradients. Even worse, the gradients might be correct for certain input values, but not for others. So please create issues about such bugs and only use this flag temporarily while you wait for your bug to be fixed.

+
+

Benchmark flags

+

For performance experiments and benchmarking we also support

+
NoPostopt // We won't optimize the LLVM-IR Module after AD
+RuntimeActivity // Enables the runtime activity feature from Enzyme 
+Inline // Instructs Enzyme to maximize inlining as far as possible, beyond LLVM's default
+
+

You can combine multiple autodiff values using a comma as separator:

+
RUSTFLAGS="-Z autodiff=Enable,LooseTypes,PrintPerf" cargo +enzyme build
+
+

Using -Zautodiff=Enable will allow using autodiff and update your normal rustc compilation pipeline:

+
    +
  1. Run your selected compilation pipeline. If you selected a release build, we will disable vectorization and loop unrolling.
  2. +
  3. Differentiate your functions.
  4. +
  5. Run your selected compilation pipeline again on the whole module. This time we do not disable vectorization or loop unrolling.
  6. +
+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/autodiff/installation.html b/autodiff/installation.html new file mode 100644 index 000000000..62efe18ad --- /dev/null +++ b/autodiff/installation.html @@ -0,0 +1,281 @@ + + + + + + Installation - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Installation

+

In the near future, std::autodiff should become available in nightly builds for users. As a contributor however, you will still need to build rustc from source. Please be aware that the msvc target is not supported at the moment, all other tier 1 targets should work. Please open an issue if you encounter any problems on a supported tier 1 target, or if you successfully build this project on a tier2/tier3 target.

+

Build instructions

+

First you need to clone and configure the Rust repository:

+
git clone --depth=1 git@github.com:rust-lang/rust.git
+cd rust
+./configure --enable-llvm-link-shared --enable-llvm-plugins --enable-llvm-enzyme --release-channel=nightly --enable-llvm-assertions --enable-clang --enable-lld --enable-option-checking --enable-ninja --disable-docs
+
+

Afterwards you can build rustc using:

+
./x.py build --stage 1 library
+
+

Afterwards rustc toolchain link will allow you to use it through cargo:

+
rustup toolchain link enzyme build/host/stage1
+rustup toolchain install nightly # enables -Z unstable-options
+
+

You can then run our test cases:

+
./x.py test --stage 1 tests/codegen/autodiff
+./x.py test --stage 1 tests/pretty/autodiff
+./x.py test --stage 1 tests/ui/autodiff
+./x.py test --stage 1 tests/ui/feature-gates/feature-gate-autodiff.rs
+
+

Autodiff is still experimental, so if you want to use it in your own projects, you will need to add lto="fat" to your Cargo.toml +and use RUSTFLAGS="-Zautodiff=Enable" cargo +enzyme instead of cargo or cargo +nightly.

+

Compiler Explorer and dist builds

+

Our compiler explorer instance can be updated to a newer rustc in a similar way. First, prepare a docker instance.

+
docker run -it ubuntu:22.04
+export CC=clang CXX=clang++
+apt update
+apt install wget vim python3 git curl libssl-dev pkg-config lld ninja-build cmake clang build-essential 
+
+

Then build rustc in a slightly altered way:

+
git clone --depth=1 https://github.com/rust-lang/rust.git
+cd rust
+./configure --enable-llvm-link-shared --enable-llvm-plugins --enable-llvm-enzyme --release-channel=nightly --enable-llvm-assertions --enable-clang --enable-lld --enable-option-checking --enable-ninja --disable-docs
+./x dist
+
+

We then copy the tarball to our host. The dockerid is the newest entry under docker ps -a.

+
docker cp <dockerid>:/rust/build/dist/rust-nightly-x86_64-unknown-linux-gnu.tar.gz rust-nightly-x86_64-unknown-linux-gnu.tar.gz
+
+

Afterwards we can create a new (pre-release) tag on the EnzymeAD/rust repository and make a PR against the EnzymeAD/enzyme-explorer repository to update the tag. +Remember to ping tgymnich on the PR to run his update script. Note: We should archive EnzymeAD/rust and update the instructions here. The explorer should soon +be able to get the rustc toolchain from the official rust servers.

+

Build instruction for Enzyme itself

+

Following the Rust build instruction above will build LLVMEnzyme, LLDEnzyme, and ClangEnzyme along with the Rust compiler. +We recommend that approach, if you just want to use any of them and have no experience with cmake. +However, if you prefer to just build Enzyme without Rust, then these instructions might help.

+
git clone --depth=1 git@github.com:llvm/llvm-project.git 
+cd llvm-project
+mkdir build
+cd build
+cmake -G Ninja ../llvm -DLLVM_TARGETS_TO_BUILD="host" -DLLVM_ENABLE_ASSERTIONS=ON -DLLVM_ENABLE_PROJECTS="clang;lld" -DLLVM_ENABLE_RUNTIMES="openmp" -DLLVM_ENABLE_PLUGINS=ON -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=.
+ninja
+ninja install
+
+

This gives you a working LLVM build, now we can continue with building Enzyme. +Leave the llvm-project folder, and execute the following commands:

+
git clone git@github.com:EnzymeAD/Enzyme.git 
+cd Enzyme/enzyme
+mkdir build 
+cd build 
+cmake .. -G Ninja -DLLVM_DIR=<YourLocalPath>/llvm-project/build/lib/cmake/llvm/ -DLLVM_EXTERNAL_LIT=<YourLocalPath>/llvm-project/llvm/utils/lit/lit.py -DCMAKE_BUILD_TYPE=Release -DCMAKE_EXPORT_COMPILE_COMMANDS=YES -DBUILD_SHARED_LIBS=ON
+ninja
+
+

This will build Enzyme, and you can find it in Enzyme/enzyme/build/lib/<LLD/Clang/LLVM>Enzyme.so. (Endings might differ based on your OS).

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/autodiff/internals.html b/autodiff/internals.html new file mode 100644 index 000000000..7923eed8f --- /dev/null +++ b/autodiff/internals.html @@ -0,0 +1,232 @@ + + + + + + Autodiff internals - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

The std::autodiff module in Rust allows differentiable programming:

+
#![feature(autodiff)]
+use std::autodiff::autodiff;
+
+// f(x) = x * x, f'(x) = 2.0 * x
+// bar therefore returns (x * x, 2.0 * x)
+#[autodiff(bar, Reverse, Active, Active)]
+fn foo(x: f32) -> f32 { x * x }
+
+fn main() {
+    assert_eq!(bar(3.0, 1.0), (9.0, 6.0));
+    assert_eq!(bar(4.0, 1.0), (16.0, 8.0));
+}
+

The detailed documentation for the std::autodiff module is available at std::autodiff.

+

Differentiable programing is used in various fields like numerical computing, solid mechanics, computational chemistry, fluid dynamics or for Neural Network training via Backpropagation, ODE solver, differentiable rendering, quantum computing, and climate simulations.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/autodiff/limitations.html b/autodiff/limitations.html new file mode 100644 index 000000000..f0509b2b4 --- /dev/null +++ b/autodiff/limitations.html @@ -0,0 +1,231 @@ + + + + + + Current limitations - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Current limitations

+

Safety and Soundness

+

Enzyme currently assumes that the user passes shadow arguments (dx, dy, ...) of appropriate size. Under Reverse Mode, we additionally assume that shadow arguments are mutable. In Reverse Mode we adjust the outermost pointer or reference to be mutable. Therefore &f32 will receive the shadow type &mut f32. However, we do not check length for other types than slices (e.g. enums, Vec). We also do not enforce mutability of inner references, but will warn if we recognize them. We do intend to add additional checks over time.

+

ABI adjustments

+

In some cases, a function parameter might get lowered in a way that we currently don't handle correctly, leading to a compile time type mismatch in the rustc_codegen_llvm backend. Here are some examples.

+

Compile Times

+

Enzyme will often achieve excellent runtime performance, but might increase your compile time by a large factor. For Rust, we already have made significant improvements and have a list of further improvements planed - please reach out if you have time to help here.

+

Type Analysis

+

Most of the times, Type Analysis (TA) is the reason of large (>5x) compile time increases when using Enzyme. This poster explains why we need to run Type Analysis in the bottom left part: Poster Link.

+

We intend to increase the number of locations where we pass down Type information based on Rust types, which in turn will reduce the number of locations where Enzyme has to run Type Analysis, which will help compile times.

+

Duplicated Optimizations

+

The key reason for Enzyme offering often excellent performance is that Enzyme differentiates already optimized LLVM-IR. However, we also (have to) run LLVM's optimization pipeline after differentiating, to make sure that the code which Enzyme generates is optimized properly. As a result you should have excellent runtime performance (please fill an issue if not), but at a compile time cost for running optimizations twice.

+

Fat-LTO

+

The usage of #[autodiff(...)] currently requires compiling your project with Fat-LTO. We technically only need LTO if the function being differentiated calls functions in other compilation units. Therefore, other solutions are possible, but this is the most simple one to get started.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/ayu-highlight.css b/ayu-highlight.css new file mode 100644 index 000000000..32c943222 --- /dev/null +++ b/ayu-highlight.css @@ -0,0 +1,78 @@ +/* +Based off of the Ayu theme +Original by Dempfi (https://github.com/dempfi/ayu) +*/ + +.hljs { + display: block; + overflow-x: auto; + background: #191f26; + color: #e6e1cf; +} + +.hljs-comment, +.hljs-quote { + color: #5c6773; + font-style: italic; +} + +.hljs-variable, +.hljs-template-variable, +.hljs-attribute, +.hljs-attr, +.hljs-regexp, +.hljs-link, +.hljs-selector-id, +.hljs-selector-class { + color: #ff7733; +} + +.hljs-number, +.hljs-meta, +.hljs-builtin-name, +.hljs-literal, +.hljs-type, +.hljs-params { + color: #ffee99; +} + +.hljs-string, +.hljs-bullet { + color: #b8cc52; +} + +.hljs-title, +.hljs-built_in, +.hljs-section { + color: #ffb454; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-symbol { + color: #ff7733; +} + +.hljs-name { + color: #36a3d9; +} + +.hljs-tag { + color: #00568d; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} + +.hljs-addition { + color: #91b362; +} + +.hljs-deletion { + color: #d96c75; +} diff --git a/backend/backend-agnostic.html b/backend/backend-agnostic.html new file mode 100644 index 000000000..3d8b09604 --- /dev/null +++ b/backend/backend-agnostic.html @@ -0,0 +1,397 @@ + + + + + + Backend Agnostic Codegen - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Backend Agnostic Codegen

+ +

rustc_codegen_ssa +provides an abstract interface for all backends to implement, +namely LLVM, Cranelift, and GCC.

+

Below is some background information on the refactoring that created this +abstract interface.

+

Refactoring of rustc_codegen_llvm

+

by Denis Merigoux, October 23rd 2018

+

State of the code before the refactoring

+

All the code related to the compilation of MIR into LLVM IR was contained +inside the rustc_codegen_llvm crate. Here is the breakdown of the most +important elements:

+
    +
  • the back folder (7,800 LOC) implements the mechanisms for creating the +different object files and archive through LLVM, but also the communication +mechanisms for parallel code generation;
  • +
  • the debuginfo (3,200 LOC) folder contains all code that passes debug +information down to LLVM;
  • +
  • the llvm (2,200 LOC) folder defines the FFI necessary to communicate with +LLVM using the C++ API;
  • +
  • the mir (4,300 LOC) folder implements the actual lowering from MIR to LLVM +IR;
  • +
  • the base.rs (1,300 LOC) file contains some helper functions but also the +high-level code that launches the code generation and distributes the work.
  • +
  • the builder.rs (1,200 LOC) file contains all the functions generating +individual LLVM IR instructions inside a basic block;
  • +
  • the common.rs (450 LOC) contains various helper functions and all the +functions generating LLVM static values;
  • +
  • the type_.rs (300 LOC) defines most of the type translations to LLVM IR.
  • +
+

The goal of this refactoring is to separate inside this crate code that is +specific to the LLVM from code that can be reused for other rustc backends. For +instance, the mir folder is almost entirely backend-specific but it relies +heavily on other parts of the crate. The separation of the code must not affect +the logic of the code nor its performance.

+

For these reasons, the separation process involves two transformations that +have to be done at the same time for the resulting code to compile:

+
    +
  1. replace all the LLVM-specific types by generics inside function signatures +and structure definitions;
  2. +
  3. encapsulate all functions calling the LLVM FFI inside a set of traits that +will define the interface between backend-agnostic code and the backend.
  4. +
+

While the LLVM-specific code will be left in rustc_codegen_llvm, all the new +traits and backend-agnostic code will be moved in rustc_codegen_ssa (name +suggestion by @eddyb).

+

Generic types and structures

+

@irinagpopa started to parametrize the types of rustc_codegen_llvm by a +generic Value type, implemented in LLVM by a reference &'ll Value. This +work has been extended to all structures inside the mir folder and elsewhere, +as well as for LLVM's BasicBlock and Type types.

+

The two most important structures for the LLVM codegen are CodegenCx and +Builder. They are parametrized by multiple lifetime parameters and the type +for Value.

+
struct CodegenCx<'ll, 'tcx> {
+  /* ... */
+}
+
+struct Builder<'a, 'll, 'tcx> {
+  cx: &'a CodegenCx<'ll, 'tcx>,
+  /* ... */
+}
+

CodegenCx is used to compile one codegen-unit that can contain multiple +functions, whereas Builder is created to compile one basic block.

+

The code in rustc_codegen_llvm has to deal with multiple explicit lifetime +parameters, that correspond to the following:

+
    +
  • 'tcx is the longest lifetime, that corresponds to the original TyCtxt +containing the program's information;
  • +
  • 'a is a short-lived reference of a CodegenCx or another object inside a +struct;
  • +
  • 'll is the lifetime of references to LLVM objects such as Value or +Type.
  • +
+

Although there are already many lifetime parameters in the code, making it +generic uncovered situations where the borrow-checker was passing only due to +the special nature of the LLVM objects manipulated (they are extern pointers). +For instance, an additional lifetime parameter had to be added to +LocalAnalyser in analyse.rs, leading to the definition:

+
struct LocalAnalyzer<'mir, 'a, 'tcx> {
+  /* ... */
+}
+

However, the two most important structures CodegenCx and Builder are not +defined in the backend-agnostic code. Indeed, their content is highly specific +of the backend and it makes more sense to leave their definition to the backend +implementor than to allow just a narrow spot via a generic field for the +backend's context.

+

Traits and interface

+

Because they have to be defined by the backend, CodegenCx and Builder will +be the structures implementing all the traits defining the backend's interface. +These traits are defined in the folder rustc_codegen_ssa/traits and all the +backend-agnostic code is parametrized by them. For instance, let us explain how +a function in base.rs is parametrized:

+
pub fn codegen_instance<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>>(
+    cx: &'a Bx::CodegenCx,
+    instance: Instance<'tcx>
+) {
+    /* ... */
+}
+

In this signature, we have the two lifetime parameters explained earlier and +the master type Bx which satisfies the trait BuilderMethods corresponding +to the interface satisfied by the Builder struct. The BuilderMethods +defines an associated type Bx::CodegenCx that itself satisfies the +CodegenMethods traits implemented by the struct CodegenCx.

+

On the trait side, here is an example with part of the definition of +BuilderMethods in traits/builder.rs:

+
pub trait BuilderMethods<'a, 'tcx>:
+    HasCodegen<'tcx>
+    + DebugInfoBuilderMethods<'tcx>
+    + ArgTypeMethods<'tcx>
+    + AbiBuilderMethods<'tcx>
+    + IntrinsicCallMethods<'tcx>
+    + AsmBuilderMethods<'tcx>
+{
+    fn new_block<'b>(
+        cx: &'a Self::CodegenCx,
+        llfn: Self::Function,
+        name: &'b str
+    ) -> Self;
+    /* ... */
+    fn cond_br(
+        &mut self,
+        cond: Self::Value,
+        then_llbb: Self::BasicBlock,
+        else_llbb: Self::BasicBlock,
+    );
+    /* ... */
+}
+

Finally, a master structure implementing the ExtraBackendMethods trait is +used for high-level codegen-driving functions like codegen_crate in +base.rs. For LLVM, it is the empty LlvmCodegenBackend. +ExtraBackendMethods should be implemented by the same structure that +implements the CodegenBackend defined in +rustc_codegen_utils/codegen_backend.rs.

+

During the traitification process, certain functions have been converted from +methods of a local structure to methods of CodegenCx or Builder and a +corresponding self parameter has been added. Indeed, LLVM stores information +internally that it can access when called through its API. This information +does not show up in a Rust data structure carried around when these methods are +called. However, when implementing a Rust backend for rustc, these methods +will need information from CodegenCx, hence the additional parameter (unused +in the LLVM implementation of the trait).

+

State of the code after the refactoring

+

The traits offer an API which is very similar to the API of LLVM. This is not +the best solution since LLVM has a very special way of doing things: when +adding another backend, the traits definition might be changed in order to +offer more flexibility.

+

However, the current separation between backend-agnostic and LLVM-specific code +has allowed the reuse of a significant part of the old rustc_codegen_llvm. +Here is the new LOC breakdown between backend-agnostic (BA) and LLVM for the +most important elements:

+
    +
  • back folder: 3,800 (BA) vs 4,100 (LLVM);
  • +
  • mir folder: 4,400 (BA) vs 0 (LLVM);
  • +
  • base.rs: 1,100 (BA) vs 250 (LLVM);
  • +
  • builder.rs: 1,400 (BA) vs 0 (LLVM);
  • +
  • common.rs: 350 (BA) vs 350 (LLVM);
  • +
+

The debuginfo folder has been left almost untouched by the splitting and is +specific to LLVM. Only its high-level features have been traitified.

+

The new traits folder has 1500 LOC only for trait definitions. Overall, the +27,000 LOC-sized old rustc_codegen_llvm code has been split into the new +18,500 LOC-sized new rustc_codegen_llvm and the 12,000 LOC-sized +rustc_codegen_ssa. We can say that this refactoring allowed the reuse of +approximately 10,000 LOC that would otherwise have had to be duplicated between +the multiple backends of rustc.

+

The refactored version of rustc's backend introduced no regression over the +test suite nor in performance benchmark, which is in coherence with the nature +of the refactoring that used only compile-time parametricity (no trait +objects).

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/backend/codegen.html b/backend/codegen.html new file mode 100644 index 000000000..f8a63b2e3 --- /dev/null +++ b/backend/codegen.html @@ -0,0 +1,276 @@ + + + + + + Code generation - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Code generation

+

Code generation (or "codegen") is the part of the compiler +that actually generates an executable binary. +Usually, rustc uses LLVM for code generation, +but there is also support for Cranelift and GCC. +The key is that rustc doesn't implement codegen itself. +It's worth noting, though, that in the Rust source code, +many parts of the backend have codegen in their names +(there are no hard boundaries).

+
+

NOTE: If you are looking for hints on how to debug code generation bugs, +please see this section of the debugging chapter.

+
+

What is LLVM?

+

LLVM is "a collection of modular and reusable compiler and +toolchain technologies". In particular, the LLVM project contains a pluggable +compiler backend (also called "LLVM"), which is used by many compiler projects, +including the clang C compiler and our beloved rustc.

+

LLVM takes input in the form of LLVM IR. It is basically assembly code with +additional low-level types and annotations added. These annotations are helpful +for doing optimizations on the LLVM IR and outputted machine code. The end +result of all this is (at long last) something executable (e.g. an ELF object, +an EXE, or wasm).

+

There are a few benefits to using LLVM:

+
    +
  • We don't have to write a whole compiler backend. This reduces implementation +and maintenance burden.
  • +
  • We benefit from the large suite of advanced optimizations that the LLVM +project has been collecting.
  • +
  • We can automatically compile Rust to any of the platforms for which LLVM has +support. For example, as soon as LLVM added support for wasm, voila! rustc, +clang, and a bunch of other languages were able to compile to wasm! (Well, +there was some extra stuff to be done, but we were 90% there anyway).
  • +
  • We and other compiler projects benefit from each other. For example, when the +Spectre and Meltdown security vulnerabilities were discovered, +only LLVM needed to be patched.
  • +
+

Running LLVM, linking, and metadata generation

+

Once LLVM IR for all of the functions and statics, etc is built, it is time to +start running LLVM and its optimization passes. LLVM IR is grouped into +"modules". Multiple "modules" can be codegened at the same time to aid in +multi-core utilization. These "modules" are what we refer to as codegen +units. These units were established way back during monomorphization +collection phase.

+

Once LLVM produces objects from these modules, these objects are passed to the +linker along with, optionally, the metadata object and an archive or an +executable is produced.

+

It is not necessarily the codegen phase described above that runs the +optimizations. With certain kinds of LTO, the optimization might happen at the +linking time instead. It is also possible for some optimizations to happen +before objects are passed on to the linker and some to happen during the +linking.

+

This all happens towards the very end of compilation. The code for this can be +found in rustc_codegen_ssa::back and +rustc_codegen_llvm::back. Sadly, this piece of code is not +really well-separated into LLVM-dependent code; the rustc_codegen_ssa +contains a fair amount of code specific to the LLVM backend.

+

Once these components are done with their work you end up with a number of +files in your filesystem corresponding to the outputs you have requested.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/backend/debugging.html b/backend/debugging.html new file mode 100644 index 000000000..a27f4a17c --- /dev/null +++ b/backend/debugging.html @@ -0,0 +1,451 @@ + + + + + + Debugging LLVM - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Debugging LLVM

+
+

NOTE: If you are looking for info about code generation, please see this +chapter instead.

+
+

This section is about debugging compiler bugs in code generation (e.g. why the +compiler generated some piece of code or crashed in LLVM). LLVM is a big +project on its own that probably needs to have its own debugging document (not +that I could find one). But here are some tips that are important in a rustc +context:

+

Minimize the example

+

As a general rule, compilers generate lots of information from analyzing code. +Thus, a useful first step is usually to find a minimal example. One way to do +this is to

+
    +
  1. +

    create a new crate that reproduces the issue (e.g. adding whatever crate is +at fault as a dependency, and using it from there)

    +
  2. +
  3. +

    minimize the crate by removing external dependencies; that is, moving +everything relevant to the new crate

    +
  4. +
  5. +

    further minimize the issue by making the code shorter (there are tools that +help with this like creduce)

    +
  6. +
+

For more discussion on methodology for steps 2 and 3 above, there is an +epic blog post from pnkfelix specifically about Rust program minimization.

+

Enable LLVM internal checks

+

The official compilers (including nightlies) have LLVM assertions disabled, +which means that LLVM assertion failures can show up as compiler crashes (not +ICEs but "real" crashes) and other sorts of weird behavior. If you are +encountering these, it is a good idea to try using a compiler with LLVM +assertions enabled - either an "alt" nightly or a compiler you build yourself +by setting [llvm] assertions=true in your bootstrap.toml - and see whether +anything turns up.

+

The rustc build process builds the LLVM tools into +./build/<host-triple>/llvm/bin. They can be called directly. +These tools include:

+
    +
  • llc, which compiles bitcode (.bc files) to executable code; this can be used to +replicate LLVM backend bugs.
  • +
  • opt, a bitcode transformer that runs LLVM optimization passes.
  • +
  • bugpoint, which reduces large test cases to small, useful ones.
  • +
  • and many others, some of which are referenced in the text below.
  • +
+

By default, the Rust build system does not check for changes to the LLVM source code or +its build configuration settings. So, if you need to rebuild the LLVM that is linked +into rustc, first delete the file .llvm-stamp, which should be located +in build/<host-triple>/llvm/.

+

The default rustc compilation pipeline has multiple codegen units, which is +hard to replicate manually and means that LLVM is called multiple times in +parallel. If you can get away with it (i.e. if it doesn't make your bug +disappear), passing -C codegen-units=1 to rustc will make debugging easier.

+

Get your hands on raw LLVM input

+

For rustc to generate LLVM IR, you need to pass the --emit=llvm-ir flag. If +you are building via cargo, use the RUSTFLAGS environment variable (e.g. +RUSTFLAGS='--emit=llvm-ir'). This causes rustc to spit out LLVM IR into the +target directory.

+

cargo llvm-ir [options] path spits out the LLVM IR for a particular function +at path. (cargo install cargo-asm installs cargo asm and cargo llvm-ir). --build-type=debug emits code for debug builds. There are also +other useful options. Also, debug info in LLVM IR can clutter the output a lot: +RUSTFLAGS="-C debuginfo=0" is really useful.

+

RUSTFLAGS="-C save-temps" outputs LLVM bitcode (not the same as IR) at +different stages during compilation, which is sometimes useful. The output LLVM +bitcode will be in .bc files in the compiler's output directory, set via the +--out-dir DIR argument to rustc.

+
    +
  • +

    If you are hitting an assertion failure or segmentation fault from the LLVM +backend when invoking rustc itself, it is a good idea to try passing each +of these .bc files to the llc command, and see if you get the same +failure. (LLVM developers often prefer a bug reduced to a .bc file over one +that uses a Rust crate for its minimized reproduction.)

    +
  • +
  • +

    To get human readable versions of the LLVM bitcode, one just needs to convert +the bitcode (.bc) files to .ll files using llvm-dis, which should be in +the target local compilation of rustc.

    +
  • +
+

Note that rustc emits different IR depending on whether -O is enabled, even +without LLVM's optimizations, so if you want to play with the IR rustc emits, +you should:

+
$ rustc +local my-file.rs --emit=llvm-ir -O -C no-prepopulate-passes \
+    -C codegen-units=1
+$ OPT=./build/$TRIPLE/llvm/bin/opt
+$ $OPT -S -O2 < my-file.ll > my
+
+

If you just want to get the LLVM IR during the LLVM pipeline, to e.g. see which +IR causes an optimization-time assertion to fail, or to see when LLVM performs +a particular optimization, you can pass the rustc flag -C llvm-args=-print-after-all, and possibly add -C llvm-args='-filter-print-funcs=EXACT_FUNCTION_NAME (e.g. -C llvm-args='-filter-print-funcs=_ZN11collections3str21_$LT$impl$u20$str$GT$\ 7replace17hbe10ea2e7c809b0bE').

+

That produces a lot of output into standard error, so you'll want to pipe that +to some file. Also, if you are using neither -filter-print-funcs nor -C codegen-units=1, then, because the multiple codegen units run in parallel, the +printouts will mix together and you won't be able to read anything.

+
    +
  • +

    One caveat to the aforementioned methodology: the -print family of options +to LLVM only prints the IR unit that the pass runs on (e.g., just a +function), and does not include any referenced declarations, globals, +metadata, etc. This means you cannot in general feed the output of -print +into llc to reproduce a given problem.

    +
  • +
  • +

    Within LLVM itself, calling F.getParent()->dump() at the beginning of +SafeStackLegacyPass::runOnFunction will dump the whole module, which +may provide better basis for reproduction. (However, you +should be able to get that same dump from the .bc files dumped by +-C save-temps.)

    +
  • +
+

If you want just the IR for a specific function (say, you want to see why it +causes an assertion or doesn't optimize correctly), you can use llvm-extract, +e.g.

+
$ ./build/$TRIPLE/llvm/bin/llvm-extract \
+    -func='_ZN11collections3str21_$LT$impl$u20$str$GT$7replace17hbe10ea2e7c809b0bE' \
+    -S \
+    < unextracted.ll \
+    > extracted.ll
+
+

Investigate LLVM optimization passes

+

If you are seeing incorrect behavior due to an optimization pass, a very handy +LLVM option is -opt-bisect-limit, which takes an integer denoting the index +value of the highest pass to run. Index values for taken passes are stable +from run to run; by coupling this with software that automates bisecting the +search space based on the resulting program, an errant pass can be quickly +determined. When an -opt-bisect-limit is specified, all runs are displayed +to standard error, along with their index and output indicating if the +pass was run or skipped. Setting the limit to an index of -1 (e.g., +RUSTFLAGS="-C llvm-args=-opt-bisect-limit=-1") will show all passes and +their corresponding index values.

+

If you want to play with the optimization pipeline, you can use the opt tool +from ./build/<host-triple>/llvm/bin/ with the LLVM IR emitted by rustc.

+

When investigating the implementation of LLVM itself, you should be +aware of its internal debug infrastructure. +This is provided in LLVM Debug builds, which you enable for rustc +LLVM builds by changing this setting in the bootstrap.toml:

+
[llvm]
+# Indicates whether the LLVM assertions are enabled or not
+assertions = true
+
+# Indicates whether the LLVM build is a Release or Debug build
+optimize = false
+
+

The quick summary is:

+
    +
  • Setting assertions=true enables coarse-grain debug messaging. +
      +
    • beyond that, setting optimize=false enables fine-grain debug messaging.
    • +
    +
  • +
  • LLVM_DEBUG(dbgs() << msg) in LLVM is like debug!(msg) in rustc.
  • +
  • The -debug option turns on all messaging; it is like setting the +environment variable RUSTC_LOG=debug in rustc.
  • +
  • The -debug-only=<pass1>,<pass2> variant is more selective; it is like +setting the environment variable RUSTC_LOG=path1,path2 in rustc.
  • +
+

Getting help and asking questions

+

If you have some questions, head over to the rust-lang Zulip and +specifically the #t-compiler/wg-llvm stream.

+

Compiler options to know and love

+

The -C help and -Z help compiler switches will list out a variety +of interesting options you may find useful. Here are a few of the most +common that pertain to LLVM development (some of them are employed in the +tutorial above):

+
    +
  • The --emit llvm-ir option emits a <filename>.ll file with LLVM IR in textual format +
      +
    • The --emit llvm-bc option emits in bytecode format (<filename>.bc)
    • +
    +
  • +
  • Passing -C llvm-args=<foo> allows passing pretty much all the +options that tools like llc and opt would accept; +e.g. -C llvm-args=-print-before-all to print IR before every LLVM +pass.
  • +
  • The -C no-prepopulate-passes will avoid pre-populate the LLVM pass +manager with a list of passes. This will allow you to view the LLVM +IR that rustc generates, not the LLVM IR after optimizations.
  • +
  • The -C passes=val option allows you to supply a space separated list of extra LLVM passes to run
  • +
  • The -C save-temps option saves all temporary output files during compilation
  • +
  • The -Z print-llvm-passes option will print out LLVM optimization passes being run
  • +
  • The -Z time-llvm-passes option measures the time of each LLVM pass
  • +
  • The -Z verify-llvm-ir option will verify the LLVM IR for correctness
  • +
  • The -Z no-parallel-backend will disable parallel compilation of distinct compilation units
  • +
  • The -Z llvm-time-trace option will output a Chrome profiler compatible JSON file +which contains details and timings for LLVM passes.
  • +
  • The -C llvm-args=-opt-bisect-limit=<index> option allows for bisecting LLVM +optimizations.
  • +
+

Filing LLVM bug reports

+

When filing an LLVM bug report, you will probably want some sort of minimal +working example that demonstrates the problem. The Godbolt compiler explorer is +really helpful for this.

+
    +
  1. +

    Once you have some LLVM IR for the problematic code (see above), you can +create a minimal working example with Godbolt. Go to +llvm.godbolt.org.

    +
  2. +
  3. +

    Choose LLVM-IR as programming language.

    +
  4. +
  5. +

    Use llc to compile the IR to a particular target as is:

    +
      +
    • There are some useful flags: -mattr enables target features, -march= +selects the target, -mcpu= selects the CPU, etc.
    • +
    • Commands like llc -march=help output all architectures available, which +is useful because sometimes the Rust arch names and the LLVM names do not +match.
    • +
    • If you have compiled rustc yourself somewhere, in the target directory +you have binaries for llc, opt, etc.
    • +
    +
  6. +
  7. +

    If you want to optimize the LLVM-IR, you can use opt to see how the LLVM +optimizations transform it.

    +
  8. +
  9. +

    Once you have a godbolt link demonstrating the issue, it is pretty easy to +fill in an LLVM bug. Just visit their github issues page.

    +
  10. +
+

Porting bug fixes from LLVM

+

Once you've identified the bug as an LLVM bug, you will sometimes +find that it has already been reported and fixed in LLVM, but we haven't +gotten the fix yet (or perhaps you are familiar enough with LLVM to fix it yourself).

+

In that case, we can sometimes opt to port the fix for the bug +directly to our own LLVM fork, so that rustc can use it more easily. +Our fork of LLVM is maintained in rust-lang/llvm-project. Once +you've landed the fix there, you'll also need to land a PR modifying +our submodule commits -- ask around on Zulip for help.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/backend/implicit-caller-location.html b/backend/implicit-caller-location.html new file mode 100644 index 000000000..d06e219ad --- /dev/null +++ b/backend/implicit-caller-location.html @@ -0,0 +1,441 @@ + + + + + + Implicit caller location - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Implicit caller location

+ +

Approved in RFC 2091, this feature enables the accurate reporting of caller location during panics +initiated from functions like Option::unwrap, Result::expect, and Index::index. This feature +adds the #[track_caller] attribute for functions, the +caller_location intrinsic, and the stabilization-friendly +core::panic::Location::caller wrapper.

+

Motivating example

+

Take this example program:

+
fn main() {
+    let foo: Option<()> = None;
+    foo.unwrap(); // this should produce a useful panic message!
+}
+

Prior to Rust 1.42, panics like this unwrap() printed a location in core:

+
$ rustc +1.41.0 example.rs; example.exe
+thread 'main' panicked at 'called `Option::unwrap()` on a `None` value',...core\macros\mod.rs:15:40
+note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace.
+
+

As of 1.42, we get a much more helpful message:

+
$ rustc +1.42.0 example.rs; example.exe
+thread 'main' panicked at 'called `Option::unwrap()` on a `None` value', example.rs:3:5
+note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
+
+

These error messages are achieved through a combination of changes to panic! internals to make use +of core::panic::Location::caller and a number of #[track_caller] annotations in the standard +library which propagate caller information.

+

Reading caller location

+

Previously, panic! made use of the file!(), line!(), and column!() macros to construct a +Location pointing to where the panic occurred. These macros couldn't be given an overridden +location, so functions which intentionally invoked panic! couldn't provide their own location, +hiding the actual source of error.

+

Internally, panic!() now calls core::panic::Location::caller() to find out where it +was expanded. This function is itself annotated with #[track_caller] and wraps the +caller_location compiler intrinsic implemented by rustc. This intrinsic is easiest +explained in terms of how it works in a const context.

+

Caller location in const

+

There are two main phases to returning the caller location in a const context: walking up the stack +to find the right location and allocating a const value to return.

+

Finding the right Location

+

In a const context we "walk up the stack" from where the intrinsic is invoked, stopping when we +reach the first function call in the stack which does not have the attribute. This walk is in +InterpCx::find_closest_untracked_caller_location().

+

Starting at the bottom, we iterate up over stack Frames in the +InterpCx::stack, calling +InstanceKind::requires_caller_location on the +Instances from each Frame. We stop once we find one that returns false and +return the span of the previous frame which was the "topmost" tracked function.

+

Allocating a static Location

+

Once we have a Span, we need to allocate static memory for the Location, which is performed by +the TyCtxt::const_caller_location() query. Internally this calls +InterpCx::alloc_caller_location() and results in a unique +memory kind (MemoryKind::CallerLocation). The SSA codegen backend is able +to emit code for these same values, and we use this code there as well.

+

Once our Location has been allocated in static memory, our intrinsic returns a reference to it.

+

Generating code for #[track_caller] callees

+

To generate efficient code for a tracked function and its callers, we need to provide the same +behavior from the intrinsic's point of view without having a stack to walk up at runtime. We invert +the approach: as we grow the stack down we pass an additional argument to calls of tracked functions +rather than walking up the stack when the intrinsic is called. That additional argument can be +returned wherever the caller location is queried.

+

The argument we append is of type &'static core::panic::Location<'static>. A reference was chosen +to avoid unnecessary copying because a pointer is a third the size of +std::mem::size_of::<core::panic::Location>() == 24 at time of writing.

+

When generating a call to a function which is tracked, we pass the location argument the value of +FunctionCx::get_caller_location.

+

If the calling function is tracked, get_caller_location returns the local in +FunctionCx::caller_location which was populated by the current caller's caller. +In these cases the intrinsic "returns" a reference which was actually provided in an argument to its +caller.

+

If the calling function is not tracked, get_caller_location allocates a Location static from +the current Span and returns a reference to that.

+

We more efficiently achieve the same behavior as a loop starting from the bottom by passing a single +&Location value through the caller_location fields of multiple FunctionCxs as we grow the +stack downward.

+

Codegen examples

+

What does this transformation look like in practice? Take this example which uses the new feature:

+
#![feature(track_caller)]
+use std::panic::Location;
+
+#[track_caller]
+fn print_caller() {
+    println!("called from {}", Location::caller());
+}
+
+fn main() {
+    print_caller();
+}
+

Here print_caller() appears to take no arguments, but we compile it to something like this:

+
#![feature(panic_internals)]
+use std::panic::Location;
+
+fn print_caller(caller: &Location) {
+    println!("called from {}", caller);
+}
+
+fn main() {
+    print_caller(&Location::internal_constructor(file!(), line!(), column!()));
+}
+

Dynamic dispatch

+

In codegen contexts we have to modify the callee ABI to pass this information down the stack, but +the attribute expressly does not modify the type of the function. The ABI change must be +transparent to type checking and remain sound in all uses.

+

Direct calls to tracked functions will always know the full codegen flags for the callee and can +generate appropriate code. Indirect callers won't have this information and it's not encoded in +the type of the function pointer they call, so we generate a ReifyShim around the function +whenever taking a pointer to it. This shim isn't able to report the actual location of the indirect +call (the function's definition site is reported instead), but it prevents miscompilation and is +probably the best we can do without modifying fully-stabilized type signatures.

+
+

Note: We always emit a ReifyShim when taking a pointer to a tracked function. While the +constraint here is imposed by codegen contexts, we don't know during MIR construction of the shim +whether we'll be called in a const context (safe to ignore shim) or in a codegen context (unsafe +to ignore shim). Even if we did know, the results from const and codegen contexts must agree.

+
+

The attribute

+

The #[track_caller] attribute is checked alongside other codegen attributes to ensure the +function:

+
    +
  • has the "Rust" ABI (as opposed to e.g., "C")
  • +
  • is not a closure
  • +
  • is not #[naked]
  • +
+

If the use is valid, we set CodegenFnAttrsFlags::TRACK_CALLER. This flag influences +the return value of InstanceKind::requires_caller_location which is in turn +used in both const and codegen contexts to ensure correct propagation.

+

Traits

+

When applied to trait method implementations, the attribute works as it does for regular functions.

+

When applied to a trait method prototype, the attribute applies to all implementations of the +method. When applied to a default trait method implementation, the attribute takes effect on +that implementation and any overrides.

+

Examples:

+
#![feature(track_caller)]
+
+macro_rules! assert_tracked {
+    () => {{
+        let location = std::panic::Location::caller();
+        assert_eq!(location.file(), file!());
+        assert_ne!(location.line(), line!(), "line should be outside this fn");
+        println!("called at {}", location);
+    }};
+}
+
+trait TrackedFourWays {
+    /// All implementations inherit `#[track_caller]`.
+    #[track_caller]
+    fn blanket_tracked();
+
+    /// Implementors can annotate themselves.
+    fn local_tracked();
+
+    /// This implementation is tracked (overrides are too).
+    #[track_caller]
+    fn default_tracked() {
+        assert_tracked!();
+    }
+
+    /// Overrides of this implementation are tracked (it is too).
+    #[track_caller]
+    fn default_tracked_to_override() {
+        assert_tracked!();
+    }
+}
+
+/// This impl uses the default impl for `default_tracked` and provides its own for
+/// `default_tracked_to_override`.
+impl TrackedFourWays for () {
+    fn blanket_tracked() {
+        assert_tracked!();
+    }
+
+    #[track_caller]
+    fn local_tracked() {
+        assert_tracked!();
+    }
+
+    fn default_tracked_to_override() {
+        assert_tracked!();
+    }
+}
+
+fn main() {
+    <() as TrackedFourWays>::blanket_tracked();
+    <() as TrackedFourWays>::default_tracked();
+    <() as TrackedFourWays>::default_tracked_to_override();
+    <() as TrackedFourWays>::local_tracked();
+}
+

Background/History

+

Broadly speaking, this feature's goal is to improve common Rust error messages without breaking +stability guarantees, requiring modifications to end-user source, relying on platform-specific +debug-info, or preventing user-defined types from having the same error-reporting benefits.

+

Improving the output of these panics has been a goal of proposals since at least mid-2016 (see +non-viable alternatives in the approved RFC for details). It took two more years until RFC 2091 +was approved, much of its rationale for this feature's design having been discovered through the +discussion around several earlier proposals.

+

The design in the original RFC limited itself to implementations that could be done inside the +compiler at the time without significant refactoring. However in the year and a half between the +approval of the RFC and the actual implementation work, a revised design was proposed and written +up on the tracking issue. During the course of implementing that, it was also discovered that an +implementation was possible without modifying the number of arguments in a function's MIR, which +would simplify later stages and unlock use in traits.

+

Because the RFC's implementation strategy could not readily support traits, the semantics were not +originally specified. They have since been implemented following the path which seemed most correct +to the author and reviewers.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/backend/libs-and-metadata.html b/backend/libs-and-metadata.html new file mode 100644 index 000000000..6dfb3edf0 --- /dev/null +++ b/backend/libs-and-metadata.html @@ -0,0 +1,345 @@ + + + + + + Libraries and metadata - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Libraries and metadata

+

When the compiler sees a reference to an external crate, it needs to load some +information about that crate. This chapter gives an overview of that process, +and the supported file formats for crate libraries.

+

Libraries

+

A crate dependency can be loaded from an rlib, dylib, or rmeta file. A +key point of these file formats is that they contain rustc-specific +metadata. This metadata allows the compiler to discover enough +information about the external crate to understand the items it contains, +which macros it exports, and much more.

+

rlib

+

An rlib is an archive file, which is similar to a tar file. This file +format is specific to rustc, and may change over time. This file contains:

+
    +
  • Object code, which is the result of code generation. This is used during +regular linking. There is a separate .o file for each codegen unit. The +codegen step can be skipped with the -C linker-plugin-lto CLI option, which means each .o +file will only contain LLVM bitcode.
  • +
  • LLVM bitcode, which is a binary representation of LLVM's intermediate +representation, which is embedded as a section in the .o files. This can +be used for Link Time Optimization (LTO). This can be removed with the +-C embed-bitcode=no CLI option to improve compile times +and reduce disk space if LTO is not needed.
  • +
  • rustc metadata, in a file named lib.rmeta.
  • +
  • A symbol table, which is essentially a list of symbols with offsets to the +object files that contain that symbol. This is pretty standard for archive +files.
  • +
+

dylib

+

A dylib is a platform-specific shared library. It includes the rustc +metadata in a special link section called .rustc.

+

rmeta

+

An rmeta file is a custom binary format that contains the metadata for the +crate. This file can be used for fast "checks" of a project by skipping all code +generation (as is done with cargo check), collecting enough information for +documentation (as is done with cargo doc), or for pipelining. +This file is created if the --emit=metadata CLI option is used.

+

rmeta files do not support linking, since they do not contain compiled +object files.

+

Metadata

+

The metadata contains a wide swath of different elements. This guide will not go +into detail about every field it contains. You are encouraged to browse the +CrateRoot definition to get a sense of the different elements it contains. +Everything about metadata encoding and decoding is in the rustc_metadata +package.

+

Here are a few highlights of things it contains:

+
    +
  • The version of the rustc compiler. The compiler will refuse to load files +from any other version.
  • +
  • The Strict Version Hash (SVH). This helps ensure the +correct dependency is loaded.
  • +
  • The Stable Crate Id. This is a hash used +to identify crates.
  • +
  • Information about all the source files in the library. This can be used for +a variety of things, such as diagnostics pointing to sources in a +dependency.
  • +
  • Information about exported macros, traits, types, and items. Generally, +anything that's needed to be known when a path references something inside a +crate dependency.
  • +
  • Encoded MIR. This is optional, and only encoded if needed for code +generation. cargo check skips this for performance reasons.
  • +
+

Strict Version Hash

+

The Strict Version Hash (SVH, also known as the "crate hash") is a 64-bit +hash that is used to ensure that the correct crate dependencies are loaded. It +is possible for a directory to contain multiple copies of the same dependency +built with different settings, or built from different sources. The crate +loader will skip any crates that have the wrong SVH.

+

The SVH is also used for the incremental compilation session filename, +though that usage is mostly historic.

+

The hash includes a variety of elements:

+
    +
  • Hashes of the HIR nodes.
  • +
  • All of the upstream crate hashes.
  • +
  • All of the source filenames.
  • +
  • Hashes of certain command-line flags (like -C metadata via the Stable +Crate Id, and all CLI options marked with [TRACKED]).
  • +
+

See compute_hir_hash for where the hash is actually computed.

+

Stable Crate Id

+

The StableCrateId is a 64-bit hash used to identify different crates with +potentially the same name. It is a hash of the crate name and all the +-C metadata CLI options computed in StableCrateId::new. It is +used in a variety of places, such as symbol name mangling, crate loading, and +much more.

+

By default, all Rust symbols are mangled and incorporate the stable crate id. +This allows multiple versions of the same crate to be included together. Cargo +automatically generates -C metadata hashes based on a variety of factors, like +the package version, source, and target kind (a lib and test can have the same +crate name, so they need to be disambiguated).

+

Crate loading

+

Crate loading can have quite a few subtle complexities. During name +resolution, when an external crate is referenced (via an extern crate or +path), the resolver uses the CrateLoader which is responsible for finding +the crate libraries and loading the metadata for them. After the dependency +is loaded, the CrateLoader will provide the information the resolver needs +to perform its job (such as expanding macros, resolving paths, etc.).

+

To load each external crate, the CrateLoader uses a CrateLocator to +actually find the correct files for one specific crate. There is some great +documentation in the locator module that goes into detail on how loading +works, and I strongly suggest reading it to get the full picture.

+

The location of a dependency can come from several different places. Direct +dependencies are usually passed with --extern flags, and the loader can look +at those directly. Direct dependencies often have references to their own +dependencies, which need to be loaded, too. These are usually found by +scanning the directories passed with the -L flag for any file whose metadata +contains a matching crate name and SVH. The loader +will also look at the sysroot to find dependencies.

+

As crates are loaded, they are kept in the CStore with the crate metadata +wrapped in the CrateMetadata struct. After resolution and expansion, the +CStore will make its way into the GlobalCtxt for the rest of the +compilation.

+

Pipelining

+

One trick to improve compile times is to start building a crate as soon as the +metadata for its dependencies is available. For a library, there is no need to +wait for the code generation of dependencies to finish. Cargo implements this +technique by telling rustc to emit an rmeta file for each +dependency as well as an rlib. As early as it can, rustc will +save the rmeta file to disk before it continues to the code generation +phase. The compiler sends a JSON message to let the build tool know that it +can start building the next crate if possible.

+

The crate loading system is smart enough to know when it +sees an rmeta file to use that if the rlib is not there (or has only been +partially written).

+

This pipelining isn't possible for binaries, because the linking phase will +require the code generation of all its dependencies. In the future, it may be +possible to further improve this scenario by splitting linking into a separate +command (see #64191).

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/backend/lowering-mir.html b/backend/lowering-mir.html new file mode 100644 index 000000000..19e7e6f6d --- /dev/null +++ b/backend/lowering-mir.html @@ -0,0 +1,254 @@ + + + + + + Lowering MIR - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Lowering MIR to a Codegen IR

+

Now that we have a list of symbols to generate from the collector, we need to +generate some sort of codegen IR. In this chapter, we will assume LLVM IR, +since that's what rustc usually uses. The actual monomorphization is performed +as we go, while we do the translation.

+

Recall that the backend is started by +rustc_codegen_ssa::base::codegen_crate. Eventually, this reaches +rustc_codegen_ssa::mir::codegen_mir, which does the lowering from +MIR to LLVM IR.

+

The code is split into modules which handle particular MIR primitives:

+ +

Before a function is translated a number of simple and primitive analysis +passes will run to help us generate simpler and more efficient LLVM IR. An +example of such an analysis pass would be figuring out which variables are +SSA-like, so that we can translate them to SSA directly rather than relying on +LLVM's mem2reg for those variables. The analysis can be found in +rustc_codegen_ssa::mir::analyze.

+

Usually a single MIR basic block will map to a LLVM basic block, with very few +exceptions: intrinsic or function calls and less basic MIR statements like +assert can result in multiple basic blocks. This is a perfect lede into the +non-portable LLVM-specific part of the code generation. Intrinsic generation is +fairly easy to understand as it involves very few abstraction levels in between +and can be found in rustc_codegen_llvm::intrinsic.

+

Everything else will use the builder interface. This is the code that gets +called in the rustc_codegen_ssa::mir::* modules discussed above.

+
+

TODO: discuss how constants are generated

+
+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/backend/monomorph.html b/backend/monomorph.html new file mode 100644 index 000000000..892df49c2 --- /dev/null +++ b/backend/monomorph.html @@ -0,0 +1,276 @@ + + + + + + Monomorphization - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Monomorphization

+ +

As you probably know, Rust has a very expressive type system that has extensive +support for generic types. But of course, assembly is not generic, so we need +to figure out the concrete types of all the generics before the code can +execute.

+

Different languages handle this problem differently. For example, in some +languages, such as Java, we may not know the most precise type of value until +runtime. In the case of Java, this is ok because (almost) all variables are +reference values anyway (i.e. pointers to a heap allocated object). This +flexibility comes at the cost of performance, since all accesses to an object +must dereference a pointer.

+

Rust takes a different approach: it monomorphizes all generic types. This +means that compiler stamps out a different copy of the code of a generic +function for each concrete type needed. For example, if I use a Vec<u64> and +a Vec<String> in my code, then the generated binary will have two copies of +the generated code for Vec: one for Vec<u64> and another for Vec<String>. +The result is fast programs, but it comes at the cost of compile time (creating +all those copies can take a while) and binary size (all those copies might take +a lot of space).

+

Monomorphization is the first step in the backend of the Rust compiler.

+

Collection

+

First, we need to figure out what concrete types we need for all the generic +things in our program. This is called collection, and the code that does this +is called the monomorphization collector.

+

Take this example:

+
fn banana() {
+   peach::<u64>();
+}
+
+fn main() {
+    banana();
+}
+

The monomorphization collector will give you a list of [main, banana, peach::<u64>]. These are the functions that will have machine code generated +for them. Collector will also add things like statics to that list.

+

See the collector rustdocs for more info.

+

The monomorphization collector is run just before MIR lowering and codegen. +rustc_codegen_ssa::base::codegen_crate calls the +collect_and_partition_mono_items query, which does monomorphization +collection and then partitions them into codegen +units.

+

Codegen Unit (CGU) partitioning

+

For better incremental build times, the CGU partitioner creates two CGU for each source level +modules. One is for "stable" i.e. non-generic code and the other is more volatile code i.e. +monomorphized/specialized instances.

+

For dependencies, consider Crate A and Crate B, such that Crate B depends on Crate A. +The following table lists different scenarios for a function in Crate A that might be used by one +or more modules in Crate B.

+
+ + + + +
Crate A functionBehavior
Non-generic functionCrate A function doesn't appear in any codegen units of Crate B
Non-generic #[inline] functionCrate A function appears within a single CGU of Crate B, and exists even after post-inlining stage
Generic functionRegardless of inlining, all monomorphized (specialized) functions
from Crate A appear within a single codegen unit for Crate B.
The codegen unit exists even after the post inlining stage.
Generic #[inline] function- same -
+
+

For more details about the partitioner read the module level documentation.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/backend/updating-llvm.html b/backend/updating-llvm.html new file mode 100644 index 000000000..5df401636 --- /dev/null +++ b/backend/updating-llvm.html @@ -0,0 +1,445 @@ + + + + + + Updating LLVM - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Updating LLVM

+ + +

Rust supports building against multiple LLVM versions:

+
    +
  • Tip-of-tree for the current LLVM development branch is usually supported +within a few days. PRs for such fixes are tagged with llvm-main.
  • +
  • The latest released major version is always supported.
  • +
  • The one or two preceding major versions are usually supported.
  • +
+

By default, Rust uses its own fork in the rust-lang/llvm-project repository. +This fork is based on a release/$N.x branch of the upstream project, where +$N is either the latest released major version, or the current major version +in release candidate phase. The fork is never based on the main development +branch.

+

Our LLVM fork only accepts:

+
    +
  • Backports of changes that have already landed upstream.
  • +
  • Workarounds for build issues affecting our CI environment.
  • +
+

With the exception of one grandfathered-in patch for SGX enablement, we do not +accept functional patches that have not been upstreamed first.

+

There are three types of LLVM updates, with different procedures:

+
    +
  • Backports while the current major LLVM version is supported.
  • +
  • Backports while the current major LLVM version is no longer supported (or +the change is not eligible for upstream backport).
  • +
  • Update to a new major LLVM version.
  • +
+

Backports (upstream supported)

+

While the current major LLVM version is supported upstream, fixes should be +backported upstream first, and the release branch then merged back into the +Rust fork.

+
    +
  1. Make sure the bugfix is in upstream LLVM.
  2. +
  3. If this hasn't happened already, request a backport to the upstream release +branch. If you have LLVM commit access, follow the backport process. +Otherwise, open an issue requesting the backport. Continue once the +backport has been approved and merged.
  4. +
  5. Identify the branch that rustc is currently using. The src/llvm-project +submodule is always pinned to a branch of the +rust-lang/llvm-project repository.
  6. +
  7. Fork the rust-lang/llvm-project repository.
  8. +
  9. Check out the appropriate branch (typically named rustc/a.b-yyyy-mm-dd).
  10. +
  11. Add a remote for the upstream repository using +git remote add upstream https://github.com/llvm/llvm-project.git and +fetch it using git fetch upstream.
  12. +
  13. Merge the upstream/release/$N.x branch.
  14. +
  15. Push this branch to your fork.
  16. +
  17. Send a Pull Request to rust-lang/llvm-project to the same branch as before. +Be sure to reference the Rust and/or LLVM issue that you're fixing in the PR +description.
  18. +
  19. Wait for the PR to be merged.
  20. +
  21. Send a PR to rust-lang/rust updating the src/llvm-project submodule with +your bugfix. This can be done locally with git submodule update --remote src/llvm-project typically.
  22. +
  23. Wait for PR to be merged.
  24. +
+

An example PR: +#59089

+

Backports (upstream not supported)

+

Upstream LLVM releases are only supported for two to three months after the +GA release. Once upstream backports are no longer accepted, changes should be +cherry-picked directly to our fork.

+
    +
  1. Make sure the bugfix is in upstream LLVM.
  2. +
  3. Identify the branch that rustc is currently using. The src/llvm-project +submodule is always pinned to a branch of the +rust-lang/llvm-project repository.
  4. +
  5. Fork the rust-lang/llvm-project repository.
  6. +
  7. Check out the appropriate branch (typically named rustc/a.b-yyyy-mm-dd).
  8. +
  9. Add a remote for the upstream repository using +git remote add upstream https://github.com/llvm/llvm-project.git and +fetch it using git fetch upstream.
  10. +
  11. Cherry-pick the relevant commit(s) using git cherry-pick -x.
  12. +
  13. Push this branch to your fork.
  14. +
  15. Send a Pull Request to rust-lang/llvm-project to the same branch as before. +Be sure to reference the Rust and/or LLVM issue that you're fixing in the PR +description.
  16. +
  17. Wait for the PR to be merged.
  18. +
  19. Send a PR to rust-lang/rust updating the src/llvm-project submodule with +your bugfix. This can be done locally with git submodule update --remote src/llvm-project typically.
  20. +
  21. Wait for PR to be merged.
  22. +
+

An example PR: +#59089

+

New LLVM Release Updates

+ +

Unlike bugfixes, +updating to a new release of LLVM typically requires a lot more work. +This is where we can't reasonably cherry-pick commits backwards, +so we need to do a full update. +There's a lot of stuff to do here, +so let's go through each in detail.

+
    +
  1. +

    LLVM announces that its latest release version has branched. +This will show up as a branch in the llvm/llvm-project repository, +typically named release/$N.x, +where $N is the version of LLVM that's being released.

    +
  2. +
  3. +

    Create a new branch in the rust-lang/llvm-project repository +from this release/$N.x branch, +and name it rustc/a.b-yyyy-mm-dd, +where a.b is the current version number of LLVM in-tree +at the time of the branch, +and the remaining part is the current date.

    +
  4. +
  5. +

    Apply Rust-specific patches to the llvm-project repository. +All features and bugfixes are upstream, +but there's often some weird build-related patches +that don't make sense to upstream. +These patches are typically the latest patches in the +rust-lang/llvm-project branch that rustc is currently using.

    +
  6. +
  7. +

    Build the new LLVM in the rust repository. +To do this, +you'll want to update the src/llvm-project repository to your branch, +and the revision you've created. +It's also typically a good idea to update .gitmodules with the new +branch name of the LLVM submodule. +Make sure you've committed changes to +src/llvm-project to ensure submodule updates aren't reverted. +Some commands you should execute are:

    +
      +
    • ./x build src/llvm-project - test that LLVM still builds
    • +
    • ./x build - build the rest of rustc
    • +
    +

    You'll likely need to update llvm-wrapper/*.cpp +to compile with updated LLVM bindings. +Note that you should use #ifdef and such to ensure +that the bindings still compile on older LLVM versions.

    +

    Note that profile = "compiler" and other defaults set by ./x setup +download LLVM from CI instead of building it from source. +You should disable this temporarily to make sure your changes are being used. +This is done by having the following setting in bootstrap.toml:

    +
    [llvm]
    +download-ci-llvm = false
    +
    +
  8. +
  9. +

    Test for regressions across other platforms. LLVM often has at least one bug +for non-tier-1 architectures, so it's good to do some more testing before +sending this to bors! If you're low on resources you can send the PR as-is +now to bors, though, and it'll get tested anyway.

    +

    Ideally, build LLVM and test it on a few platforms:

    +
      +
    • Linux
    • +
    • macOS
    • +
    • Windows
    • +
    +

    Afterwards, run some docker containers that CI also does:

    +
      +
    • ./src/ci/docker/run.sh wasm32
    • +
    • ./src/ci/docker/run.sh arm-android
    • +
    • ./src/ci/docker/run.sh dist-various-1
    • +
    • ./src/ci/docker/run.sh dist-various-2
    • +
    • ./src/ci/docker/run.sh armhf-gnu
    • +
    +
  10. +
  11. +

    Prepare a PR to rust-lang/rust. Work with maintainers of +rust-lang/llvm-project to get your commit in a branch of that repository, +and then you can send a PR to rust-lang/rust. You'll change at least +src/llvm-project and will likely also change llvm-wrapper as well.

    + +
    +

    For prior art, here are some previous LLVM updates:

    + +
    +

    Note that sometimes it's easiest to land llvm-wrapper compatibility as a PR +before actually updating src/llvm-project. +This way, +while you're working through LLVM issues, +others interested in trying out the new LLVM can benefit from work you've done +to update the C++ bindings.

    +
  12. +
  13. +

    Over the next few months, +LLVM will continually push commits to its release/a.b branch. +We will often want to have those bug fixes as well. +The merge process for that is to use git merge itself to merge LLVM's +release/a.b branch with the branch created in step 2. +This is typically +done multiple times when necessary while LLVM's release branch is baking.

    +
  14. +
  15. +

    LLVM then announces the release of version a.b.

    +
  16. +
  17. +

    After LLVM's official release, +we follow the process of creating a new branch on the +rust-lang/llvm-project repository again, +this time with a new date. +It is only then that the PR to update Rust to use that version is merged.

    +

    The commit history of rust-lang/llvm-project +should look much cleaner as a git rebase is done, +where just a few Rust-specific commits are stacked on top of stock LLVM's release branch.

    +
  18. +
+

Caveats and gotchas

+

Ideally the above instructions are pretty smooth, but here's some caveats to +keep in mind while going through them:

+
    +
  • LLVM bugs are hard to find, don't hesitate to ask for help! +Bisection is definitely your friend here +(yes LLVM takes forever to build, yet bisection is still your friend). +Note that you can make use of Dev Desktops, +which is an initiative to provide the contributors with remote access to powerful hardware.
  • +
  • If you've got general questions, wg-llvm can help you out.
  • +
  • Creating branches is a privileged operation on GitHub, so you'll need someone +with write access to create the branches for you most likely.
  • +
+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/book.js b/book.js new file mode 100644 index 000000000..160ee9370 --- /dev/null +++ b/book.js @@ -0,0 +1,769 @@ +'use strict'; + +/* global default_theme, default_dark_theme, default_light_theme, hljs, ClipboardJS */ + +// Fix back button cache problem +window.onunload = function() { }; + +// Global variable, shared between modules +function playground_text(playground, hidden = true) { + const code_block = playground.querySelector('code'); + + if (window.ace && code_block.classList.contains('editable')) { + const editor = window.ace.edit(code_block); + return editor.getValue(); + } else if (hidden) { + return code_block.textContent; + } else { + return code_block.innerText; + } +} + +(function codeSnippets() { + function fetch_with_timeout(url, options, timeout = 6000) { + return Promise.race([ + fetch(url, options), + new Promise((_, reject) => setTimeout(() => reject(new Error('timeout')), timeout)), + ]); + } + + const playgrounds = Array.from(document.querySelectorAll('.playground')); + if (playgrounds.length > 0) { + fetch_with_timeout('https://play.rust-lang.org/meta/crates', { + headers: { + 'Content-Type': 'application/json', + }, + method: 'POST', + mode: 'cors', + }) + .then(response => response.json()) + .then(response => { + // get list of crates available in the rust playground + const playground_crates = response.crates.map(item => item['id']); + playgrounds.forEach(block => handle_crate_list_update(block, playground_crates)); + }); + } + + function handle_crate_list_update(playground_block, playground_crates) { + // update the play buttons after receiving the response + update_play_button(playground_block, playground_crates); + + // and install on change listener to dynamically update ACE editors + if (window.ace) { + const code_block = playground_block.querySelector('code'); + if (code_block.classList.contains('editable')) { + const editor = window.ace.edit(code_block); + editor.addEventListener('change', () => { + update_play_button(playground_block, playground_crates); + }); + // add Ctrl-Enter command to execute rust code + editor.commands.addCommand({ + name: 'run', + bindKey: { + win: 'Ctrl-Enter', + mac: 'Ctrl-Enter', + }, + exec: _editor => run_rust_code(playground_block), + }); + } + } + } + + // updates the visibility of play button based on `no_run` class and + // used crates vs ones available on https://play.rust-lang.org + function update_play_button(pre_block, playground_crates) { + const play_button = pre_block.querySelector('.play-button'); + + // skip if code is `no_run` + if (pre_block.querySelector('code').classList.contains('no_run')) { + play_button.classList.add('hidden'); + return; + } + + // get list of `extern crate`'s from snippet + const txt = playground_text(pre_block); + const re = /extern\s+crate\s+([a-zA-Z_0-9]+)\s*;/g; + const snippet_crates = []; + let item; + // eslint-disable-next-line no-cond-assign + while (item = re.exec(txt)) { + snippet_crates.push(item[1]); + } + + // check if all used crates are available on play.rust-lang.org + const all_available = snippet_crates.every(function(elem) { + return playground_crates.indexOf(elem) > -1; + }); + + if (all_available) { + play_button.classList.remove('hidden'); + } else { + play_button.classList.add('hidden'); + } + } + + function run_rust_code(code_block) { + let result_block = code_block.querySelector('.result'); + if (!result_block) { + result_block = document.createElement('code'); + result_block.className = 'result hljs language-bash'; + + code_block.append(result_block); + } + + const text = playground_text(code_block); + const classes = code_block.querySelector('code').classList; + let edition = '2015'; + classes.forEach(className => { + if (className.startsWith('edition')) { + edition = className.slice(7); + } + }); + const params = { + version: 'stable', + optimize: '0', + code: text, + edition: edition, + }; + + if (text.indexOf('#![feature') !== -1) { + params.version = 'nightly'; + } + + result_block.innerText = 'Running...'; + + fetch_with_timeout('https://play.rust-lang.org/evaluate.json', { + headers: { + 'Content-Type': 'application/json', + }, + method: 'POST', + mode: 'cors', + body: JSON.stringify(params), + }) + .then(response => response.json()) + .then(response => { + if (response.result.trim() === '') { + result_block.innerText = 'No output'; + result_block.classList.add('result-no-output'); + } else { + result_block.innerText = response.result; + result_block.classList.remove('result-no-output'); + } + }) + .catch(error => result_block.innerText = 'Playground Communication: ' + error.message); + } + + // Syntax highlighting Configuration + hljs.configure({ + tabReplace: ' ', // 4 spaces + languages: [], // Languages used for auto-detection + }); + + const code_nodes = Array + .from(document.querySelectorAll('code')) + // Don't highlight `inline code` blocks in headers. + .filter(function(node) { + return !node.parentElement.classList.contains('header'); + }); + + if (window.ace) { + // language-rust class needs to be removed for editable + // blocks or highlightjs will capture events + code_nodes + .filter(function(node) { + return node.classList.contains('editable'); + }) + .forEach(function(block) { + block.classList.remove('language-rust'); + }); + + code_nodes + .filter(function(node) { + return !node.classList.contains('editable'); + }) + .forEach(function(block) { + hljs.highlightBlock(block); + }); + } else { + code_nodes.forEach(function(block) { + hljs.highlightBlock(block); + }); + } + + // Adding the hljs class gives code blocks the color css + // even if highlighting doesn't apply + code_nodes.forEach(function(block) { + block.classList.add('hljs'); + }); + + Array.from(document.querySelectorAll('code.hljs')).forEach(function(block) { + + const lines = Array.from(block.querySelectorAll('.boring')); + // If no lines were hidden, return + if (!lines.length) { + return; + } + block.classList.add('hide-boring'); + + const buttons = document.createElement('div'); + buttons.className = 'buttons'; + buttons.innerHTML = ''; + + // add expand button + const pre_block = block.parentNode; + pre_block.insertBefore(buttons, pre_block.firstChild); + + pre_block.querySelector('.buttons').addEventListener('click', function(e) { + if (e.target.classList.contains('fa-eye')) { + e.target.classList.remove('fa-eye'); + e.target.classList.add('fa-eye-slash'); + e.target.title = 'Hide lines'; + e.target.setAttribute('aria-label', e.target.title); + + block.classList.remove('hide-boring'); + } else if (e.target.classList.contains('fa-eye-slash')) { + e.target.classList.remove('fa-eye-slash'); + e.target.classList.add('fa-eye'); + e.target.title = 'Show hidden lines'; + e.target.setAttribute('aria-label', e.target.title); + + block.classList.add('hide-boring'); + } + }); + }); + + if (window.playground_copyable) { + Array.from(document.querySelectorAll('pre code')).forEach(function(block) { + const pre_block = block.parentNode; + if (!pre_block.classList.contains('playground')) { + let buttons = pre_block.querySelector('.buttons'); + if (!buttons) { + buttons = document.createElement('div'); + buttons.className = 'buttons'; + pre_block.insertBefore(buttons, pre_block.firstChild); + } + + const clipButton = document.createElement('button'); + clipButton.className = 'clip-button'; + clipButton.title = 'Copy to clipboard'; + clipButton.setAttribute('aria-label', clipButton.title); + clipButton.innerHTML = ''; + + buttons.insertBefore(clipButton, buttons.firstChild); + } + }); + } + + // Process playground code blocks + Array.from(document.querySelectorAll('.playground')).forEach(function(pre_block) { + // Add play button + let buttons = pre_block.querySelector('.buttons'); + if (!buttons) { + buttons = document.createElement('div'); + buttons.className = 'buttons'; + pre_block.insertBefore(buttons, pre_block.firstChild); + } + + const runCodeButton = document.createElement('button'); + runCodeButton.className = 'fa fa-play play-button'; + runCodeButton.hidden = true; + runCodeButton.title = 'Run this code'; + runCodeButton.setAttribute('aria-label', runCodeButton.title); + + buttons.insertBefore(runCodeButton, buttons.firstChild); + runCodeButton.addEventListener('click', () => { + run_rust_code(pre_block); + }); + + if (window.playground_copyable) { + const copyCodeClipboardButton = document.createElement('button'); + copyCodeClipboardButton.className = 'clip-button'; + copyCodeClipboardButton.innerHTML = ''; + copyCodeClipboardButton.title = 'Copy to clipboard'; + copyCodeClipboardButton.setAttribute('aria-label', copyCodeClipboardButton.title); + + buttons.insertBefore(copyCodeClipboardButton, buttons.firstChild); + } + + const code_block = pre_block.querySelector('code'); + if (window.ace && code_block.classList.contains('editable')) { + const undoChangesButton = document.createElement('button'); + undoChangesButton.className = 'fa fa-history reset-button'; + undoChangesButton.title = 'Undo changes'; + undoChangesButton.setAttribute('aria-label', undoChangesButton.title); + + buttons.insertBefore(undoChangesButton, buttons.firstChild); + + undoChangesButton.addEventListener('click', function() { + const editor = window.ace.edit(code_block); + editor.setValue(editor.originalCode); + editor.clearSelection(); + }); + } + }); +})(); + +(function themes() { + const html = document.querySelector('html'); + const themeToggleButton = document.getElementById('theme-toggle'); + const themePopup = document.getElementById('theme-list'); + const themeColorMetaTag = document.querySelector('meta[name="theme-color"]'); + const themeIds = []; + themePopup.querySelectorAll('button.theme').forEach(function(el) { + themeIds.push(el.id); + }); + const stylesheets = { + ayuHighlight: document.querySelector('#ayu-highlight-css'), + tomorrowNight: document.querySelector('#tomorrow-night-css'), + highlight: document.querySelector('#highlight-css'), + }; + + function showThemes() { + themePopup.style.display = 'block'; + themeToggleButton.setAttribute('aria-expanded', true); + themePopup.querySelector('button#' + get_theme()).focus(); + } + + function updateThemeSelected() { + themePopup.querySelectorAll('.theme-selected').forEach(function(el) { + el.classList.remove('theme-selected'); + }); + const selected = get_saved_theme() ?? 'default_theme'; + let element = themePopup.querySelector('button#' + selected); + if (element === null) { + // Fall back in case there is no "Default" item. + element = themePopup.querySelector('button#' + get_theme()); + } + element.classList.add('theme-selected'); + } + + function hideThemes() { + themePopup.style.display = 'none'; + themeToggleButton.setAttribute('aria-expanded', false); + themeToggleButton.focus(); + } + + function get_saved_theme() { + let theme = null; + try { + theme = localStorage.getItem('mdbook-theme'); + } catch (e) { + // ignore error. + } + return theme; + } + + function delete_saved_theme() { + localStorage.removeItem('mdbook-theme'); + } + + function get_theme() { + const theme = get_saved_theme(); + if (theme === null || theme === undefined || !themeIds.includes(theme)) { + if (typeof default_dark_theme === 'undefined') { + // A customized index.hbs might not define this, so fall back to + // old behavior of determining the default on page load. + return default_theme; + } + return window.matchMedia('(prefers-color-scheme: dark)').matches + ? default_dark_theme + : default_light_theme; + } else { + return theme; + } + } + + let previousTheme = default_theme; + function set_theme(theme, store = true) { + let ace_theme; + + if (theme === 'coal' || theme === 'navy') { + stylesheets.ayuHighlight.disabled = true; + stylesheets.tomorrowNight.disabled = false; + stylesheets.highlight.disabled = true; + + ace_theme = 'ace/theme/tomorrow_night'; + } else if (theme === 'ayu') { + stylesheets.ayuHighlight.disabled = false; + stylesheets.tomorrowNight.disabled = true; + stylesheets.highlight.disabled = true; + ace_theme = 'ace/theme/tomorrow_night'; + } else { + stylesheets.ayuHighlight.disabled = true; + stylesheets.tomorrowNight.disabled = true; + stylesheets.highlight.disabled = false; + ace_theme = 'ace/theme/dawn'; + } + + setTimeout(function() { + themeColorMetaTag.content = getComputedStyle(document.documentElement).backgroundColor; + }, 1); + + if (window.ace && window.editors) { + window.editors.forEach(function(editor) { + editor.setTheme(ace_theme); + }); + } + + if (store) { + try { + localStorage.setItem('mdbook-theme', theme); + } catch (e) { + // ignore error. + } + } + + html.classList.remove(previousTheme); + html.classList.add(theme); + previousTheme = theme; + updateThemeSelected(); + } + + const query = window.matchMedia('(prefers-color-scheme: dark)'); + query.onchange = function() { + set_theme(get_theme(), false); + }; + + // Set theme. + set_theme(get_theme(), false); + + themeToggleButton.addEventListener('click', function() { + if (themePopup.style.display === 'block') { + hideThemes(); + } else { + showThemes(); + } + }); + + themePopup.addEventListener('click', function(e) { + let theme; + if (e.target.className === 'theme') { + theme = e.target.id; + } else if (e.target.parentElement.className === 'theme') { + theme = e.target.parentElement.id; + } else { + return; + } + if (theme === 'default_theme' || theme === null) { + delete_saved_theme(); + set_theme(get_theme(), false); + } else { + set_theme(theme); + } + }); + + themePopup.addEventListener('focusout', function(e) { + // e.relatedTarget is null in Safari and Firefox on macOS (see workaround below) + if (!!e.relatedTarget && + !themeToggleButton.contains(e.relatedTarget) && + !themePopup.contains(e.relatedTarget) + ) { + hideThemes(); + } + }); + + // Should not be needed, but it works around an issue on macOS & iOS: + // https://github.com/rust-lang/mdBook/issues/628 + document.addEventListener('click', function(e) { + if (themePopup.style.display === 'block' && + !themeToggleButton.contains(e.target) && + !themePopup.contains(e.target) + ) { + hideThemes(); + } + }); + + document.addEventListener('keydown', function(e) { + if (e.altKey || e.ctrlKey || e.metaKey || e.shiftKey) { + return; + } + if (!themePopup.contains(e.target)) { + return; + } + + let li; + switch (e.key) { + case 'Escape': + e.preventDefault(); + hideThemes(); + break; + case 'ArrowUp': + e.preventDefault(); + li = document.activeElement.parentElement; + if (li && li.previousElementSibling) { + li.previousElementSibling.querySelector('button').focus(); + } + break; + case 'ArrowDown': + e.preventDefault(); + li = document.activeElement.parentElement; + if (li && li.nextElementSibling) { + li.nextElementSibling.querySelector('button').focus(); + } + break; + case 'Home': + e.preventDefault(); + themePopup.querySelector('li:first-child button').focus(); + break; + case 'End': + e.preventDefault(); + themePopup.querySelector('li:last-child button').focus(); + break; + } + }); +})(); + +(function sidebar() { + const body = document.querySelector('body'); + const sidebar = document.getElementById('sidebar'); + const sidebarLinks = document.querySelectorAll('#sidebar a'); + const sidebarToggleButton = document.getElementById('sidebar-toggle'); + const sidebarToggleAnchor = document.getElementById('sidebar-toggle-anchor'); + const sidebarResizeHandle = document.getElementById('sidebar-resize-handle'); + let firstContact = null; + + function showSidebar() { + body.classList.remove('sidebar-hidden'); + body.classList.add('sidebar-visible'); + Array.from(sidebarLinks).forEach(function(link) { + link.setAttribute('tabIndex', 0); + }); + sidebarToggleButton.setAttribute('aria-expanded', true); + sidebar.setAttribute('aria-hidden', false); + try { + localStorage.setItem('mdbook-sidebar', 'visible'); + } catch (e) { + // Ignore error. + } + } + + function hideSidebar() { + body.classList.remove('sidebar-visible'); + body.classList.add('sidebar-hidden'); + Array.from(sidebarLinks).forEach(function(link) { + link.setAttribute('tabIndex', -1); + }); + sidebarToggleButton.setAttribute('aria-expanded', false); + sidebar.setAttribute('aria-hidden', true); + try { + localStorage.setItem('mdbook-sidebar', 'hidden'); + } catch (e) { + // Ignore error. + } + } + + // Toggle sidebar + sidebarToggleAnchor.addEventListener('change', function sidebarToggle() { + if (sidebarToggleAnchor.checked) { + const current_width = parseInt( + document.documentElement.style.getPropertyValue('--sidebar-width'), 10); + if (current_width < 150) { + document.documentElement.style.setProperty('--sidebar-width', '150px'); + } + showSidebar(); + } else { + hideSidebar(); + } + }); + + sidebarResizeHandle.addEventListener('mousedown', initResize, false); + + function initResize() { + window.addEventListener('mousemove', resize, false); + window.addEventListener('mouseup', stopResize, false); + body.classList.add('sidebar-resizing'); + } + function resize(e) { + let pos = e.clientX - sidebar.offsetLeft; + if (pos < 20) { + hideSidebar(); + } else { + if (body.classList.contains('sidebar-hidden')) { + showSidebar(); + } + pos = Math.min(pos, window.innerWidth - 100); + document.documentElement.style.setProperty('--sidebar-width', pos + 'px'); + } + } + //on mouseup remove windows functions mousemove & mouseup + function stopResize() { + body.classList.remove('sidebar-resizing'); + window.removeEventListener('mousemove', resize, false); + window.removeEventListener('mouseup', stopResize, false); + } + + document.addEventListener('touchstart', function(e) { + firstContact = { + x: e.touches[0].clientX, + time: Date.now(), + }; + }, { passive: true }); + + document.addEventListener('touchmove', function(e) { + if (!firstContact) { + return; + } + + const curX = e.touches[0].clientX; + const xDiff = curX - firstContact.x, + tDiff = Date.now() - firstContact.time; + + if (tDiff < 250 && Math.abs(xDiff) >= 150) { + if (xDiff >= 0 && firstContact.x < Math.min(document.body.clientWidth * 0.25, 300)) { + showSidebar(); + } else if (xDiff < 0 && curX < 300) { + hideSidebar(); + } + + firstContact = null; + } + }, { passive: true }); +})(); + +(function chapterNavigation() { + document.addEventListener('keydown', function(e) { + if (e.altKey || e.ctrlKey || e.metaKey || e.shiftKey) { + return; + } + if (window.search && window.search.hasFocus()) { + return; + } + const html = document.querySelector('html'); + + function next() { + const nextButton = document.querySelector('.nav-chapters.next'); + if (nextButton) { + window.location.href = nextButton.href; + } + } + function prev() { + const previousButton = document.querySelector('.nav-chapters.previous'); + if (previousButton) { + window.location.href = previousButton.href; + } + } + switch (e.key) { + case 'ArrowRight': + e.preventDefault(); + if (html.dir === 'rtl') { + prev(); + } else { + next(); + } + break; + case 'ArrowLeft': + e.preventDefault(); + if (html.dir === 'rtl') { + next(); + } else { + prev(); + } + break; + } + }); +})(); + +(function clipboard() { + const clipButtons = document.querySelectorAll('.clip-button'); + + function hideTooltip(elem) { + elem.firstChild.innerText = ''; + elem.className = 'clip-button'; + } + + function showTooltip(elem, msg) { + elem.firstChild.innerText = msg; + elem.className = 'clip-button tooltipped'; + } + + const clipboardSnippets = new ClipboardJS('.clip-button', { + text: function(trigger) { + hideTooltip(trigger); + const playground = trigger.closest('pre'); + return playground_text(playground, false); + }, + }); + + Array.from(clipButtons).forEach(function(clipButton) { + clipButton.addEventListener('mouseout', function(e) { + hideTooltip(e.currentTarget); + }); + }); + + clipboardSnippets.on('success', function(e) { + e.clearSelection(); + showTooltip(e.trigger, 'Copied!'); + }); + + clipboardSnippets.on('error', function(e) { + showTooltip(e.trigger, 'Clipboard error!'); + }); +})(); + +(function scrollToTop() { + const menuTitle = document.querySelector('.menu-title'); + + menuTitle.addEventListener('click', function() { + document.scrollingElement.scrollTo({ top: 0, behavior: 'smooth' }); + }); +})(); + +(function controllMenu() { + const menu = document.getElementById('menu-bar'); + + (function controllPosition() { + let scrollTop = document.scrollingElement.scrollTop; + let prevScrollTop = scrollTop; + const minMenuY = -menu.clientHeight - 50; + // When the script loads, the page can be at any scroll (e.g. if you reforesh it). + menu.style.top = scrollTop + 'px'; + // Same as parseInt(menu.style.top.slice(0, -2), but faster + let topCache = menu.style.top.slice(0, -2); + menu.classList.remove('sticky'); + let stickyCache = false; // Same as menu.classList.contains('sticky'), but faster + document.addEventListener('scroll', function() { + scrollTop = Math.max(document.scrollingElement.scrollTop, 0); + // `null` means that it doesn't need to be updated + let nextSticky = null; + let nextTop = null; + const scrollDown = scrollTop > prevScrollTop; + const menuPosAbsoluteY = topCache - scrollTop; + if (scrollDown) { + nextSticky = false; + if (menuPosAbsoluteY > 0) { + nextTop = prevScrollTop; + } + } else { + if (menuPosAbsoluteY > 0) { + nextSticky = true; + } else if (menuPosAbsoluteY < minMenuY) { + nextTop = prevScrollTop + minMenuY; + } + } + if (nextSticky === true && stickyCache === false) { + menu.classList.add('sticky'); + stickyCache = true; + } else if (nextSticky === false && stickyCache === true) { + menu.classList.remove('sticky'); + stickyCache = false; + } + if (nextTop !== null) { + menu.style.top = nextTop + 'px'; + topCache = nextTop; + } + prevScrollTop = scrollTop; + }, { passive: true }); + })(); + (function controllBorder() { + function updateBorder() { + if (menu.offsetTop === 0) { + menu.classList.remove('bordered'); + } else { + menu.classList.add('bordered'); + } + } + updateBorder(); + document.addEventListener('scroll', updateBorder, { passive: true }); + })(); +})(); diff --git a/borrow_check.html b/borrow_check.html new file mode 100644 index 000000000..4b198790a --- /dev/null +++ b/borrow_check.html @@ -0,0 +1,267 @@ + + + + + + The borrow checker - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

MIR borrow check

+

The borrow check is Rust's "secret sauce" – it is tasked with +enforcing a number of properties:

+
    +
  • That all variables are initialized before they are used.
  • +
  • That you can't move the same value twice.
  • +
  • That you can't move a value while it is borrowed.
  • +
  • That you can't access a place while it is mutably borrowed (except through +the reference).
  • +
  • That you can't mutate a place while it is immutably borrowed.
  • +
  • etc
  • +
+

The borrow checker operates on the MIR. An older implementation operated on the +HIR. Doing borrow checking on MIR has several advantages:

+ +

Major phases of the borrow checker

+

The borrow checker source is found in +the rustc_borrowck crate. The main entry point is +the mir_borrowck query.

+
    +
  • We first create a local copy of the MIR. In the coming steps, +we will modify this copy in place to modify the types and things to +include references to the new regions that we are computing.
  • +
  • We then invoke replace_regions_in_mir to modify our local MIR. +Among other things, this function will replace all of the regions +in the MIR with fresh inference variables.
  • +
  • Next, we perform a number of +dataflow analyses that +compute what data is moved and when.
  • +
  • We then do a second type check across the MIR: +the purpose of this type check is to determine all of the constraints between +different regions.
  • +
  • Next, we do region inference, which computes +the values of each region — basically, the points in the control-flow graph where +each lifetime must be valid according to the constraints we collected.
  • +
  • At this point, we can compute the "borrows in scope" at each point.
  • +
  • Finally, we do a second walk over the MIR, looking at the actions it +does and reporting errors. For example, if we see a statement like +*a + 1, then we would check that the variable a is initialized +and that it is not mutably borrowed, as either of those would +require an error to be reported. Doing this check requires the results of all +the previous analyses.
  • +
+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/borrow_check/drop_check.html b/borrow_check/drop_check.html new file mode 100644 index 000000000..a42b4c6ad --- /dev/null +++ b/borrow_check/drop_check.html @@ -0,0 +1,357 @@ + + + + + + Drop check - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Drop Check

+

We generally require the type of locals to be well-formed whenever the +local is used. This includes proving the where-bounds of the local and +also requires all regions used by it to be live.

+

The only exception to this is when implicitly dropping values when they +go out of scope. This does not necessarily require the value to be live:

+
fn main() {
+    let x = vec![];
+    {
+        let y = String::from("I am temporary");
+        x.push(&y);
+    }
+    // `x` goes out of scope here, after the reference to `y`
+    // is invalidated. This means that while dropping `x` its type
+    // is not well-formed as it contain regions which are not live.
+}
+

This is only sound if dropping the value does not try to access any dead +region. We check this by requiring the type of the value to be +drop-live. +The requirements for which are computed in fn dropck_outlives.

+

The rest of this section uses the following type definition for a type +which requires its region parameter to be live:

+
#![allow(unused)]
+fn main() {
+struct PrintOnDrop<'a>(&'a str);
+impl<'a> Drop for PrintOnDrop<'_> {
+    fn drop(&mut self) {
+        println!("{}", self.0);
+    }
+}
+}
+

How values are dropped

+

At its core, a value of type T is dropped by executing its "drop +glue". Drop glue is compiler generated and first calls <T as Drop>::drop and then recursively calls the drop glue of any recursively +owned values.

+
    +
  • If T has an explicit Drop impl, call <T as Drop>::drop.
  • +
  • Regardless of whether T implements Drop, recurse into all values +owned by T: +
      +
    • references, raw pointers, function pointers, function items, trait +objects1, and scalars do not own anything.
    • +
    • tuples, slices, and arrays consider their elements to be owned. +For arrays of length zero we do not own any value of the element +type.
    • +
    • all fields (of all variants) of ADTs are considered owned. We +consider all variants for enums. The exception here is +ManuallyDrop<U> which is not considered to own U. +PhantomData<U> also does not own anything. +closures and generators own their captured upvars.
    • +
    +
  • +
+

Whether a type has drop glue is returned by fn Ty::needs_drop.

+

Partially dropping a local

+

For types which do not implement Drop themselves, we can also +partially move parts of the value before dropping the rest. In this case +only the drop glue for the not-yet moved values is called, e.g.

+
fn main() {
+    let mut x = (PrintOnDrop("third"), PrintOnDrop("first"));
+    drop(x.1);
+    println!("second")
+}
+

During MIR building we assume that a local may get dropped whenever it +goes out of scope as long as its type needs drop. Computing the exact +drop glue for a variable happens after borrowck in the +ElaborateDrops pass. This means that even if some part of the local +have been dropped previously, dropck still requires this value to be +live. This is the case even if we completely moved a local.

+
fn main() {
+    let mut x;
+    {
+        let temp = String::from("I am temporary");
+        x = PrintOnDrop(&temp);
+        drop(x);
+    }
+} //~ ERROR `temp` does not live long enough.
+

It should be possible to add some amount of drop elaboration before +borrowck, allowing this example to compile. There is an unstable feature +to move drop elaboration before const checking: +#73255. Such a feature +gate does not exist for doing some drop elaboration before borrowck, +although there's a relevant +MCP.

+

dropck_outlives

+

There are two distinct "liveness" computations that we perform:

+
    +
  • a value v is use-live at location L if it may be "used" later; a +use here is basically anything that is not a drop
  • +
  • a value v is drop-live at location L if it maybe dropped later
  • +
+

When things are use-live, their entire type must be valid at L. When +they are drop-live, all regions that are required by dropck must be +valid at L. The values dropped in the MIR are places.

+

The constraints computed by dropck_outlives for a type closely match +the generated drop glue for that type. Unlike drop glue, +dropck_outlives cares about the types of owned values, not the values +itself. For a value of type T

+
    +
  • if T has an explicit Drop, require all generic arguments to be +live, unless they are marked with #[may_dangle] in which case they +are fully ignored
  • +
  • regardless of whether T has an explicit Drop, recurse into all +types owned by T +
      +
    • references, raw pointers, function pointers, function items, trait +objects1, and scalars do not own anything.
    • +
    • tuples, slices and arrays consider their element type to be owned. +For arrays we currently do not check whether their length is +zero.
    • +
    • all fields (of all variants) of ADTs are considered owned. The +exception here is ManuallyDrop<U> which is not considered to own +U. We consider PhantomData<U> to own U.
    • +
    • closures and generators own their captured upvars.
    • +
    +
  • +
+

The sections marked in bold are cases where dropck_outlives considers +types to be owned which are ignored by Ty::needs_drop. We only rely on +dropck_outlives if Ty::needs_drop for the containing local returned +true.This means liveness requirements can change depending on whether +a type is contained in a larger local. This is inconsistent, and +should be fixed: an example for +arrays +and for +PhantomData.2

+

One possible way these inconsistencies can be fixed is by MIR building +to be more pessimistic, probably by making Ty::needs_drop weaker, or +alternatively, changing dropck_outlives to be more precise, requiring +fewer regions to be live.

+
+
  1. +

    you can consider trait objects to have a builtin Drop +implementation which directly uses the drop_in_place provided by the +vtable. This Drop implementation requires all its generic parameters +to be live. ↩2

    +
  2. +
  3. +

    This is the core assumption of #110288 and RFC 3417.

    +
  4. +
+
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/borrow_check/moves_and_initialization.html b/borrow_check/moves_and_initialization.html new file mode 100644 index 000000000..a8d67c0ab --- /dev/null +++ b/borrow_check/moves_and_initialization.html @@ -0,0 +1,258 @@ + + + + + + Tracking moves and initialization - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Tracking moves and initialization

+

Part of the borrow checker's job is to track which variables are +"initialized" at any given point in time -- this also requires +figuring out where moves occur and tracking those.

+

Initialization and moves

+

From a user's perspective, initialization -- giving a variable some +value -- and moves -- transferring ownership to another place -- might +seem like distinct topics. Indeed, our borrow checker error messages +often talk about them differently. But within the borrow checker, +they are not nearly as separate. Roughly speaking, the borrow checker +tracks the set of "initialized places" at any point in the source +code. Assigning to a previously uninitialized local variable adds it +to that set; moving from a local variable removes it from that set.

+

Consider this example:

+
fn foo() {
+    let a: Vec<u32>;
+    
+    // a is not initialized yet
+    
+    a = vec![22];
+    
+    // a is initialized here
+    
+    std::mem::drop(a); // a is moved here
+    
+    // a is no longer initialized here
+
+    let l = a.len(); //~ ERROR
+}
+

Here you can see that a starts off as uninitialized; once it is +assigned, it becomes initialized. But when drop(a) is called, that +moves a into the call, and hence it becomes uninitialized again.

+

Subsections

+

To make it easier to peruse, this section is broken into a number of +subsections:

+
    +
  • Move paths the +move path concept that we use to track which local variables (or parts of +local variables, in some cases) are initialized.
  • +
  • TODO Rest not yet written =)
  • +
+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/borrow_check/moves_and_initialization/move_paths.html b/borrow_check/moves_and_initialization/move_paths.html new file mode 100644 index 000000000..605dbc0d3 --- /dev/null +++ b/borrow_check/moves_and_initialization/move_paths.html @@ -0,0 +1,313 @@ + + + + + + Move paths - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Move paths

+ +

In reality, it's not enough to track initialization at the granularity +of local variables. Rust also allows us to do moves and initialization +at the field granularity:

+
fn foo() {
+    let a: (Vec<u32>, Vec<u32>) = (vec![22], vec![44]);
+
+    // a.0 and a.1 are both initialized
+
+    let b = a.0; // moves a.0
+
+    // a.0 is not initialized, but a.1 still is
+
+    let c = a.0; // ERROR
+    let d = a.1; // OK
+}
+

To handle this, we track initialization at the granularity of a move +path. A MovePath represents some location that the user can +initialize, move, etc. So e.g. there is a move-path representing the +local variable a, and there is a move-path representing a.0. Move +paths roughly correspond to the concept of a Place from MIR, but +they are indexed in ways that enable us to do move analysis more +efficiently.

+

Move path indices

+

Although there is a MovePath data structure, they are never referenced +directly. Instead, all the code passes around indices of type +MovePathIndex. If you need to get information about a move path, you use +this index with the move_paths field of the MoveData. For +example, to convert a MovePathIndex mpi into a MIR Place, you might +access the MovePath::place field like so:

+
move_data.move_paths[mpi].place
+

Building move paths

+

One of the first things we do in the MIR borrow check is to construct +the set of move paths. This is done as part of the +MoveData::gather_moves function. This function uses a MIR visitor +called MoveDataBuilder to walk the MIR and look at how each Place +within is accessed. For each such Place, it constructs a +corresponding MovePathIndex. It also records when/where that +particular move path is moved/initialized, but we'll get to that in a +later section.

+

Illegal move paths

+

We don't actually create a move-path for every Place that gets +used. In particular, if it is illegal to move from a Place, then +there is no need for a MovePathIndex. Some examples:

+
    +
  • You cannot move from a static variable, so we do not create a MovePathIndex +for static variables.
  • +
  • You cannot move an individual element of an array, so if we have e.g. foo: [String; 3], +there would be no move-path for foo[1].
  • +
  • You cannot move from inside of a borrowed reference, so if we have e.g. foo: &String, +there would be no move-path for *foo.
  • +
+

These rules are enforced by the move_path_for function, which +converts a Place into a MovePathIndex -- in error cases like +those just discussed, the function returns an Err. This in turn +means we don't have to bother tracking whether those places are +initialized (which lowers overhead).

+

Looking up a move-path

+

If you have a Place and you would like to convert it to a MovePathIndex, you +can do that using the MovePathLookup structure found in the rev_lookup field +of MoveData. There are two different methods:

+
    +
  • find_local, which takes a mir::Local representing a local +variable. This is the easier method, because we always create a +MovePathIndex for every local variable.
  • +
  • find, which takes an arbitrary Place. This method is a bit +more annoying to use, precisely because we don't have a +MovePathIndex for every Place (as we just discussed in +the "illegal move paths" section). Therefore, find returns a +LookupResult indicating the closest path it was able to find +that exists (e.g., for foo[1], it might return just the path for +foo).
  • +
+

Cross-references

+

As we noted above, move-paths are stored in a big vector and +referenced via their MovePathIndex. However, within this vector, +they are also structured into a tree. So for example if you have the +MovePathIndex for a.b.c, you can go to its parent move-path +a.b. You can also iterate over all children paths: so, from a.b, +you might iterate to find the path a.b.c (here you are iterating +just over the paths that are actually referenced in the source, +not all possible paths that could have been referenced). These +references are used for example in the +find_in_move_path_or_its_descendants function, which determines +whether a move-path (e.g., a.b) or any child of that move-path +(e.g.,a.b.c) matches a given predicate.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/borrow_check/opaque-types-region-inference-restrictions.html b/borrow_check/opaque-types-region-inference-restrictions.html new file mode 100644 index 000000000..5c4f06cb3 --- /dev/null +++ b/borrow_check/opaque-types-region-inference-restrictions.html @@ -0,0 +1,454 @@ + + + + + + Region inference restrictions - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Opaque types region inference restrictions

+

In this chapter we discuss the various restrictions we impose on the generic arguments of +opaque types when defining their hidden types +Opaque<'a, 'b, .., A, B, ..> := SomeHiddenType.

+

These restrictions are implemented in borrow checking (Source) +as it is the final step opaque types inference.

+

Background: type and const generic arguments

+

For type arguments, two restrictions are necessary: each type argument must be +(1) a type parameter and +(2) is unique among the generic arguments. +The same is applied to const arguments.

+

Example of case (1):

+
#![allow(unused)]
+fn main() {
+type Opaque<X> = impl Sized;
+
+// `T` is a type parameter.
+// Opaque<T> := ();
+fn good<T>() -> Opaque<T> {}
+
+// `()` is not a type parameter.
+// Opaque<()> := ();
+fn bad() -> Opaque<()> {} //~ ERROR
+}
+

Example of case (2):

+
#![allow(unused)]
+fn main() {
+type Opaque<X, Y> = impl Sized;
+
+// `T` and `U` are unique in the generic args.
+// Opaque<T, U> := T;
+fn good<T, U>(t: T, _u: U) -> Opaque<T, U> { t }
+
+// `T` appears twice in the generic args.
+// Opaque<T, T> := T;
+fn bad<T>(t: T) -> Opaque<T, T> { t } //~ ERROR
+}
+

Motivation: In the first case Opaque<()> := (), the hidden type is ambiguous because +it is compatible with two different interpretaions: Opaque<X> := X and Opaque<X> := (). +Similarly for the second case Opaque<T, T> := T, it is ambiguous whether it should be +interpreted as Opaque<X, Y> := X or as Opaque<X, Y> := Y. +Because of this ambiguity, both cases are rejected as invalid defining uses.

+

Uniqueness restriction

+

Each lifetime argument must be unique in the arguments list and must not be 'static. +This is in order to avoid an ambiguity with hidden type inference similar to the case of +type parameters. +For example, the invalid defining use below Opaque<'static> := Inv<'static> is compatible with +both Opaque<'x> := Inv<'static> and Opaque<'x> := Inv<'x>.

+
#![allow(unused)]
+fn main() {
+type Opaque<'x> = impl Sized + 'x;
+type Inv<'a> = Option<*mut &'a ()>;
+
+fn good<'a>() -> Opaque<'a> { Inv::<'static>::None }
+
+fn bad() -> Opaque<'static> { Inv::<'static>::None }
+//~^ ERROR
+}
+
#![allow(unused)]
+fn main() {
+type Opaque<'x, 'y> = impl Trait<'x, 'y>;
+
+fn good<'a, 'b>() -> Opaque<'a, 'b> {}
+
+fn bad<'a>() -> Opaque<'a, 'a> {}
+//~^ ERROR
+}
+

Semantic lifetime equality: +One complexity with lifetimes compared to type parameters is that +two lifetimes that are syntactically different may be semantically equal. +Therefore, we need to be cautious when verifying that the lifetimes are unique.

+
#![allow(unused)]
+fn main() {
+// This is also invalid because `'a` is *semantically* equal to `'static`.
+fn still_bad_1<'a: 'static>() -> Opaque<'a> {}
+//~^ Should error!
+
+// This is also invalid because `'a` and `'b` are *semantically* equal.
+fn still_bad_2<'a: 'b, 'b: 'a>() -> Opaque<'a, 'b> {}
+//~^ Should error!
+}
+

An exception to uniqueness rule

+

An exception to the uniqueness rule above is when the bounds at the opaque type's definition require +a lifetime parameter to be equal to another one or to the 'static lifetime.

+
#![allow(unused)]
+fn main() {
+// The definition requires `'x` to be equal to `'static`.
+type Opaque<'x: 'static> = impl Sized + 'x;
+
+fn good() -> Opaque<'static> {}
+}
+

Motivation: an attempt to implement the uniqueness restriction for RPITs resulted in a +breakage found by crater. +This can be mitigated by this exception to the rule. +An example of the code that would otherwise break:

+
#![allow(unused)]
+fn main() {
+struct Type<'a>(&'a ());
+impl<'a> Type<'a> {
+    // `'b == 'a`
+    fn do_stuff<'b: 'a>(&'b self) -> impl Trait<'a, 'b> {}
+}
+}
+

Why this is correct: for such a defining use like Opaque<'a, 'a> := &'a str, +it can be interpreted in either way—either as Opaque<'x, 'y> := &'x str or as +Opaque<'x, 'y> := &'y str and it wouldn't matter because every use of Opaque +will guarantee that both parameters are equal as per the well-formedness rules.

+

Universal lifetimes restriction

+

Only universally quantified lifetimes are allowed in the opaque type arguments. +This includes lifetime parameters and placeholders.

+
#![allow(unused)]
+fn main() {
+type Opaque<'x> = impl Sized + 'x;
+
+fn test<'a>() -> Opaque<'a> {
+    // `Opaque<'empty> := ()`
+    let _: Opaque<'_> = ();
+    //~^ ERROR
+}
+}
+

Motivation: +This makes the lifetime and type arguments behave consistently but this is only as a bonus. +The real reason behind this restriction is purely technical, as the member constraints algorithm +faces a fundamental limitation: +When encountering an opaque type definition Opaque<'?1> := &'?2 u8, +a member constraint '?2 member-of ['static, '?1] is registered. +In order for the algorithm to pick the right choice, the complete set of "outlives" relationships +between the choice regions ['static, '?1] must already be known before doing the region +inference. This can be satisfied only if each choice region is either:

+
    +
  1. a universal region, i.e. RegionKind::Re{EarlyParam,LateParam,Placeholder,Static}, +because the relations between universal regions are completely known, prior to region inference, +from the explicit and implied bounds.
  2. +
  3. or an existential region that is "strictly equal" to a universal region. +Strict lifetime equality is defined below and is required here because it is the only type of +equality that can be evaluated prior to full region inference.
  4. +
+

Strict lifetime equality: +We say that two lifetimes are strictly equal if there are bidirectional outlives constraints +between them. In NLL terms, this means the lifetimes are part of the same SCC. +Importantly this type of equality can be evaluated prior to full region inference +(but of course after constraint collection). +The other type of equality is when region inference ends up giving two lifetimes variables +the same value even if they are not strictly equal. +See #113971 for how we used to conflate the difference.

+

interaction with "once modulo regions" restriction +In the example above, note the opaque type in the signature is Opaque<'a> and the one in the +invalid defining use is Opaque<'empty>. +In the proposed MiniTAIT plan, namely the "once modulo regions" rule, +we already disallow this. +Although it might appear that "universal lifetimes" restriction becomes redundant as it logically +follows from "MiniTAIT" restrictions, the subsequent related discussion on lifetime equality and +closures remains relevant.

+

Closure restrictions

+

When the opaque type is defined in a closure/coroutine/inline-const body, universal lifetimes that +are "external" to the closure are not allowed in the opaque type arguments. +External regions are defined in RegionClassification::External

+

Example: (This one happens to compile in the current nightly but more practical examples are +already rejected with confusing errors.)

+
#![allow(unused)]
+fn main() {
+type Opaque<'x> = impl Sized + 'x;
+
+fn test<'a>() -> Opaque<'a> {
+    let _ = || {
+        // `'a` is external to the closure
+        let _: Opaque<'a> = ();
+        //~^ Should be an error!
+    };
+    ()
+}
+}
+

Motivation: +In closure bodies, external lifetimes, although being categorized as "universal" lifetimes, +behave more like existential lifetimes in that the relations between them are not known ahead of +time, instead their values are inferred just like existential lifetimes and the requirements are +propagated back to the parent fn. This breaks the member constraints algorithm as described above:

+
+

In order for the algorithm to pick the right choice, the complete set of “outlives” relationships +between the choice regions ['static, '?1] must already be known before doing the region inference

+
+

Here is an example that details how :

+
#![allow(unused)]
+fn main() {
+type Opaque<'x, 'y> = impl Sized;
+
+// 
+fn test<'a, 'b>(s: &'a str) -> impl FnOnce() -> Opaque<'a, 'b> {
+    move || { s }
+    //~^ ERROR hidden type for `Opaque<'_, '_>` captures lifetime that does not appear in bounds
+}
+
+// The above closure body is desugared into something like:
+fn test::{closure#0}(_upvar: &'?8 str) -> Opaque<'?6, '?7> {
+    return _upvar
+}
+
+// where `['?8, '?6, ?7]` are universal lifetimes *external* to the closure.
+// There are no known relations between them *inside* the closure.
+// But in the parent fn it is known that `'?6: '?8`.
+//
+// When encountering an opaque definition `Opaque<'?6, '?7> := &'8 str`,
+// The member constraints algorithm does not know enough to safely make `?8 = '?6`.
+// For this reason, it errors with a sensible message:
+// "hidden type captures lifetime that does not appear in bounds".
+}
+

Without these restrictions, error messages are confusing and, more importantly, there is a risk that +we accept code that would likely break in the future because member constraints are super broken +in closures.

+

Output types: +I believe the most common scenario where this causes issues in real-world code is with +closure/async-block output types. It is worth noting that there is a discrepancy between closures +and async blocks that further demonstrates this issue and is attributed to the +hack of replace_opaque_types_with_inference_vars, +which is applied to futures only.

+
#![allow(unused)]
+fn main() {
+type Opaque<'x> = impl Sized + 'x;
+fn test<'a>() -> impl FnOnce() -> Opaque<'a> {
+    // Output type of the closure is Opaque<'a>
+    // -> hidden type definition happens *inside* the closure
+    // -> rejected.
+    move || {}
+    //~^ ERROR expected generic lifetime parameter, found `'_`
+}
+}
+
#![allow(unused)]
+fn main() {
+use std::future::Future;
+type Opaque<'x> = impl Sized + 'x;
+fn test<'a>() -> impl Future<Output = Opaque<'a>> {
+    // Output type of the async block is unit `()`
+    // -> hidden type definition happens in the parent fn
+    // -> accepted.
+    async move {}
+}
+}
+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/borrow_check/region_inference.html b/borrow_check/region_inference.html new file mode 100644 index 000000000..4d1785c77 --- /dev/null +++ b/borrow_check/region_inference.html @@ -0,0 +1,406 @@ + + + + + + Region inference - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Region inference (NLL)

+ +

The MIR-based region checking code is located in the rustc_mir::borrow_check +module.

+

The MIR-based region analysis consists of two major functions:

+
    +
  • replace_regions_in_mir, invoked first, has two jobs: +
      +
    • First, it finds the set of regions that appear within the +signature of the function (e.g., 'a in fn foo<'a>(&'a u32) { ... }). These are called the "universal" or "free" regions – in +particular, they are the regions that appear free in the +function body.
    • +
    • Second, it replaces all the regions from the function body with +fresh inference variables. This is because (presently) those +regions are the results of lexical region inference and hence are +not of much interest. The intention is that – eventually – they +will be "erased regions" (i.e., no information at all), since we +won't be doing lexical region inference at all.
    • +
    +
  • +
  • compute_regions, invoked second: this is given as argument the +results of move analysis. It has the job of computing values for all +the inference variables that replace_regions_in_mir introduced. +
      +
    • To do that, it first runs the MIR type checker. This is +basically a normal type-checker but specialized to MIR, which is +much simpler than full Rust, of course. Running the MIR type +checker will however create various constraints between region +variables, indicating their potential values and relationships to +one another.
    • +
    • After this, we perform constraint propagation by creating a +RegionInferenceContext and invoking its solve +method.
    • +
    • The NLL RFC also includes fairly thorough (and hopefully readable) +coverage.
    • +
    +
  • +
+

Universal regions

+

The UniversalRegions type represents a collection of universal regions +corresponding to some MIR DefId. It is constructed in +replace_regions_in_mir when we replace all regions with fresh inference +variables. UniversalRegions contains indices for all the free regions in +the given MIR along with any relationships that are known to hold between +them (e.g. implied bounds, where clauses, etc.).

+

For example, given the MIR for the following function:

+
#![allow(unused)]
+fn main() {
+fn foo<'a>(x: &'a u32) {
+    // ...
+}
+}
+

we would create a universal region for 'a and one for 'static. There may +also be some complications for handling closures, but we will ignore those for +the moment.

+

TODO: write about how these regions are computed.

+

+

Region variables

+

The value of a region can be thought of as a set. This set contains all +points in the MIR where the region is valid along with any regions that are +outlived by this region (e.g. if 'a: 'b, then end('b) is in the set for +'a); we call the domain of this set a RegionElement. In the code, the value +for all regions is maintained in the rustc_borrowck::region_infer module. +For each region we maintain a set storing what elements are present in its value (to make this +efficient, we give each kind of element an index, the RegionElementIndex, and +use sparse bitsets).

+

The kinds of region elements are as follows:

+
    +
  • Each location in the MIR control-flow graph: a location is just +the pair of a basic block and an index. This identifies the point +on entry to the statement with that index (or the terminator, if +the index is equal to statements.len()).
  • +
  • There is an element end('a) for each universal region 'a, +corresponding to some portion of the caller's (or caller's caller, +etc) control-flow graph.
  • +
  • Similarly, there is an element denoted end('static) corresponding +to the remainder of program execution after this function returns.
  • +
  • There is an element !1 for each placeholder region !1. This +corresponds (intuitively) to some unknown set of other elements – +for details on placeholders, see the section +placeholders and universes.
  • +
+

Constraints

+

Before we can infer the value of regions, we need to collect +constraints on the regions. The full set of constraints is described +in the section on constraint propagation, but the two most +common sorts of constraints are:

+
    +
  1. Outlives constraints. These are constraints that one region outlives another +(e.g. 'a: 'b). Outlives constraints are generated by the MIR type +checker.
  2. +
  3. Liveness constraints. Each region needs to be live at points where it can be +used.
  4. +
+

Inference Overview

+

So how do we compute the contents of a region? This process is called region +inference. The high-level idea is pretty simple, but there are some details we +need to take care of.

+

Here is the high-level idea: we start off each region with the MIR locations we +know must be in it from the liveness constraints. From there, we use all of the +outlives constraints computed from the type checker to propagate the +constraints: for each region 'a, if 'a: 'b, then we add all elements of +'b to 'a, including end('b). This all happens in +propagate_constraints.

+

Then, we will check for errors. We first check that type tests are satisfied by +calling check_type_tests. This checks constraints like T: 'a. Second, we +check that universal regions are not "too big". This is done by calling +check_universal_regions. This checks that for each region 'a if 'a +contains the element end('b), then we must already know that 'a: 'b holds +(e.g. from a where clause). If we don't already know this, that is an error... +well, almost. There is some special handling for closures that we will discuss +later.

+

Example

+

Consider the following example:

+
fn foo<'a, 'b>(x: &'a usize) -> &'b usize {
+    x
+}
+

Clearly, this should not compile because we don't know if 'a outlives 'b +(if it doesn't then the return value could be a dangling reference).

+

Let's back up a bit. We need to introduce some free inference variables (as is +done in replace_regions_in_mir). This example doesn't use the exact regions +produced, but it (hopefully) is enough to get the idea across.

+
fn foo<'a, 'b>(x: &'a /* '#1 */ usize) -> &'b /* '#3 */ usize {
+    x // '#2, location L1
+}
+

Some notation: '#1, '#3, and '#2 represent the universal regions for the +argument, return value, and the expression x, respectively. Additionally, I +will call the location of the expression x L1.

+

So now we can use the liveness constraints to get the following starting points:

+
+ + + +
RegionContents
'#1
'#2L1
'#3L1
+
+

Now we use the outlives constraints to expand each region. Specifically, we +know that '#2: '#3 ...

+
+ + + +
RegionContents
'#1L1
'#2L1, end('#3) // add contents of '#3 and end('#3)
'#3L1
+
+

... and '#1: '#2, so ...

+
+ + + +
RegionContents
'#1L1, end('#2), end('#3) // add contents of '#2 and end('#2)
'#2L1, end('#3)
'#3L1
+
+

Now, we need to check that no regions were too big (we don't have any type +tests to check in this case). Notice that '#1 now contains end('#3), but +we have no where clause or implied bound to say that 'a: 'b... that's an +error!

+

Some details

+

The RegionInferenceContext type contains all of the information needed to +do inference, including the universal regions from replace_regions_in_mir and +the constraints computed for each region. It is constructed just after we +compute the liveness constraints.

+

Here are some of the fields of the struct:

+
    +
  • constraints: contains all the outlives constraints.
  • +
  • liveness_constraints: contains all the liveness constraints.
  • +
  • universal_regions: contains the UniversalRegions returned by +replace_regions_in_mir.
  • +
  • universal_region_relations: contains relations known to be true about +universal regions. For example, if we have a where clause that 'a: 'b, that +relation is assumed to be true while borrow checking the implementation (it +is checked at the caller), so universal_region_relations would contain 'a: 'b.
  • +
  • type_tests: contains some constraints on types that we must check after +inference (e.g. T: 'a).
  • +
  • closure_bounds_mapping: used for propagating region constraints from +closures back out to the creator of the closure.
  • +
+

TODO: should we discuss any of the others fields? What about the SCCs?

+

Ok, now that we have constructed a RegionInferenceContext, we can do +inference. This is done by calling the solve method on the context. This +is where we call propagate_constraints and then check the resulting type +tests and universal regions, as discussed above.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/borrow_check/region_inference/closure_constraints.html b/borrow_check/region_inference/closure_constraints.html new file mode 100644 index 000000000..0eb8fc894 --- /dev/null +++ b/borrow_check/region_inference/closure_constraints.html @@ -0,0 +1,243 @@ + + + + + + Closure constraints - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Propagating closure constraints

+

When we are checking the type tests and universal regions, we may come +across a constraint that we can't prove yet if we are in a closure +body! However, the necessary constraints may actually hold (we just +don't know it yet). Thus, if we are inside a closure, we just collect +all the constraints we can't prove yet and return them. Later, when we +are borrow check the MIR node that created the closure, we can also +check that these constraints hold. At that time, if we can't prove +they hold, we report an error.

+

How this is implemented

+

While borrow-checking a closure inside of RegionInferenceContext::solve we separately try to propagate type-outlives and region-outlives constraints to the parent if we're unable to prove them locally.

+

Region-outlive constraints

+

If RegionInferenceContext::check_universal_regions fails to prove some outlives constraint 'longer_fr: 'shorter_fr, we try to propagate it in fn try_propagate_universal_region_error. Both these universal regions are either local to the closure or an external region.

+

In case 'longer_fr is a local universal region, we search for the largest external region 'fr_minus which is outlived by 'longer_fr, i.e. 'longer_fr: 'fr_minus. In case there are multiple such regions, we pick the mutual_immediate_postdominator: the fixpoint of repeatedly computing the GLB of all GLBs, see TransitiveRelation::postdom_upper_bound for more details.

+

If 'fr_minus exists we require it to outlive all non-local upper bounds of 'shorter_fr. There will always be at least one non-local upper bound 'static.

+

Type-outlive constraints

+

Type-outlives constraints are proven in check_type_tests. This happens after computing the outlives graph, which is now immutable.

+

For all type tests we fail to prove via fn eval_verify_bound inside of the closure we call try_promote_type_test. A TypeTest represents a type-outlives bound generic_kind: lower_bound together with a verify_bound. If the VerifyBound holds for the lower_bound, the constraint is satisfied. try_promote_type_test does not care about the verify_bound.

+

It starts by calling fn try_promote_type_test_subject. This function takes the GenericKind and tries to transform it to a ClosureOutlivesSubject which is no longer references anything local to the closure. This is done by replacing all free regions in that type with either 'static or region parameters which are equal to that free region. This operation fails if the generic_kind contains a region which cannot be replaced.

+

We then promote the lower_bound into the context of the caller. If the lower bound is equal to a placeholder, we replace it with 'static

+

We then look at all universal regions uv which are required to be outlived by lower_bound, i.e. for which borrow checking added region constraints. For each of these we then emit a ClosureOutlivesRequirement for all non-local universal regions which are known to outlive uv.

+

As we've already built the region graph of the closure at this point and separately check that it is consistent, we are also able to assume the outlive constraints uv: lower_bound here.

+

So if we have a type-outlives bounds we can't prove, e.g. T: 'local_infer, we use the region graph to go to universal variables 'a with 'a: local_infer. In case 'a are local, we then use the assumed outlived constraints to go to non-local ones.

+

We then store the list of promoted type tests in the BorrowCheckResults. +We then apply them in while borrow-checking its parent in TypeChecker::prove_closure_bounds.

+

TODO: explain how exactly that works :3

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/borrow_check/region_inference/constraint_propagation.html b/borrow_check/region_inference/constraint_propagation.html new file mode 100644 index 000000000..b71bed000 --- /dev/null +++ b/borrow_check/region_inference/constraint_propagation.html @@ -0,0 +1,396 @@ + + + + + + Constraint propagation - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Constraint propagation

+ +

The main work of the region inference is constraint propagation, +which is done in the propagate_constraints function. There are +three sorts of constraints that are used in NLL, and we'll explain how +propagate_constraints works by "layering" those sorts of constraints +on one at a time (each of them is fairly independent from the others):

+
    +
  • liveness constraints (R live at E), which arise from liveness;
  • +
  • outlives constraints (R1: R2), which arise from subtyping;
  • +
  • member constraints (member R_m of [R_c...]), which arise from impl Trait.
  • +
+

In this chapter, we'll explain the "heart" of constraint propagation, +covering both liveness and outlives constraints.

+

Notation and high-level concepts

+

Conceptually, region inference is a "fixed-point" computation. It is +given some set of constraints {C} and it computes a set of values +Values: R -> {E} that maps each region R to a set of elements +{E} (see here for more notes on region elements):

+
    +
  • Initially, each region is mapped to an empty set, so Values(R) = {} for all regions R.
  • +
  • Next, we process the constraints repeatedly until a fixed-point is reached: +
      +
    • For each constraint C: +
        +
      • Update Values as needed to satisfy the constraint
      • +
      +
    • +
    +
  • +
+

As a simple example, if we have a liveness constraint R live at E, +then we can apply Values(R) = Values(R) union {E} to make the +constraint be satisfied. Similarly, if we have an outlives constraints +R1: R2, we can apply Values(R1) = Values(R1) union Values(R2). +(Member constraints are more complex and we discuss them in this section.)

+

In practice, however, we are a bit more clever. Instead of applying +the constraints in a loop, we can analyze the constraints and figure +out the correct order to apply them, so that we only have to apply +each constraint once in order to find the final result.

+

Similarly, in the implementation, the Values set is stored in the +scc_values field, but they are indexed not by a region but by a +strongly connected component (SCC). SCCs are an optimization that +avoids a lot of redundant storage and computation. They are explained +in the section on outlives constraints.

+

Liveness constraints

+

A liveness constraint arises when some variable whose type +includes a region R is live at some point P. This simply means that +the value of R must include the point P. Liveness constraints are +computed by the MIR type checker.

+

A liveness constraint R live at E is satisfied if E is a member of +Values(R). So to "apply" such a constraint to Values, we just have +to compute Values(R) = Values(R) union {E}.

+

The liveness values are computed in the type-check and passed to the +region inference upon creation in the liveness_constraints argument. +These are not represented as individual constraints like R live at E +though; instead, we store a (sparse) bitset per region variable (of +type LivenessValues). This way we only need a single bit for each +liveness constraint.

+

One thing that is worth mentioning: All lifetime parameters are always +considered to be live over the entire function body. This is because +they correspond to some portion of the caller's execution, and that +execution clearly includes the time spent in this function, since the +caller is waiting for us to return.

+

Outlives constraints

+

An outlives constraint 'a: 'b indicates that the value of 'a must +be a superset of the value of 'b. That is, an outlives +constraint R1: R2 is satisfied if Values(R1) is a superset of +Values(R2). So to "apply" such a constraint to Values, we just +have to compute Values(R1) = Values(R1) union Values(R2).

+

One observation that follows from this is that if you have R1: R2 +and R2: R1, then R1 = R2 must be true. Similarly, if you have:

+
R1: R2
+R2: R3
+R3: R4
+R4: R1
+
+

then R1 = R2 = R3 = R4 follows. We take advantage of this to make things +much faster, as described shortly.

+

In the code, the set of outlives constraints is given to the region +inference context on creation in a parameter of type +OutlivesConstraintSet. The constraint set is basically just a list of 'a: 'b constraints.

+

The outlives constraint graph and SCCs

+

In order to work more efficiently with outlives constraints, they are +converted into the form of a graph, where the nodes of the +graph are region variables ('a, 'b) and each constraint 'a: 'b +induces an edge 'a -> 'b. This conversion happens in the +RegionInferenceContext::new function that creates the inference +context.

+

When using a graph representation, we can detect regions that must be equal +by looking for cycles. That is, if you have a constraint like

+
'a: 'b
+'b: 'c
+'c: 'd
+'d: 'a
+
+

then this will correspond to a cycle in the graph containing the +elements 'a...'d.

+

Therefore, one of the first things that we do in propagating region +values is to compute the strongly connected components (SCCs) in +the constraint graph. The result is stored in the constraint_sccs +field. You can then easily find the SCC that a region r is a part of +by invoking constraint_sccs.scc(r).

+

Working in terms of SCCs allows us to be more efficient: if we have a +set of regions 'a...'d that are part of a single SCC, we don't have +to compute/store their values separately. We can just store one value +for the SCC, since they must all be equal.

+

If you look over the region inference code, you will see that a number +of fields are defined in terms of SCCs. For example, the +scc_values field stores the values of each SCC. To get the value +of a specific region 'a then, we first figure out the SCC that the +region is a part of, and then find the value of that SCC.

+

When we compute SCCs, we not only figure out which regions are a +member of each SCC, we also figure out the edges between them. So for example +consider this set of outlives constraints:

+
'a: 'b
+'b: 'a
+
+'a: 'c
+
+'c: 'd
+'d: 'c
+
+

Here we have two SCCs: S0 contains 'a and 'b, and S1 contains 'c +and 'd. But these SCCs are not independent: because 'a: 'c, that +means that S0: S1 as well. That is -- the value of S0 must be a +superset of the value of S1. One crucial thing is that this graph of +SCCs is always a DAG -- that is, it never has cycles. This is because +all the cycles have been removed to form the SCCs themselves.

+

Applying liveness constraints to SCCs

+

The liveness constraints that come in from the type-checker are +expressed in terms of regions -- that is, we have a map like +Liveness: R -> {E}. But we want our final result to be expressed +in terms of SCCs -- we can integrate these liveness constraints very +easily just by taking the union:

+
for each region R:
+  let S be the SCC that contains R
+  Values(S) = Values(S) union Liveness(R)
+
+

In the region inferencer, this step is done in RegionInferenceContext::new.

+

Applying outlives constraints

+

Once we have computed the DAG of SCCs, we use that to structure out +entire computation. If we have an edge S1 -> S2 between two SCCs, +that means that Values(S1) >= Values(S2) must hold. So, to compute +the value of S1, we first compute the values of each successor S2. +Then we simply union all of those values together. To use a +quasi-iterator-like notation:

+
Values(S1) =
+  s1.successors()
+    .map(|s2| Values(s2))
+    .union()
+
+

In the code, this work starts in the propagate_constraints +function, which iterates over all the SCCs. For each SCC S1, we +compute its value by first computing the value of its +successors. Since SCCs form a DAG, we don't have to be concerned about +cycles, though we do need to keep a set around to track whether we +have already processed a given SCC or not. For each successor S2, once +we have computed S2's value, we can union those elements into the +value for S1. (Although we have to be careful in this process to +properly handle higher-ranked +placeholders. Note that the value +for S1 already contains the liveness constraints, since they were +added in RegionInferenceContext::new.

+

Once that process is done, we now have the "minimal value" for S1, +taking into account all of the liveness and outlives +constraints. However, in order to complete the process, we must also +consider member constraints, which are described in a later +section.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/borrow_check/region_inference/error_reporting.html b/borrow_check/region_inference/error_reporting.html new file mode 100644 index 000000000..105f9e851 --- /dev/null +++ b/borrow_check/region_inference/error_reporting.html @@ -0,0 +1,219 @@ + + + + + + Error reporting - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Reporting region errors

+

TODO: we should discuss how to generate errors from the results of these analyses.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/borrow_check/region_inference/lifetime_parameters.html b/borrow_check/region_inference/lifetime_parameters.html new file mode 100644 index 000000000..da2411af9 --- /dev/null +++ b/borrow_check/region_inference/lifetime_parameters.html @@ -0,0 +1,311 @@ + + + + + + Lifetime parameters - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Universal regions

+ +

"Universal regions" is the name that the code uses to refer to "named +lifetimes" -- e.g., lifetime parameters and 'static. The name +derives from the fact that such lifetimes are "universally quantified" +(i.e., we must make sure the code is true for all values of those +lifetimes). It is worth spending a bit of discussing how lifetime +parameters are handled during region inference. Consider this example:

+
fn foo<'a, 'b>(x: &'a u32, y: &'b u32) -> &'b u32 {
+  x
+}
+

This example is intended not to compile, because we are returning x, +which has type &'a u32, but our signature promises that we will +return a &'b u32 value. But how are lifetimes like 'a and 'b +integrated into region inference, and how this error wind up being +detected?

+

Universal regions and their relationships to one another

+

Early on in region inference, one of the first things we do is to +construct a UniversalRegions struct. This struct tracks the +various universal regions in scope on a particular function. We also +create a UniversalRegionRelations struct, which tracks their +relationships to one another. So if you have e.g. where 'a: 'b, then +the UniversalRegionRelations struct would track that 'a: 'b is +known to hold (which could be tested with the outlives function).

+

Everything is a region variable

+

One important aspect of how NLL region inference works is that all +lifetimes are represented as numbered variables. This means that the +only variant of region_kind::RegionKind that we use is the ReVar +variant. These region variables are broken into two major categories, +based on their index:

+
    +
  • 0..N: universal regions -- the ones we are discussing here. In this +case, the code must be correct with respect to any value of those +variables that meets the declared relationships.
  • +
  • N..M: existential regions -- inference variables where the region +inferencer is tasked with finding some suitable value.
  • +
+

In fact, the universal regions can be further subdivided based on +where they were brought into scope (see the RegionClassification +type). These subdivisions are not important for the topics discussed +here, but become important when we consider closure constraint +propagation, so we discuss them there.

+

Universal lifetimes as the elements of a region's value

+

As noted previously, the value that we infer for each region is a set +{E}. The elements of this set can be points in the control-flow +graph, but they can also be an element end('a) corresponding to each +universal lifetime 'a. If the value for some region R0 includes +end('a), then this implies that R0 must extend until the end of 'a +in the caller.

+

The "value" of a universal region

+

During region inference, we compute a value for each universal region +in the same way as we compute values for other regions. This value +represents, effectively, the lower bound on that universal region +-- the things that it must outlive. We now describe how we use this +value to check for errors.

+

Liveness and universal regions

+

All universal regions have an initial liveness constraint that +includes the entire function body. This is because lifetime parameters +are defined in the caller and must include the entirety of the +function call that invokes this particular function. In addition, each +universal region 'a includes itself (that is, end('a)) in its +liveness constraint (i.e., 'a must extend until the end of +itself). In the code, these liveness constraints are setup in +init_free_and_bound_regions.

+

Propagating outlives constraints for universal regions

+

So, consider the first example of this section:

+
fn foo<'a, 'b>(x: &'a u32, y: &'b u32) -> &'b u32 {
+  x
+}
+

Here, returning x requires that &'a u32 <: &'b u32, which gives +rise to an outlives constraint 'a: 'b. Combined with our default liveness +constraints we get:

+
'a live at {B, end('a)} // B represents the "function body"
+'b live at {B, end('b)}
+'a: 'b
+
+

When we process the 'a: 'b constraint, therefore, we will add +end('b) into the value for 'a, resulting in a final value of {B, end('a), end('b)}.

+

Detecting errors

+

Once we have finished constraint propagation, we then enforce a +constraint that if some universal region 'a includes an element +end('b), then 'a: 'b must be declared in the function's bounds. If +not, as in our example, that is an error. This check is done in the +check_universal_regions function, which simply iterates over all +universal regions, inspects their final value, and tests against the +declared UniversalRegionRelations.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/borrow_check/region_inference/member_constraints.html b/borrow_check/region_inference/member_constraints.html new file mode 100644 index 000000000..8e1a9725e --- /dev/null +++ b/borrow_check/region_inference/member_constraints.html @@ -0,0 +1,363 @@ + + + + + + Member constraints - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Member constraints

+ +

A member constraint 'm member of ['c_1..'c_N] expresses that the +region 'm must be equal to some choice regions 'c_i (for +some i). These constraints cannot be expressed by users, but they +arise from impl Trait due to its lifetime capture rules. Consider a +function such as the following:

+
fn make(a: &'a u32, b: &'b u32) -> impl Trait<'a, 'b> { .. }
+

Here, the true return type (often called the "hidden type") is only +permitted to capture the lifetimes 'a or 'b. You can kind of see +this more clearly by desugaring that impl Trait return type into its +more explicit form:

+
type MakeReturn<'x, 'y> = impl Trait<'x, 'y>;
+fn make(a: &'a u32, b: &'b u32) -> MakeReturn<'a, 'b> { .. }
+

Here, the idea is that the hidden type must be some type that could +have been written in place of the impl Trait<'x, 'y> -- but clearly +such a type can only reference the regions 'x or 'y (or +'static!), as those are the only names in scope. This limitation is +then translated into a restriction to only access 'a or 'b because +we are returning MakeReturn<'a, 'b>, where 'x and 'y have been +replaced with 'a and 'b respectively.

+

Detailed example

+

To help us explain member constraints in more detail, let's spell out +the make example in a bit more detail. First off, let's assume that +you have some dummy trait:

+
trait Trait<'a, 'b> { }
+impl<T> Trait<'_, '_> for T { }
+

and this is the make function (in desugared form):

+
type MakeReturn<'x, 'y> = impl Trait<'x, 'y>;
+fn make(a: &'a u32, b: &'b u32) -> MakeReturn<'a, 'b> {
+  (a, b)
+}
+

What happens in this case is that the return type will be (&'0 u32, &'1 u32), +where '0 and '1 are fresh region variables. We will have the following +region constraints:

+
'0 live at {L}
+'1 live at {L}
+'a: '0
+'b: '1
+'0 member of ['a, 'b, 'static]
+'1 member of ['a, 'b, 'static]
+
+

Here the "liveness set" {L} corresponds to that subset of the body +where '0 and '1 are live -- basically the point from where the +return tuple is constructed to where it is returned (in fact, '0 and +'1 might have slightly different liveness sets, but that's not very +interesting to the point we are illustrating here).

+

The 'a: '0 and 'b: '1 constraints arise from subtyping. When we +construct the (a, b) value, it will be assigned type (&'0 u32, &'1 u32) -- the region variables reflect that the lifetimes of these +references could be made smaller. For this value to be created from +a and b, however, we do require that:

+
(&'a u32, &'b u32) <: (&'0 u32, &'1 u32)
+
+

which means in turn that &'a u32 <: &'0 u32 and hence that 'a: '0 +(and similarly that &'b u32 <: &'1 u32, 'b: '1).

+

Note that if we ignore member constraints, the value of '0 would be +inferred to some subset of the function body (from the liveness +constraints, which we did not write explicitly). It would never become +'a, because there is no need for it too -- we have a constraint that +'a: '0, but that just puts a "cap" on how large '0 can grow to +become. Since we compute the minimal value that we can, we are happy +to leave '0 as being just equal to the liveness set. This is where +member constraints come in.

+

Choices are always lifetime parameters

+

At present, the "choice" regions from a member constraint are always lifetime +parameters from the current function. As of October 2021, +this falls out from the placement of impl Trait, though in the future it may not +be the case. We take some advantage of this fact, as it simplifies the current +code. In particular, we don't have to consider a case like '0 member of ['1, 'static], in which the value of both '0 and '1 are being inferred and hence +changing. See rust-lang/rust#61773 for more information.

+

Applying member constraints

+

Member constraints are a bit more complex than other forms of +constraints. This is because they have a "or" quality to them -- that +is, they describe multiple choices that we must select from. E.g., in +our example constraint '0 member of ['a, 'b, 'static], it might be +that '0 is equal to 'a, 'b, or 'static. How can we pick the +correct one? What we currently do is to look for a minimal choice +-- if we find one, then we will grow '0 to be equal to that minimal +choice. To find that minimal choice, we take two factors into +consideration: lower and upper bounds.

+

Lower bounds

+

The lower bounds are those lifetimes that '0 must outlive -- +i.e., that '0 must be larger than. In fact, when it comes time to +apply member constraints, we've already computed the lower bounds of +'0 because we computed its minimal value (or at least, the lower +bounds considering everything but member constraints).

+

Let LB be the current value of '0. We know then that '0: LB must +hold, whatever the final value of '0 is. Therefore, we can rule out +any choice 'choice where 'choice: LB does not hold.

+

Unfortunately, in our example, this is not very helpful. The lower +bound for '0 will just be the liveness set {L}, and we know that +all the lifetime parameters outlive that set. So we are left with the +same set of choices here. (But in other examples, particularly those +with different variance, lower bound constraints may be relevant.)

+

Upper bounds

+

The upper bounds are those lifetimes that must outlive '0 -- +i.e., that '0 must be smaller than. In our example, this would be +'a, because we have the constraint that 'a: '0. In more complex +examples, the chain may be more indirect.

+

We can use upper bounds to rule out members in a very similar way to +lower bounds. If UB is some upper bound, then we know that UB: '0 must hold, so we can rule out any choice 'choice where UB: 'choice does not hold.

+

In our example, we would be able to reduce our choice set from ['a, 'b, 'static] to just ['a]. This is because '0 has an upper bound +of 'a, and neither 'a: 'b nor 'a: 'static is known to hold.

+

(For notes on how we collect upper bounds in the implementation, see +the section below.)

+

Minimal choice

+

After applying lower and upper bounds, we can still sometimes have +multiple possibilities. For example, imagine a variant of our example +using types with the opposite variance. In that case, we would have +the constraint '0: 'a instead of 'a: '0. Hence the current value +of '0 would be {L, 'a}. Using this as a lower bound, we would be +able to narrow down the member choices to ['a, 'static] because 'b: 'a is not known to hold (but 'a: 'a and 'static: 'a do hold). We +would not have any upper bounds, so that would be our final set of choices.

+

In that case, we apply the minimal choice rule -- basically, if +one of our choices if smaller than the others, we can use that. In +this case, we would opt for 'a (and not 'static).

+

This choice is consistent with the general 'flow' of region +propagation, which always aims to compute a minimal value for the +region being inferred. However, it is somewhat arbitrary.

+

+

Collecting upper bounds in the implementation

+

In practice, computing upper bounds is a bit inconvenient, because our +data structures are setup for the opposite. What we do is to compute +the reverse SCC graph (we do this lazily and cache the result) -- +that is, a graph where 'a: 'b induces an edge SCC('b) -> SCC('a). Like the normal SCC graph, this is a DAG. We can then do a +depth-first search starting from SCC('0) in this graph. This will +take us to all the SCCs that must outlive '0.

+

One wrinkle is that, as we walk the "upper bound" SCCs, their values +will not yet have been fully computed. However, we have already +applied their liveness constraints, so we have some information about +their value. In particular, for any regions representing lifetime +parameters, their value will contain themselves (i.e., the initial +value for 'a includes 'a and the value for 'b contains 'b). So +we can collect all of the lifetime parameters that are reachable, +which is precisely what we are interested in.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/borrow_check/region_inference/placeholders_and_universes.html b/borrow_check/region_inference/placeholders_and_universes.html new file mode 100644 index 000000000..d2865385b --- /dev/null +++ b/borrow_check/region_inference/placeholders_and_universes.html @@ -0,0 +1,539 @@ + + + + + + Placeholders and universes - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Placeholders and universes

+ +

From time to time we have to reason about regions that we can't +concretely know. For example, consider this program:

+
// A function that needs a static reference
+fn foo(x: &'static u32) { }
+
+fn bar(f: for<'a> fn(&'a u32)) {
+       // ^^^^^^^^^^^^^^^^^^^ a function that can accept **any** reference
+    let x = 22;
+    f(&x);
+}
+
+fn main() {
+    bar(foo);
+}
+

This program ought not to type-check: foo needs a static reference +for its argument, and bar wants to be given a function that +accepts any reference (so it can call it with something on its +stack, for example). But how do we reject it and why?

+

Subtyping and Placeholders

+

When we type-check main, and in particular the call bar(foo), we +are going to wind up with a subtyping relationship like this one:

+
fn(&'static u32) <: for<'a> fn(&'a u32)
+----------------    -------------------
+the type of `foo`   the type `bar` expects
+
+

We handle this sort of subtyping by taking the variables that are +bound in the supertype and replacing them with +universally quantified +representatives, denoted like !1 here. We call these regions "placeholder +regions" – they represent, basically, "some unknown region".

+

Once we've done that replacement, we have the following relation:

+
fn(&'static u32) <: fn(&'!1 u32)
+
+

The key idea here is that this unknown region '!1 is not related to +any other regions. So if we can prove that the subtyping relationship +is true for '!1, then it ought to be true for any region, which is +what we wanted.

+

So let's work through what happens next. To check if two functions are +subtypes, we check if their arguments have the desired relationship +(fn arguments are contravariant, so +we swap the left and right here):

+
&'!1 u32 <: &'static u32
+
+

According to the basic subtyping rules for a reference, this will be +true if '!1: 'static. That is – if "some unknown region !1" outlives 'static. +Now, this might be true – after all, '!1 could be 'static – +but we don't know that it's true. So this should yield up an error (eventually).

+

What is a universe?

+

In the previous section, we introduced the idea of a placeholder +region, and we denoted it !1. We call this number 1 the universe +index. The idea of a "universe" is that it is a set of names that +are in scope within some type or at some point. Universes are formed +into a tree, where each child extends its parents with some new names. +So the root universe conceptually contains global names, such as +the lifetime 'static or the type i32. In the compiler, we also +put generic type parameters into this root universe (in this sense, +there is not just one root universe, but one per item). So consider +this function bar:

+
struct Foo { }
+
+fn bar<'a, T>(t: &'a T) {
+    ...
+}
+

Here, the root universe would consist of the lifetimes 'static and +'a. In fact, although we're focused on lifetimes here, we can apply +the same concept to types, in which case the types Foo and T would +be in the root universe (along with other global types, like i32). +Basically, the root universe contains all the names that +appear free in the body of bar.

+

Now let's extend bar a bit by adding a variable x:

+
fn bar<'a, T>(t: &'a T) {
+    let x: for<'b> fn(&'b u32) = ...;
+}
+

Here, the name 'b is not part of the root universe. Instead, when we +"enter" into this for<'b> (e.g., by replacing it with a placeholder), we will create +a child universe of the root, let's call it U1:

+
U0 (root universe)
+│
+└─ U1 (child universe)
+
+

The idea is that this child universe U1 extends the root universe U0 +with a new name, which we are identifying by its universe number: +!1.

+

Now let's extend bar a bit by adding one more variable, y:

+
fn bar<'a, T>(t: &'a T) {
+    let x: for<'b> fn(&'b u32) = ...;
+    let y: for<'c> fn(&'c u32) = ...;
+}
+

When we enter this type, we will again create a new universe, which +we'll call U2. Its parent will be the root universe, and U1 will be +its sibling:

+
U0 (root universe)
+│
+├─ U1 (child universe)
+│
+└─ U2 (child universe)
+
+

This implies that, while in U2, we can name things from U0 or U2, but +not U1.

+

Giving existential variables a universe. Now that we have this +notion of universes, we can use it to extend our type-checker and +things to prevent illegal names from leaking out. The idea is that we +give each inference (existential) variable – whether it be a type or +a lifetime – a universe. That variable's value can then only +reference names visible from that universe. So for example if a +lifetime variable is created in U0, then it cannot be assigned a value +of !1 or !2, because those names are not visible from the universe +U0.

+

Representing universes with just a counter. You might be surprised +to see that the compiler doesn't keep track of a full tree of +universes. Instead, it just keeps a counter – and, to determine if +one universe can see another one, it just checks if the index is +greater. For example, U2 can see U0 because 2 >= 0. But U0 cannot see +U2, because 0 >= 2 is false.

+

How can we get away with this? Doesn't this mean that we would allow +U2 to also see U1? The answer is that, yes, we would, if that +question ever arose. But because of the structure of our type +checker etc, there is no way for that to happen. In order for +something happening in the universe U1 to "communicate" with something +happening in U2, they would have to have a shared inference variable X +in common. And because everything in U1 is scoped to just U1 and its +children, that inference variable X would have to be in U0. And since +X is in U0, it cannot name anything from U1 (or U2). This is perhaps easiest +to see by using a kind of generic "logic" example:

+
exists<X> {
+   forall<Y> { ... /* Y is in U1 ... */ }
+   forall<Z> { ... /* Z is in U2 ... */ }
+}
+
+

Here, the only way for the two foralls to interact would be through X, +but neither Y nor Z are in scope when X is declared, so its value +cannot reference either of them.

+

Universes and placeholder region elements

+

But where does that error come from? The way it happens is like this. +When we are constructing the region inference context, we can tell +from the type inference context how many placeholder variables exist +(the InferCtxt has an internal counter). For each of those, we +create a corresponding universal region variable !n and a "region +element" placeholder(n). This corresponds to "some unknown set of other +elements". The value of !n is {placeholder(n)}.

+

At the same time, we also give each existential variable a +universe (also taken from the InferCtxt). This universe +determines which placeholder elements may appear in its value: For +example, a variable in universe U3 may name placeholder(1), placeholder(2), and +placeholder(3), but not placeholder(4). Note that the universe of an inference +variable controls what region elements can appear in its value; it +does not say region elements will appear.

+

Placeholders and outlives constraints

+

In the region inference engine, outlives constraints have the form:

+
V1: V2 @ P
+
+

where V1 and V2 are region indices, and hence map to some region +variable (which may be universally or existentially quantified). The +P here is a "point" in the control-flow graph; it's not important +for this section. This variable will have a universe, so let's call +those universes U(V1) and U(V2) respectively. (Actually, the only +one we are going to care about is U(V1).)

+

When we encounter this constraint, the ordinary procedure is to start +a DFS from P. We keep walking so long as the nodes we are walking +are present in value(V2) and we add those nodes to value(V1). If +we reach a return point, we add in any end(X) elements. That part +remains unchanged.

+

But then after that we want to iterate over the placeholder placeholder(x) +elements in V2 (each of those must be visible to U(V2), but we +should be able to just assume that is true, we don't have to check +it). We have to ensure that value(V1) outlives each of those +placeholder elements.

+

Now there are two ways that could happen. First, if U(V1) can see +the universe x (i.e., x <= U(V1)), then we can just add placeholder(x) +to value(V1) and be done. But if not, then we have to approximate: +we may not know what set of elements placeholder(x) represents, but we +should be able to compute some sort of upper bound B for it – +some region B that outlives placeholder(x). For now, we'll just use +'static for that (since it outlives everything) – in the future, we +can sometimes be smarter here (and in fact we have code for doing this +already in other contexts). Moreover, since 'static is in the root +universe U0, we know that all variables can see it – so basically if +we find that value(V2) contains placeholder(x) for some universe x +that V1 can't see, then we force V1 to 'static.

+

Extending the "universal regions" check

+

After all constraints have been propagated, the NLL region inference +has one final check, where it goes over the values that wound up being +computed for each universal region and checks that they did not get +'too large'. In our case, we will go through each placeholder region +and check that it contains only the placeholder(u) element it is known to +outlive. (Later, we might be able to know that there are relationships +between two placeholder regions and take those into account, as we do +for universal regions from the fn signature.)

+

Put another way, the "universal regions" check can be considered to be +checking constraints like:

+
{placeholder(1)}: V1
+
+

where {placeholder(1)} is like a constant set, and V1 is the variable we +made to represent the !1 region.

+

Back to our example

+

OK, so far so good. Now let's walk through what would happen with our +first example:

+
fn(&'static u32) <: fn(&'!1 u32) @ P  // this point P is not imp't here
+
+

The region inference engine will create a region element domain like this:

+
{ CFG; end('static); placeholder(1) }
+  ---  ------------  ------- from the universe `!1`
+  |    'static is always in scope
+  all points in the CFG; not especially relevant here
+
+

It will always create two universal variables, one representing +'static and one representing '!1. Let's call them Vs and V1. They +will have initial values like so:

+
Vs = { CFG; end('static) } // it is in U0, so can't name anything else
+V1 = { placeholder(1) }
+
+

From the subtyping constraint above, we would have an outlives constraint like

+
'!1: 'static @ P
+
+

To process this, we would grow the value of V1 to include all of Vs:

+
Vs = { CFG; end('static) }
+V1 = { CFG; end('static), placeholder(1) }
+
+

At that point, constraint propagation is complete, because all the +outlives relationships are satisfied. Then we would go to the "check +universal regions" portion of the code, which would test that no +universal region grew too large.

+

In this case, V1 did grow too large – it is not known to outlive +end('static), nor any of the CFG – so we would report an error.

+

Another example

+

What about this subtyping relationship?

+
for<'a> fn(&'a u32, &'a u32)
+    <:
+for<'b, 'c> fn(&'b u32, &'c u32)
+
+

Here we would replace the bound region in the supertype with a placeholder, as before, yielding:

+
for<'a> fn(&'a u32, &'a u32)
+    <:
+fn(&'!1 u32, &'!2 u32)
+
+

then we instantiate the variable on the left-hand side with an +existential in universe U2, yielding the following (?n is a notation +for an existential variable):

+
fn(&'?3 u32, &'?3 u32)
+    <:
+fn(&'!1 u32, &'!2 u32)
+
+

Then we break this down further:

+
&'!1 u32 <: &'?3 u32
+&'!2 u32 <: &'?3 u32
+
+

and even further, yield up our region constraints:

+
'!1: '?3
+'!2: '?3
+
+

Note that, in this case, both '!1 and '!2 have to outlive the +variable '?3, but the variable '?3 is not forced to outlive +anything else. Therefore, it simply starts and ends as the empty set +of elements, and hence the type-check succeeds here.

+

(This should surprise you a little. It surprised me when I first realized it. +We are saying that if we are a fn that needs both of its arguments to have +the same region, we can accept being called with arguments with two +distinct regions. That seems intuitively unsound. But in fact, it's fine, as +I tried to explain in this issue on the Rust issue +tracker long ago. The reason is that even if we get called with arguments of +two distinct lifetimes, those two lifetimes have some intersection (the call +itself), and that intersection can be our value of 'a that we use as the +common lifetime of our arguments. -nmatsakis)

+

Final example

+

Let's look at one last example. We'll extend the previous one to have +a return type:

+
for<'a> fn(&'a u32, &'a u32) -> &'a u32
+    <:
+for<'b, 'c> fn(&'b u32, &'c u32) -> &'b u32
+
+

Despite seeming very similar to the previous example, this case is going to get +an error. That's good: the problem is that we've gone from a fn that promises +to return one of its two arguments, to a fn that is promising to return the +first one. That is unsound. Let's see how it plays out.

+

First, we replace the bound region in the supertype with a placeholder:

+
for<'a> fn(&'a u32, &'a u32) -> &'a u32
+    <:
+fn(&'!1 u32, &'!2 u32) -> &'!1 u32
+
+

Then we instantiate the subtype with existentials (in U2):

+
fn(&'?3 u32, &'?3 u32) -> &'?3 u32
+    <:
+fn(&'!1 u32, &'!2 u32) -> &'!1 u32
+
+

And now we create the subtyping relationships:

+
&'!1 u32 <: &'?3 u32 // arg 1
+&'!2 u32 <: &'?3 u32 // arg 2
+&'?3 u32 <: &'!1 u32 // return type
+
+

And finally the outlives relationships. Here, let V1, V2, and V3 be the +variables we assign to !1, !2, and ?3 respectively:

+
V1: V3
+V2: V3
+V3: V1
+
+

Those variables will have these initial values:

+
V1 in U1 = {placeholder(1)}
+V2 in U2 = {placeholder(2)}
+V3 in U2 = {}
+
+

Now because of the V3: V1 constraint, we have to add placeholder(1) into V3 (and +indeed it is visible from V3), so we get:

+
V3 in U2 = {placeholder(1)}
+
+

then we have this constraint V2: V3, so we wind up having to enlarge +V2 to include placeholder(1) (which it can also see):

+
V2 in U2 = {placeholder(1), placeholder(2)}
+
+

Now constraint propagation is done, but when we check the outlives +relationships, we find that V2 includes this new element placeholder(1), +so we report an error.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/borrow_check/two_phase_borrows.html b/borrow_check/two_phase_borrows.html new file mode 100644 index 000000000..6444b32a0 --- /dev/null +++ b/borrow_check/two_phase_borrows.html @@ -0,0 +1,298 @@ + + + + + + Two-phase-borrows - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Two-phase borrows

+

Two-phase borrows are a more permissive version of mutable borrows that allow +nested method calls such as vec.push(vec.len()). Such borrows first act as +shared borrows in a "reservation" phase and can later be "activated" into a +full mutable borrow.

+

Only certain implicit mutable borrows can be two-phase, any &mut or ref mut +in the source code is never a two-phase borrow. The cases where we generate a +two-phase borrow are:

+
    +
  1. The autoref borrow when calling a method with a mutable reference receiver.
  2. +
  3. A mutable reborrow in function arguments.
  4. +
  5. The implicit mutable borrow in an overloaded compound assignment operator.
  6. +
+

To give some examples:

+
#![allow(unused)]
+fn main() {
+// In the source code
+
+// Case 1:
+let mut v = Vec::new();
+v.push(v.len());
+let r = &mut Vec::new();
+r.push(r.len());
+
+// Case 2:
+std::mem::replace(r, vec![1, r.len()]);
+
+// Case 3:
+let mut x = std::num::Wrapping(2);
+x += x;
+}
+

Expanding these enough to show the two-phase borrows:

+
// Case 1:
+let mut v = Vec::new();
+let temp1 = &two_phase v;
+let temp2 = v.len();
+Vec::push(temp1, temp2);
+let r = &mut Vec::new();
+let temp3 = &two_phase *r;
+let temp4 = r.len();
+Vec::push(temp3, temp4);
+
+// Case 2:
+let temp5 = &two_phase *r;
+let temp6 = vec![1, r.len()];
+std::mem::replace(temp5, temp6);
+
+// Case 3:
+let mut x = std::num::Wrapping(2);
+let temp7 = &two_phase x;
+let temp8 = x;
+std::ops::AddAssign::add_assign(temp7, temp8);
+

Whether a borrow can be two-phase is tracked by a flag on the AutoBorrow +after type checking, which is then converted to a BorrowKind during MIR +construction.

+

Each two-phase borrow is assigned to a temporary that is only used once. As +such we can define:

+
    +
  • The point where the temporary is assigned to is called the reservation +point of the two-phase borrow.
  • +
  • The point where the temporary is used, which is effectively always a +function call, is called the activation point.
  • +
+

The activation points are found using the GatherBorrows visitor. The +BorrowData then holds both the reservation and activation points for the +borrow.

+

Checking two-phase borrows

+

Two-phase borrows are treated as if they were mutable borrows with the +following exceptions:

+
    +
  1. At every location in the MIR we check if any two-phase borrows are +activated at this location. If a live two phase borrow is activated at a +location, then we check that there are no borrows that conflict with the +two-phase borrow.
  2. +
  3. At the reservation point we error if there are conflicting live mutable +borrows. And lint if there are any conflicting shared borrows.
  4. +
  5. Between the reservation and the activation point, the two-phase borrow acts +as a shared borrow. We determine (in is_active) if we're at such a point +by using the Dominators for the MIR graph.
  6. +
  7. After the activation point, the two-phase borrow acts as a mutable borrow.
  8. +
+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/borrow_check/type_check.html b/borrow_check/type_check.html new file mode 100644 index 000000000..8e3336169 --- /dev/null +++ b/borrow_check/type_check.html @@ -0,0 +1,265 @@ + + + + + + MIR type checker - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

The MIR type-check

+

A key component of the borrow check is the +MIR type-check. +This check walks the MIR and does a complete "type check" -- the same +kind you might find in any other language. In the process of doing +this type-check, we also uncover the region constraints that apply to +the program.

+

TODO -- elaborate further? Maybe? :)

+

User types

+

At the start of MIR type-check, we replace all regions in the body with new unconstrained regions. +However, this would cause us to accept the following program:

+
#![allow(unused)]
+fn main() {
+fn foo<'a>(x: &'a u32) {
+    let y: &'static u32 = x;
+}
+}
+

By erasing the lifetimes in the type of y we no longer know that it is supposed to be 'static, +ignoring the intentions of the user.

+

To deal with this we remember all places where the user explicitly mentioned a type during +HIR type-check as CanonicalUserTypeAnnotations.

+

There are two different annotations we care about:

+
    +
  • explicit type ascriptions, e.g. let y: &'static u32 results in UserType::Ty(&'static u32).
  • +
  • explicit generic arguments, e.g. x.foo<&'a u32, Vec<String>> +results in UserType::TypeOf(foo_def_id, [&'a u32, Vec<String>]).
  • +
+

As we do not want the region inference from the HIR type-check to influence MIR typeck, +we store the user type right after lowering it from the HIR. +This means that it may still contain inference variables, +which is why we are using canonical user type annotations. +We replace all inference variables with existential bound variables instead. +Something like let x: Vec<_> would therefore result in exists<T> UserType::Ty(Vec<T>).

+

A pattern like let Foo(x): Foo<&'a u32> has a user type Foo<&'a u32> but +the actual type of x should only be &'a u32. For this, we use a UserTypeProjection.

+

In the MIR, we deal with user types in two slightly different ways.

+

Given a MIR local corresponding to a variable in a pattern which has an explicit type annotation, +we require the type of that local to be equal to the type of the UserTypeProjection. +This is directly stored in the LocalDecl.

+

We also constrain the type of scrutinee expressions, e.g. the type of x in let _: &'a u32 = x;. +Here T_x only has to be a subtype of the user type, so we instead use +StatementKind::AscribeUserType for that.

+

Note that we do not directly use the user type as the MIR typechecker +doesn't really deal with type and const inference variables. We instead store the final +inferred_type from the HIR type-checker. During MIR typeck, we then replace its regions +with new nll inference vars and relate it with the actual UserType to get the correct region +constraints again.

+

After the MIR type-check, all user type annotations get discarded, as they aren't needed anymore.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/bug-fix-procedure.html b/bug-fix-procedure.html new file mode 100644 index 000000000..63115b270 --- /dev/null +++ b/bug-fix-procedure.html @@ -0,0 +1,505 @@ + + + + + + Procedures for breaking changes - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Procedures for breaking changes

+ +

This page defines the best practices procedure for making bug fixes or soundness +corrections in the compiler that can cause existing code to stop compiling. This +text is based on +RFC 1589.

+

Motivation

+

From time to time, we encounter the need to make a bug fix, soundness +correction, or other change in the compiler which will cause existing code to +stop compiling. When this happens, it is important that we handle the change in +a way that gives users of Rust a smooth transition. What we want to avoid is +that existing programs suddenly stop compiling with opaque error messages: we +would prefer to have a gradual period of warnings, with clear guidance as to +what the problem is, how to fix it, and why the change was made. This RFC +describes the procedure that we have been developing for handling breaking +changes that aims to achieve that kind of smooth transition.

+

One of the key points of this policy is that (a) warnings should be issued +initially rather than hard errors if at all possible and (b) every change that +causes existing code to stop compiling will have an associated tracking issue. +This issue provides a point to collect feedback on the results of that change. +Sometimes changes have unexpectedly large consequences or there may be a way to +avoid the change that was not considered. In those cases, we may decide to +change course and roll back the change, or find another solution (if warnings +are being used, this is particularly easy to do).

+

What qualifies as a bug fix?

+

Note that this RFC does not try to define when a breaking change is permitted. +That is already covered under RFC 1122. This document assumes that the +change being made is in accordance with those policies. Here is a summary of the +conditions from RFC 1122:

+
    +
  • Soundness changes: Fixes to holes uncovered in the type system.
  • +
  • Compiler bugs: Places where the compiler is not implementing the specified +semantics found in an RFC or lang-team decision.
  • +
  • Underspecified language semantics: Clarifications to grey areas where the +compiler behaves inconsistently and no formal behavior had been previously +decided.
  • +
+

Please see the RFC for full details!

+

Detailed design

+

The procedure for making a breaking change is as follows (each of these steps is +described in more detail below):

+
    +
  1. Do a crater run to assess the impact of the change.
  2. +
  3. Make a special tracking issue dedicated to the change.
  4. +
  5. Do not report an error right away. Instead, issue forwards-compatibility +lint warnings. +
      +
    • Sometimes this is not straightforward. See the text below for suggestions +on different techniques we have employed in the past.
    • +
    • For cases where warnings are infeasible: +
        +
      • Report errors, but make every effort to give a targeted error message +that directs users to the tracking issue
      • +
      • Submit PRs to all known affected crates that fix the issue +
          +
        • or, at minimum, alert the owners of those crates to the problem and +direct them to the tracking issue
        • +
        +
      • +
      +
    • +
    +
  6. +
  7. Once the change has been in the wild for at least one cycle, we can +stabilize the change, converting those warnings into errors.
  8. +
+

Finally, for changes to rustc_ast that will affect plugins, the general policy +is to batch these changes. That is discussed below in more detail.

+

Tracking issue

+

Every breaking change should be accompanied by a dedicated tracking issue +for that change. The main text of this issue should describe the change being +made, with a focus on what users must do to fix their code. The issue should be +approachable and practical; it may make sense to direct users to an RFC or some +other issue for the full details. The issue also serves as a place where users +can comment with questions or other concerns.

+

A template for these breaking-change tracking issues can be found +here. An example of how such an issue should look can be found +here.

+

Issuing future compatibility warnings

+

The best way to handle a breaking change is to begin by issuing +future-compatibility warnings. These are a special category of lint warning. +Adding a new future-compatibility warning can be done as follows.

+
#![allow(unused)]
+fn main() {
+// 1. Define the lint in `compiler/rustc_middle/src/lint/builtin.rs`:
+declare_lint! {
+    pub YOUR_ERROR_HERE,
+    Warn,
+    "illegal use of foo bar baz"
+}
+
+// 2. Add to the list of HardwiredLints in the same file:
+impl LintPass for HardwiredLints {
+    fn get_lints(&self) -> LintArray {
+        lint_array!(
+            ..,
+            YOUR_ERROR_HERE
+        )
+    }
+}
+
+// 3. Register the lint in `compiler/rustc_lint/src/lib.rs`:
+store.register_future_incompatible(sess, vec![
+    ...,
+    FutureIncompatibleInfo {
+        id: LintId::of(YOUR_ERROR_HERE),
+        reference: "issue #1234", // your tracking issue here!
+    },
+]);
+
+// 4. Report the lint:
+tcx.lint_node(
+    lint::builtin::YOUR_ERROR_HERE,
+    path_id,
+    binding.span,
+    format!("some helper message here"));
+}
+

Helpful techniques

+

It can often be challenging to filter out new warnings from older, pre-existing +errors. One technique that has been used in the past is to run the older code +unchanged and collect the errors it would have reported. You can then issue +warnings for any errors you would give which do not appear in that original set. +Another option is to abort compilation after the original code completes if +errors are reported: then you know that your new code will only execute when +there were no errors before.

+

Crater and crates.io

+

Crater is a bot that will compile all crates.io crates and many +public github repos with the compiler with your changes. A report will then be +generated with crates that ceased to compile with or began to compile with your +changes. Crater runs can take a few days to complete.

+

We should always do a crater run to assess impact. It is polite and considerate +to at least notify the authors of affected crates the breaking change. If we can +submit PRs to fix the problem, so much the better.

+

Is it ever acceptable to go directly to issuing errors?

+

Changes that are believed to have negligible impact can go directly to issuing +an error. One rule of thumb would be to check against crates.io: if fewer than +10 total affected projects are found (not root errors), we can move +straight to an error. In such cases, we should still make the "breaking change" +page as before, and we should ensure that the error directs users to this page. +In other words, everything should be the same except that users are getting an +error, and not a warning. Moreover, we should submit PRs to the affected +projects (ideally before the PR implementing the change lands in rustc).

+

If the impact is not believed to be negligible (e.g., more than 10 crates are +affected), then warnings are required (unless the compiler team agrees to grant +a special exemption in some particular case). If implementing warnings is not +feasible, then we should make an aggressive strategy of migrating crates before +we land the change so as to lower the number of affected crates. Here are some +techniques for approaching this scenario:

+
    +
  1. Issue warnings for subparts of the problem, and reserve the new errors for +the smallest set of cases you can.
  2. +
  3. Try to give a very precise error message that suggests how to fix the problem +and directs users to the tracking issue.
  4. +
  5. It may also make sense to layer the fix: +
      +
    • First, add warnings where possible and let those land before proceeding to +issue errors.
    • +
    • Work with authors of affected crates to ensure that corrected versions are +available before the fix lands, so that downstream users can use them.
    • +
    +
  6. +
+

Stabilization

+

After a change is made, we will stabilize the change using the same process +that we use for unstable features:

+
    +
  • +

    After a new release is made, we will go through the outstanding tracking +issues corresponding to breaking changes and nominate some of them for final +comment period (FCP).

    +
  • +
  • +

    The FCP for such issues lasts for one cycle. In the final week or two of the +cycle, we will review comments and make a final determination:

    +
      +
    • Convert to error: the change should be made into a hard error.
    • +
    • Revert: we should remove the warning and continue to allow the older code to +compile.
    • +
    • Defer: can't decide yet, wait longer, or try other strategies.
    • +
    +
  • +
+

Ideally, breaking changes should have landed on the stable branch of the +compiler before they are finalized.

+

+

Removing a lint

+

Once we have decided to make a "future warning" into a hard error, we need a PR +that removes the custom lint. As an example, here are the steps required to +remove the overlapping_inherent_impls compatibility lint. First, convert the +name of the lint to uppercase (OVERLAPPING_INHERENT_IMPLS) ripgrep through the +source for that string. We will basically by converting each place where this +lint name is mentioned (in the compiler, we use the upper-case name, and a macro +automatically generates the lower-case string; so searching for +overlapping_inherent_impls would not find much).

+
+

NOTE: these exact files don't exist anymore, but the procedure is still the same.

+
+

Remove the lint.

+

The first reference you will likely find is the lint definition in +rustc_session/src/lint/builtin.rs that resembles this:

+
#![allow(unused)]
+fn main() {
+declare_lint! {
+    pub OVERLAPPING_INHERENT_IMPLS,
+    Deny, // this may also say Warning
+    "two overlapping inherent impls define an item with the same name were erroneously allowed"
+}
+}
+

This declare_lint! macro creates the relevant data structures. Remove it. You +will also find that there is a mention of OVERLAPPING_INHERENT_IMPLS later in +the file as part of a lint_array!; remove it too.

+

Next, you see a reference to OVERLAPPING_INHERENT_IMPLS in +rustc_lint/src/lib.rs. This is defining the lint as a "future +compatibility lint":

+
#![allow(unused)]
+fn main() {
+FutureIncompatibleInfo {
+    id: LintId::of(OVERLAPPING_INHERENT_IMPLS),
+    reference: "issue #36889 <https://github.com/rust-lang/rust/issues/36889>",
+},
+}
+

Remove this too.

+

Add the lint to the list of removed lints.

+

In compiler/rustc_lint/src/lib.rs there is a list of "renamed and removed lints". +You can add this lint to the list:

+
#![allow(unused)]
+fn main() {
+store.register_removed("overlapping_inherent_impls", "converted into hard error, see #36889");
+}
+

where #36889 is the tracking issue for your lint.

+

Update the places that issue the lint

+

Finally, the last class of references you will see are the places that actually +trigger the lint itself (i.e., what causes the warnings to appear). These +you do not want to delete. Instead, you want to convert them into errors. In +this case, the add_lint call looks like this:

+
#![allow(unused)]
+fn main() {
+self.tcx.sess.add_lint(lint::builtin::OVERLAPPING_INHERENT_IMPLS,
+                       node_id,
+                       self.tcx.span_of_impl(item1).unwrap(),
+                       msg);
+}
+

We want to convert this into an error. In some cases, there may be an +existing error for this scenario. In others, we will need to allocate a +fresh diagnostic code. Instructions for allocating a fresh diagnostic +code can be found here. You may want +to mention in the extended description that the compiler behavior +changed on this point, and include a reference to the tracking issue for +the change.

+

Let's say that we've adopted E0592 as our code. Then we can change the +add_lint() call above to something like:

+
#![allow(unused)]
+fn main() {
+struct_span_code_err!(self.dcx(), self.tcx.span_of_impl(item1).unwrap(), E0592, msg)
+    .emit();
+}
+

Update tests

+

Finally, run the test suite. These should be some tests that used to reference +the overlapping_inherent_impls lint, those will need to be updated. In +general, if the test used to have #[deny(overlapping_inherent_impls)], that +can just be removed.

+
./x test
+
+

All done!

+

Open a PR. =)

+ + +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/building/bootstrapping/bootstrap-in-dependencies.html b/building/bootstrapping/bootstrap-in-dependencies.html new file mode 100644 index 000000000..6c9d6292e --- /dev/null +++ b/building/bootstrapping/bootstrap-in-dependencies.html @@ -0,0 +1,251 @@ + + + + + + cfg(bootstrap) in dependencies - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

cfg(bootstrap) in compiler dependencies

+

The rust compiler uses some external crates that can run into cyclic dependencies with the compiler itself: the compiler needs an updated crate to build, but the crate needs an updated compiler. This page describes how #[cfg(bootstrap)] can be used to break this cycle.

+

Enabling #[cfg(bootstrap)]

+

Usually the use of #[cfg(bootstrap)] in an external crate causes a warning:

+
warning: unexpected `cfg` condition name: `bootstrap`
+ --> src/main.rs:1:7
+  |
+1 | #[cfg(bootstrap)]
+  |       ^^^^^^^^^
+  |
+  = help: expected names are: `docsrs`, `feature`, and `test` and 31 more
+  = help: consider using a Cargo feature instead
+  = help: or consider adding in `Cargo.toml` the `check-cfg` lint config for the lint:
+           [lints.rust]
+           unexpected_cfgs = { level = "warn", check-cfg = ['cfg(bootstrap)'] }
+  = help: or consider adding `println!("cargo::rustc-check-cfg=cfg(bootstrap)");` to the top of the `build.rs`
+  = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
+  = note: `#[warn(unexpected_cfgs)]` on by default
+
+

This warning can be silenced by adding these lines to the project's Cargo.toml:

+
[lints.rust]
+unexpected_cfgs = { level = "warn", check-cfg = ['cfg(bootstrap)'] }
+
+

Now #[cfg(bootstrap)] can be used in the crate just like it can be in the compiler: when the bootstrap compiler is used, code annotated with #[cfg(bootstrap)] is compiled, otherwise code annotated with #[cfg(not(bootstrap))] is compiled.

+

The update dance

+

As a concrete example we'll use a change where the #[naked] attribute was made into an unsafe attribute, which caused a cyclic dependency with the compiler-builtins crate.

+

Step 1: accept the new behavior in the compiler (#139797)

+

In this example it is possible to accept both the old and new behavior at the same time by disabling an error.

+

Step 2: update the crate (#821)

+

Now in the crate, use #[cfg(bootstrap)] to use the old behavior, or #[cfg(not(bootstrap))] to use the new behavior.

+

Step 3: update the crate version used by the compiler (#139934)

+

For compiler-builtins this meant a version bump, in other cases it may be a git submodule update.

+

Step 4: remove the old behavior from the compiler (#139753)

+

The updated crate can now be used. In this example that meant that the old behavior could be removed.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/building/bootstrapping/debugging-bootstrap.html b/building/bootstrapping/debugging-bootstrap.html new file mode 100644 index 000000000..640b24b83 --- /dev/null +++ b/building/bootstrapping/debugging-bootstrap.html @@ -0,0 +1,359 @@ + + + + + + Debugging bootstrap - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Debugging bootstrap

+

There are two main ways to debug bootstrap itself. The first is through println logging, and the second is through the tracing feature.

+
+

FIXME: this section should be expanded

+
+

println logging

+

Bootstrap has extensive unstructured logging. Most of it is gated behind the --verbose flag (pass -vv for even more detail).

+

If you want to know which Step ran a command, you could invoke bootstrap like so:

+
$ ./x dist rustc --dry-run -vv
+learning about cargo
+running: RUSTC_BOOTSTRAP="1" "/home/jyn/src/rust2/build/x86_64-unknown-linux-gnu/stage0/bin/cargo" "metadata" "--format-version" "1" "--no-deps" "--manifest-path" "/home/jyn/src/rust2/Cargo.toml" (failure_mode=Exit) (created at src/bootstrap/src/core/metadata.rs:81:25, executed at src/bootstrap/src/core/metadata.rs:92:50)
+running: RUSTC_BOOTSTRAP="1" "/home/jyn/src/rust2/build/x86_64-unknown-linux-gnu/stage0/bin/cargo" "metadata" "--format-version" "1" "--no-deps" "--manifest-path" "/home/jyn/src/rust2/library/Cargo.toml" (failure_mode=Exit) (created at src/bootstrap/src/core/metadata.rs:81:25, executed at src/bootstrap/src/core/metadata.rs:92:50)
+> Assemble { target_compiler: Compiler { stage: 1, host: x86_64-unknown-linux-gnu } }
+  > Libdir { compiler: Compiler { stage: 1, host: x86_64-unknown-linux-gnu }, target: x86_64-unknown-linux-gnu }
+    > Sysroot { compiler: Compiler { stage: 1, host: x86_64-unknown-linux-gnu }, force_recompile: false }
+Removing sysroot /home/jyn/src/rust2/build/tmp-dry-run/x86_64-unknown-linux-gnu/stage1 to avoid caching bugs
+    < Sysroot { compiler: Compiler { stage: 1, host: x86_64-unknown-linux-gnu }, force_recompile: false }
+  < Libdir { compiler: Compiler { stage: 1, host: x86_64-unknown-linux-gnu }, target: x86_64-unknown-linux-gnu }
+...
+
+

This will go through all the recursive dependency calculations, where Steps internally call builder.ensure(), without actually running cargo or the compiler.

+

In some cases, even this may not be enough logging (if so, please add more!). In that case, you can omit --dry-run, which will show the normal output inline with the debug logging:

+
      c Sysroot { compiler: Compiler { stage: 0, host: x86_64-unknown-linux-gnu }, force_recompile: false }
+using sysroot /home/jyn/src/rust2/build/x86_64-unknown-linux-gnu/stage0-sysroot
+Building stage0 library artifacts (x86_64-unknown-linux-gnu)
+running: cd "/home/jyn/src/rust2" && env ... RUSTC_VERBOSE="2" RUSTC_WRAPPER="/home/jyn/src/rust2/build/bootstrap/debug/rustc" "/home/jyn/src/rust2/build/x86_64-unknown-linux-gnu/stage0/bin/cargo" "build" "--target" "x86_64-unknown-linux-gnu" "-Zbinary-dep-depinfo" "-Zroot-dir=/home/jyn/src/rust2" "-v" "-v" "--manifest-path" "/home/jyn/src/rust2/library/sysroot/Cargo.toml" "--message-format" "json-render-diagnostics"
+   0.293440230s  INFO prepare_target{force=false package_id=sysroot v0.0.0 (/home/jyn/src/rust2/library/sysroot) target="sysroot"}: cargo::core::compiler::fingerprint: fingerprint error for sysroot v0.0.0 (/home/jyn/src/rust2/library/sysroot)/Build/TargetInner { name_inferred: true, ..: lib_target("sysroot", ["lib"], "/home/jyn/src/rust2/library/sysroot/src/lib.rs", Edition2021) }
+...
+
+

In most cases this should not be necessary.

+

TODO: we should convert all this to structured logging so it's easier to control precisely.

+

tracing in bootstrap

+

Bootstrap has conditional tracing setup to provide structured logging.

+

Enabling tracing output

+

Bootstrap will conditionally build tracing support and enable tracing output if the BOOTSTRAP_TRACING env var is set.

+

Basic usage

+

Example basic usage1:

+
$ BOOTSTRAP_TRACING=bootstrap=TRACE ./x build library --stage 1
+
+

Example output2:

+
$ BOOTSTRAP_TRACING=bootstrap=TRACE ./x check src/bootstrap/
+Building bootstrap
+   Compiling bootstrap v0.0.0 (/home/joe/repos/rust/src/bootstrap)
+    Finished `dev` profile [unoptimized] target(s) in 2.74s
+ DEBUG bootstrap parsing flags
+ bootstrap::core::config::flags::Flags::parse args=["check", "src/bootstrap/"]
+ DEBUG bootstrap parsing config based on flags
+ DEBUG bootstrap creating new build based on config
+ bootstrap::Build::build
+  TRACE bootstrap setting up job management
+  TRACE bootstrap downloading rustfmt early
+   bootstrap::handling hardcoded subcommands (Format, Suggest, Perf)
+    DEBUG bootstrap not a hardcoded subcommand; returning to normal handling, cmd=Check { all_targets: false }
+  DEBUG bootstrap handling subcommand normally
+   bootstrap::executing real run
+     bootstrap::(1) executing dry-run sanity-check
+     bootstrap::(2) executing actual run
+Checking stage0 library artifacts (x86_64-unknown-linux-gnu)
+    Finished `release` profile [optimized + debuginfo] target(s) in 0.04s
+Checking stage0 compiler artifacts {rustc-main, rustc_abi, rustc_arena, rustc_ast, rustc_ast_ir, rustc_ast_lowering, rustc_ast_passes, rustc_ast_pretty, rustc_attr_data_structures, rustc_attr_parsing, rustc_baked_icu_data, rustc_borrowck, rustc_builtin_macros, rustc_codegen_llvm, rustc_codegen_ssa, rustc_const_eval, rustc_data_structures, rustc_driver, rustc_driver_impl, rustc_error_codes, rustc_error_messages, rustc_errors, rustc_expand, rustc_feature, rustc_fluent_macro, rustc_fs_util, rustc_graphviz, rustc_hir, rustc_hir_analysis, rustc_hir_pretty, rustc_hir_typeck, rustc_incremental, rustc_index, rustc_index_macros, rustc_infer, rustc_interface, rustc_lexer, rustc_lint, rustc_lint_defs, rustc_llvm, rustc_log, rustc_macros, rustc_metadata, rustc_middle, rustc_mir_build, rustc_mir_dataflow, rustc_mir_transform, rustc_monomorphize, rustc_next_trait_solver, rustc_parse, rustc_parse_format, rustc_passes, rustc_pattern_analysis, rustc_privacy, rustc_query_impl, rustc_query_system, rustc_resolve, rustc_sanitizers, rustc_serialize, rustc_session, rustc_smir, rustc_span, rustc_symbol_mangling, rustc_target, rustc_trait_selection, rustc_traits, rustc_transmute, rustc_ty_utils, rustc_type_ir, rustc_type_ir_macros, stable_mir} (x86_64-unknown-linux-gnu)
+    Finished `release` profile [optimized + debuginfo] target(s) in 0.23s
+Checking stage0 bootstrap artifacts (x86_64-unknown-linux-gnu)
+    Checking bootstrap v0.0.0 (/home/joe/repos/rust/src/bootstrap)
+    Finished `release` profile [optimized + debuginfo] target(s) in 0.64s
+  DEBUG bootstrap checking for postponed test failures from `test  --no-fail-fast`
+Build completed successfully in 0:00:08
+
+

Controlling tracing output

+

The env var BOOTSTRAP_TRACING accepts a tracing env-filter.

+

There are two orthogonal ways to control which kind of tracing logs you want:

+
    +
  1. You can specify the log level, e.g. DEBUG or TRACE.
  2. +
  3. You can also control the log target, e.g. bootstrap or bootstrap::core::config vs custom targets like CONFIG_HANDLING. +
      +
    • Custom targets are used to limit what is output when BOOTSTRAP_TRACING=bootstrap=TRACE is used, as they can be too verbose even for TRACE level by default. Currently used custom targets: +
        +
      • CONFIG_HANDLING
      • +
      +
    • +
    +
  4. +
+

The TRACE filter will enable all trace level or less verbose level tracing output.

+

You can of course combine them (custom target logs are typically gated behind TRACE log level additionally):

+
$ BOOTSTRAP_TRACING=CONFIG_HANDLING=TRACE ./x build library --stage 1
+
+
FIXME(#96176): specific tracing for compiler() vs compiler_for()
+

The additional targets COMPILER and COMPILER_FOR are used to help trace what +builder.compiler() and builder.compiler_for() does. They should be removed +if #96176 is resolved.

+

Using tracing in bootstrap

+

Both tracing::* macros and the tracing::instrument proc-macro attribute need to be gated behind tracing feature. Examples:

+
#[cfg(feature = "tracing")]
+use tracing::instrument;
+
+struct Foo;
+
+impl Step for Foo {
+    type Output = ();
+
+    #[cfg_attr(feature = "tracing", instrument(level = "trace", name = "Foo::should_run", skip_all))]
+    fn should_run(run: ShouldRun<'_>) -> ShouldRun<'_> {
+        trace!(?run, "entered Foo::should_run");
+
+        todo!()
+    }
+
+    #[cfg_attr(
+        feature = "tracing",
+        instrument(
+            level = "trace",
+            name = "Foo::run",
+            skip_all,
+            fields(compiler = ?builder.compiler),
+        ),
+    )]
+    fn run(self, builder: &Builder<'_>) -> Self::Output {
+        trace!(?run, "entered Foo::run");
+
+        todo!()
+    }    
+}
+
+

For #[instrument], it's recommended to:

+
    +
  • Gate it behind trace level for fine-granularity, possibly debug level for core functions.
  • +
  • Explicitly pick an instrumentation name via name = ".." to distinguish between e.g. run of different steps.
  • +
  • Take care to not cause diverging behavior via tracing, e.g. building extra things only when tracing infra is enabled.
  • +
+

Profiling bootstrap

+

You can use the COMMAND tracing target to trace execution of most commands spawned by bootstrap. If you also use the BOOTSTRAP_PROFILE=1 environment variable, bootstrap will generate a Chrome JSON trace file, which can be visualized in Chrome's chrome://tracing page or on https://ui.perfetto.dev.

+
$ BOOTSTRAP_TRACING=COMMAND=trace BOOTSTRAP_PROFILE=1 ./x build library
+
+

rust-analyzer integration?

+

Unfortunately, because bootstrap is a rust-analyzer.linkedProjects, you can't ask r-a to check/build bootstrap itself with tracing feature enabled to get relevant completions, due to lack of support as described in https://github.com/rust-lang/rust-analyzer/issues/8521.

+
+
  1. +

    It is not recommended to use just BOOTSTRAP_TRACING=TRACE because that will dump everything at TRACE level, including logs intentionally gated behind custom targets as they are too verbose even for TRACE level by default.

    +
  2. +
  3. +

    This output is always subject to further changes.

    +
  4. +
+
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/building/bootstrapping/how-bootstrap-does-it.html b/building/bootstrapping/how-bootstrap-does-it.html new file mode 100644 index 000000000..5612016d1 --- /dev/null +++ b/building/bootstrapping/how-bootstrap-does-it.html @@ -0,0 +1,259 @@ + + + + + + How Bootstrap does it - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

How Bootstrap does it

+

The core concept in Bootstrap is a build Step, which are chained together +by Builder::ensure. Builder::ensure takes a Step as input, and runs +the Step if and only if it has not already been run. Let's take a closer +look at Step.

+

Synopsis of Step

+

A Step represents a granular collection of actions involved in the process +of producing some artifact. It can be thought of like a rule in Makefiles. +The Step trait is defined as:

+
pub trait Step: 'static + Clone + Debug + PartialEq + Eq + Hash {
+    type Output: Clone;
+
+    const DEFAULT: bool = false;
+    const ONLY_HOSTS: bool = false;
+
+    // Required methods
+    fn run(self, builder: &Builder<'_>) -> Self::Output;
+    fn should_run(run: ShouldRun<'_>) -> ShouldRun<'_>;
+
+    // Provided method
+    fn make_run(_run: RunConfig<'_>) { ... }
+}
+
+
    +
  • run is the function that is responsible for doing the work. +Builder::ensure invokes run.
  • +
  • should_run is the command-line interface, which determines if an invocation +such as x build foo should run a given Step. In a "default" context +where no paths are provided, then make_run is called directly.
  • +
  • make_run is invoked only for things directly asked via the CLI and not +for steps which are dependencies of other steps.
  • +
+

The entry points

+

There's a couple of preliminary steps before core Bootstrap code is reached:

+
    +
  1. Shell script or make: ./x or ./x.ps1 or make
  2. +
  3. Convenience wrapper script: x.py
  4. +
  5. src/bootstrap/bootstrap.py
  6. +
  7. src/bootstrap/src/bin/main.rs
  8. +
+

See src/bootstrap/README.md +for a more specific description of the implementation details.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/building/bootstrapping/intro.html b/building/bootstrapping/intro.html new file mode 100644 index 000000000..c49de7a7f --- /dev/null +++ b/building/bootstrapping/intro.html @@ -0,0 +1,233 @@ + + + + + + Prologue - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Bootstrapping the compiler

+

Bootstrapping is the process of using a compiler to compile itself. +More accurately, it means using an older compiler to compile a newer version +of the same compiler.

+

This raises a chicken-and-egg paradox: where did the first compiler come from? +It must have been written in a different language. In Rust's case it was +written in OCaml. However, it was abandoned long ago, and the +only way to build a modern version of rustc is with a slightly less modern +version.

+

This is exactly how x.py works: it downloads the current beta release of +rustc, then uses it to compile the new compiler.

+

In this section, we give a high-level overview of +what Bootstrap does, followed by a high-level +introduction to how Bootstrap does it.

+

Additionally, see debugging bootstrap to learn +about debugging methods.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/building/bootstrapping/what-bootstrapping-does.html b/building/bootstrapping/what-bootstrapping-does.html new file mode 100644 index 000000000..306b7ab98 --- /dev/null +++ b/building/bootstrapping/what-bootstrapping-does.html @@ -0,0 +1,603 @@ + + + + + + What Bootstrapping does - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

What Bootstrapping does

+ +

Bootstrapping is the process of using a compiler to compile itself. +More accurately, it means using an older compiler to compile a newer version of +the same compiler.

+

This raises a chicken-and-egg paradox: where did the first compiler come from? +It must have been written in a different language. In Rust's case it was +written in OCaml. However, it was abandoned long ago, and the +only way to build a modern version of rustc is with a slightly less modern version.

+

This is exactly how ./x.py works: it downloads the current beta release of +rustc, then uses it to compile the new compiler.

+

Note that this documentation mostly covers user-facing information. See +bootstrap/README.md to read about bootstrap internals.

+

Stages of bootstrapping

+

Overview

+
    +
  • Stage 0: the pre-compiled compiler
  • +
  • Stage 1: from current code, by an earlier compiler
  • +
  • Stage 2: the truly current compiler
  • +
  • Stage 3: the same-result test
  • +
+

Compiling rustc is done in stages. Here's a diagram, adapted from Jynn +Nelson's talk on bootstrapping at RustConf 2022, with +detailed explanations below.

+

The A, B, C, and D show the ordering of the stages of bootstrapping. +Blue nodes are +downloaded, yellow +nodes are built with the stage0 compiler, and green nodes are built with the stage1 +compiler.

+
graph TD
+    s0c["stage0 compiler (1.86.0-beta.1)"]:::downloaded -->|A| s0l("stage0 std (1.86.0-beta.1)"):::downloaded;
+    s0c & s0l --- stepb[ ]:::empty;
+    stepb -->|B| s0ca["stage0 compiler artifacts (1.87.0-dev)"]:::with-s0c;
+    s0ca -->|copy| s1c["stage1 compiler (1.87.0-dev)"]:::with-s0c;
+    s1c -->|C| s1l("stage1 std (1.87.0-dev)"):::with-s1c;
+    s1c & s1l --- stepd[ ]:::empty;
+    stepd -->|D| s1ca["stage1 compiler artifacts (1.87.0-dev)"]:::with-s1c;
+    s1ca -->|copy| s2c["stage2 compiler"]:::with-s1c;
+
+    classDef empty width:0px,height:0px;
+    classDef downloaded fill: lightblue;
+    classDef with-s0c fill: yellow;
+    classDef with-s1c fill: lightgreen;
+
+

Stage 0: the pre-compiled compiler

+

The stage0 compiler is by default the very recent beta rustc compiler and its +associated dynamic libraries, which ./x.py will download for you. (You can +also configure ./x.py to change stage0 to something else.)

+

The precompiled stage0 compiler is then used only to compile src/bootstrap and compiler/rustc +with precompiled stage0 std.

+

Note that to build the stage1 compiler we use the precompiled stage0 compiler and std. +Therefore, to use a compiler with a std that is freshly built from the tree, you need to +build the stage2 compiler.

+

There are two concepts at play here: a compiler (with its set of dependencies) and its +'target' or 'object' libraries (std and rustc). Both are staged, but in a staggered manner.

+

Stage 1: from current code, by an earlier compiler

+

The rustc source code is then compiled with the stage0 compiler to produce the +stage1 compiler.

+

Stage 2: the truly current compiler

+

We then rebuild the compiler using stage1 compiler with in-tree std to produce the stage2 +compiler.

+

The stage1 compiler itself was built by precompiled stage0 compiler and std +and hence not by the source in your working directory. This means that the ABI +generated by the stage0 compiler may not match the ABI that would have been made +by the stage1 compiler, which can cause problems for dynamic libraries, tests +and tools using rustc_private.

+

Note that the proc_macro crate avoids this issue with a C FFI layer called +proc_macro::bridge, allowing it to be used with stage1.

+

The stage2 compiler is the one distributed with rustup and all other install +methods. However, it takes a very long time to build because one must first +build the new compiler with an older compiler and then use that to build the new +compiler with itself.

+

For development, you usually only want to use --stage 1 flag to build things. +See Building the compiler.

+

Stage 3: the same-result test

+

Stage 3 is optional. To sanity check our new compiler we can build the libraries +with the stage2 compiler. The result ought to be identical to before, unless +something has broken.

+

Building the stages

+

The script ./x tries to be helpful and pick the stage you most likely meant +for each subcommand. Here are some x commands with their default stages:

+
    +
  • check: --stage 1
  • +
  • clippy: --stage 1
  • +
  • doc: --stage 1
  • +
  • build: --stage 1
  • +
  • test: --stage 1
  • +
  • dist: --stage 2
  • +
  • install: --stage 2
  • +
  • bench: --stage 2
  • +
+

You can always override the stage by passing --stage N explicitly.

+

For more information about stages, see +below.

+

Complications of bootstrapping

+

Since the build system uses the current beta compiler to build a stage1 +bootstrapping compiler, the compiler source code can't use some features until +they reach beta (because otherwise the beta compiler doesn't support them). On +the other hand, for compiler intrinsics and internal features, the +features have to be used. Additionally, the compiler makes heavy use of +nightly features (#![feature(...)]). How can we resolve this problem?

+

There are two methods used:

+
    +
  1. The build system sets --cfg bootstrap when building with stage0, so we +can use cfg(not(bootstrap)) to only use features when built with stage1. +Setting --cfg bootstrap in this way is used for features that were just +stabilized, which require #![feature(...)] when built with stage0, but +not for stage1.
  2. +
  3. The build system sets RUSTC_BOOTSTRAP=1. This special variable means to +break the stability guarantees of Rust: allowing use of #![feature(...)] +with a compiler that's not nightly. Setting RUSTC_BOOTSTRAP=1 should +never be used except when bootstrapping the compiler.
  4. +
+

Understanding stages of bootstrap

+

Overview

+

This is a detailed look into the separate bootstrap stages.

+

The convention ./x uses is that:

+
    +
  • A --stage N flag means to run the stage N compiler (stageN/rustc).
  • +
  • A "stage N artifact" is a build artifact that is produced by the stage N +compiler.
  • +
  • The stage N+1 compiler is assembled from stage N artifacts. This process is +called uplifting.
  • +
+

Build artifacts

+

Anything you can build with ./x is a build artifact. Build artifacts +include, but are not limited to:

+
    +
  • binaries, like stage0-rustc/rustc-main
  • +
  • shared objects, like stage0-sysroot/rustlib/libstd-6fae108520cf72fe.so
  • +
  • rlib files, like stage0-sysroot/rustlib/libstd-6fae108520cf72fe.rlib
  • +
  • HTML files generated by rustdoc, like doc/std
  • +
+

Examples

+
    +
  • ./x test tests/ui means to build the stage1 compiler and run compiletest +on it. If you're working on the compiler, this is normally the test command +you want.
  • +
  • ./x test --stage 0 library/std means to run tests on the standard library +without building rustc from source ('build with stage0, then test the +artifacts'). If you're working on the standard library, this is normally the +test command you want.
  • +
  • ./x build --stage 0 means to build with the stage0 rustc.
  • +
  • ./x doc --stage 0 means to document using the stage0 rustdoc.
  • +
+

Examples of what not to do

+
    +
  • ./x test --stage 0 tests/ui is not useful: it runs tests on the beta +compiler and doesn't build rustc from source. Use test tests/ui instead, +which builds stage1 from source.
  • +
  • ./x test --stage 0 compiler/rustc builds the compiler but runs no tests: +it's running cargo test -p rustc, but cargo doesn't understand Rust's +tests. You shouldn't need to use this, use test instead (without arguments).
  • +
  • ./x build --stage 0 compiler/rustc builds the compiler, but does not build +libstd or even libcore. Most of the time, you'll want ./x build library +instead, which allows compiling programs without needing to define lang items.
  • +
+

Building vs. running

+

In short, stage 0 uses the stage0 compiler to create stage0 artifacts which +will later be uplifted to be the stage1 compiler.

+

In each stage, two major steps are performed:

+
    +
  1. std is compiled by the stage N compiler.
  2. +
  3. That std is linked to programs built by the stage N compiler, including the +stage N artifacts (stage N+1 compiler).
  4. +
+

This is somewhat intuitive if one thinks of the stage N artifacts as "just" +another program we are building with the stage N compiler: build --stage N compiler/rustc is linking the stage N artifacts to the std built by the stage +N compiler.

+

Stages and std

+

Note that there are two std libraries in play here:

+
    +
  1. The library linked to stageN/rustc, which was built by stage N-1 (stage +N-1 std)
  2. +
  3. The library used to compile programs with stageN/rustc, which was built +by stage N (stage N std).
  4. +
+

Stage N std is pretty much necessary for any useful work with the stage N +compiler. Without it, you can only compile programs with #![no_core] -- not +terribly useful!

+

The reason these need to be different is because they aren't necessarily +ABI-compatible: there could be new layout optimizations, changes to MIR, or +other changes to Rust metadata on nightly that aren't present in beta.

+

This is also where --keep-stage 1 library/std comes into play. Since most +changes to the compiler don't actually change the ABI, once you've produced a +std in stage1, you can probably just reuse it with a different compiler. If +the ABI hasn't changed, you're good to go, no need to spend time recompiling +that std. The flag --keep-stage simply instructs the build script to assumes +the previous compile is fine and copies those artifacts into the appropriate +place, skipping the cargo invocation.

+

Cross-compiling rustc

+

Cross-compiling is the process of compiling code that will run on another +architecture. For instance, you might want to build an ARM version of rustc +using an x86 machine. Building stage2 std is different when you are +cross-compiling.

+

This is because ./x uses the following logic: if HOST and TARGET are the +same, it will reuse stage1 std for stage2! This is sound because stage1 +std was compiled with the stage1 compiler, i.e. a compiler using the source +code you currently have checked out. So it should be identical (and therefore +ABI-compatible) to the std that stage2/rustc would compile.

+

However, when cross-compiling, stage1 std will only run on the host. So the +stage2 compiler has to recompile std for the target.

+

(See in the table how stage2 only builds non-host std targets).

+

What is a 'sysroot'?

+

When you build a project with cargo, the build artifacts for dependencies are +normally stored in target/debug/deps. This only contains dependencies cargo +knows about; in particular, it doesn't have the standard library. Where do std +or proc_macro come from? They come from the sysroot, the root of a number +of directories where the compiler loads build artifacts at runtime. The +sysroot doesn't just store the standard library, though - it includes anything +that needs to be loaded at runtime. That includes (but is not limited to):

+
    +
  • Libraries libstd/libtest/libproc_macro.
  • +
  • Compiler crates themselves, when using rustc_private. In-tree these are +always present; out of tree, you need to install rustc-dev with rustup.
  • +
  • Shared object file libLLVM.so for the LLVM project. In-tree this is either +built from source or downloaded from CI; out-of-tree, you need to install +llvm-tools-preview with rustup.
  • +
+

All the artifacts listed so far are compiler runtime dependencies. You can see +them with rustc --print sysroot:

+
$ ls $(rustc --print sysroot)/lib
+libchalk_derive-0685d79833dc9b2b.so  libstd-25c6acf8063a3802.so
+libLLVM-11-rust-1.50.0-nightly.so    libtest-57470d2aa8f7aa83.so
+librustc_driver-4f0cc9f50e53f0ba.so  libtracing_attributes-e4be92c35ab2a33b.so
+librustc_macros-5f0ec4a119c6ac86.so  rustlib
+
+

There are also runtime dependencies for the standard library! These are in +lib/rustlib/, not lib/ directly.

+
$ ls $(rustc --print sysroot)/lib/rustlib/x86_64-unknown-linux-gnu/lib | head -n 5
+libaddr2line-6c8e02b8fedc1e5f.rlib
+libadler-9ef2480568df55af.rlib
+liballoc-9c4002b5f79ba0e1.rlib
+libcfg_if-512eb53291f6de7e.rlib
+libcompiler_builtins-ef2408da76957905.rlib
+
+

Directory lib/rustlib/ includes libraries like hashbrown and cfg_if, which +are not part of the public API of the standard library, but are used to +implement it. Also lib/rustlib/ is part of the search path for linkers, but +lib will never be part of the search path.

+

-Z force-unstable-if-unmarked

+

Since lib/rustlib/ is part of the search path we have to be careful about +which crates are included in it. In particular, all crates except for the +standard library are built with the flag -Z force-unstable-if-unmarked, which +means that you have to use #![feature(rustc_private)] in order to load it (as +opposed to the standard library, which is always available).

+

The -Z force-unstable-if-unmarked flag has a variety of purposes to help +enforce that the correct crates are marked as unstable. It was introduced +primarily to allow rustc and the standard library to link to arbitrary crates on +crates.io which do not themselves use staged_api. rustc also relies on this +flag to mark all of its crates as unstable with the rustc_private feature so +that each crate does not need to be carefully marked with unstable.

+

This flag is automatically applied to all of rustc and the standard library by +the bootstrap scripts. This is needed because the compiler and all of its +dependencies are shipped in sysroot to all users.

+

This flag has the following effects:

+
    +
  • Marks the crate as "unstable" with the rustc_private feature if it is not +itself marked as stable or unstable.
  • +
  • Allows these crates to access other forced-unstable crates without any need +for attributes. Normally a crate would need a #![feature(rustc_private)] +attribute to use other unstable crates. However, that would make it +impossible for a crate from crates.io to access its own dependencies since +that crate won't have a feature(rustc_private) attribute, but everything +is compiled with -Z force-unstable-if-unmarked.
  • +
+

Code which does not use -Z force-unstable-if-unmarked should include the +#![feature(rustc_private)] crate attribute to access these forced-unstable +crates. This is needed for things which link rustc its self, such as MIRI or +clippy.

+

You can find more discussion about sysroots in:

+ +

Passing flags to commands invoked by bootstrap

+

Conveniently ./x allows you to pass stage-specific flags to rustc and +cargo when bootstrapping. The RUSTFLAGS_BOOTSTRAP environment variable is +passed as RUSTFLAGS to the bootstrap stage (stage0), and +RUSTFLAGS_NOT_BOOTSTRAP is passed when building artifacts for later stages. +RUSTFLAGS will work, but also affects the build of bootstrap itself, so it +will be rare to want to use it. Finally, MAGIC_EXTRA_RUSTFLAGS bypasses the +cargo cache to pass flags to rustc without recompiling all dependencies.

+
    +
  • RUSTDOCFLAGS, RUSTDOCFLAGS_BOOTSTRAP and RUSTDOCFLAGS_NOT_BOOTSTRAP are +analogous to RUSTFLAGS, but for rustdoc.
  • +
  • CARGOFLAGS will pass arguments to cargo itself (e.g. --timings). +CARGOFLAGS_BOOTSTRAP and CARGOFLAGS_NOT_BOOTSTRAP work analogously to +RUSTFLAGS_BOOTSTRAP.
  • +
  • --test-args will pass arguments through to the test runner. For tests/ui, +this is compiletest. For unit tests and doc tests this is the libtest +runner.
  • +
+

Most test runners accept --help, +which you can use to find out the options accepted by the runner.

+

Environment Variables

+

During bootstrapping, there are a bunch of compiler-internal environment +variables that are used. If you are trying to run an intermediate version of +rustc, sometimes you may need to set some of these environment variables +manually. Otherwise, you get an error like the following:

+
thread 'main' panicked at 'RUSTC_STAGE was not set: NotPresent', library/core/src/result.rs:1165:5
+
+

If ./stageN/bin/rustc gives an error about environment variables, that usually +means something is quite wrong -- such as you're trying to compile rustc or +std or something which depends on environment variables. In the unlikely case +that you actually need to invoke rustc in such a situation, you can tell the +bootstrap shim to print all env variables by adding -vvv to your x +command.

+

Finally, bootstrap makes use of the cc-rs crate which has its own +method of configuring C compilers and C flags via environment +variables.

+

Clarification of build command's stdout

+

In this part, we will investigate the build command's stdout in an action +(similar, but more detailed and complete documentation compare to topic above). +When you execute x build --dry-run command, the build output will be something +like the following:

+
Building stage0 library artifacts (x86_64-unknown-linux-gnu -> x86_64-unknown-linux-gnu)
+Copying stage0 library from stage0 (x86_64-unknown-linux-gnu -> x86_64-unknown-linux-gnu / x86_64-unknown-linux-gnu)
+Building stage0 compiler artifacts (x86_64-unknown-linux-gnu -> x86_64-unknown-linux-gnu)
+Copying stage0 rustc from stage0 (x86_64-unknown-linux-gnu -> x86_64-unknown-linux-gnu / x86_64-unknown-linux-gnu)
+Assembling stage1 compiler (x86_64-unknown-linux-gnu)
+Building stage1 library artifacts (x86_64-unknown-linux-gnu -> x86_64-unknown-linux-gnu)
+Copying stage1 library from stage1 (x86_64-unknown-linux-gnu -> x86_64-unknown-linux-gnu / x86_64-unknown-linux-gnu)
+Building stage1 tool rust-analyzer-proc-macro-srv (x86_64-unknown-linux-gnu)
+Building rustdoc for stage1 (x86_64-unknown-linux-gnu)
+
+

Building stage0 {std,compiler} artifacts

+

These steps use the provided (downloaded, usually) compiler to compile the local +Rust source into libraries we can use.

+

Copying stage0 {std,rustc}

+

This copies the library and compiler artifacts from cargo into +stage0-sysroot/lib/rustlib/{target-triple}/lib

+

Assembling stage1 compiler

+

This copies the libraries we built in "building stage0 ... artifacts" into the +stage1 compiler's lib/ directory. These are the host libraries that the +compiler itself uses to run. These aren't actually used by artifacts the new +compiler generates. This step also copies the rustc and rustdoc binaries we +generated into build/$HOST/stage/bin.

+

The stage1/bin/rustc is a fully functional compiler built with stage0 (precompiled) compiler and std. +To use a compiler built entirely from source with the in-tree compiler and std, you need to build the +stage2 compiler, which is compiled using the stage1 (in-tree) compiler and std.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/building/bootstrapping/writing-tools-in-bootstrap.html b/building/bootstrapping/writing-tools-in-bootstrap.html new file mode 100644 index 000000000..a76dabcd8 --- /dev/null +++ b/building/bootstrapping/writing-tools-in-bootstrap.html @@ -0,0 +1,241 @@ + + + + + + Writing tools in Bootstrap - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Writing tools in Bootstrap

+

There are three types of tools you can write in bootstrap:

+
    +
  • +

    Mode::ToolBootstrap +Use this for tools that don’t need anything from the in-tree compiler and can run with the stage0 rustc. +The output is placed in the "stage0-bootstrap-tools" directory. This mode is for general-purpose tools built +entirely with the stage0 compiler, including target libraries and only works for stage 0.

    +
  • +
  • +

    Mode::ToolStd +Use this for tools that rely on the locally built std. The output goes into the "stageN-tools" directory. +This mode is rarely used, mainly for compiletest which requires libtest.

    +
  • +
  • +

    Mode::ToolRustc +Use this for tools that depend on both the locally built rustc and the target std. This is more complex than +the other modes because the tool must be built with the same compiler used for rustc and placed in the "stageN-tools" +directory. When you choose Mode::ToolRustc, ToolBuild implementation takes care of this automatically. +If you need to use the builder’s compiler for something specific, you can get it from ToolBuildResult, which is +returned by the tool's Step.

    +
  • +
+

Regardless of the tool type you must return ToolBuildResult from the tool’s Step implementation and use ToolBuild inside it.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/building/build-install-distribution-artifacts.html b/building/build-install-distribution-artifacts.html new file mode 100644 index 000000000..de8d3278a --- /dev/null +++ b/building/build-install-distribution-artifacts.html @@ -0,0 +1,235 @@ + + + + + + Distribution artifacts - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Build distribution artifacts

+

You might want to build and package up the compiler for distribution. +You’ll want to run this command to do it:

+
./x dist
+
+

Install from source

+

You might want to prefer installing Rust (and tools configured in your configuration) +by building from source. If so, you want to run this command:

+
./x install
+
+

Note: If you are testing out a modification to a compiler, you might +want to build the compiler (with ./x build) then create a toolchain as +discussed in here.

+

For example, if the toolchain you created is called "foo", you would then +invoke it with rustc +foo ... (where ... represents the rest of the arguments).

+

Instead of installing Rust (and tools in your config file) globally, you can set DESTDIR +environment variable to change the installation path. If you want to set installation paths +more dynamically, you should prefer install options in your config file to achieve that.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/building/compiler-documenting.html b/building/compiler-documenting.html new file mode 100644 index 000000000..962018d4c --- /dev/null +++ b/building/compiler-documenting.html @@ -0,0 +1,255 @@ + + + + + + Building documentation - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Building documentation

+

This chapter describes how to build documentation of toolchain components, +like the standard library (std) or the compiler (rustc).

+
    +
  • +

    Document everything

    +

    This uses rustdoc from the beta toolchain, +so will produce (slightly) different output to stage 1 rustdoc, +as rustdoc is under active development:

    +
    ./x doc
    +
    +

    If you want to be sure the documentation looks the same as on CI:

    +
    ./x doc --stage 1
    +
    +

    This ensures that (current) rustdoc gets built, +then that is used to document the components.

    +
  • +
  • +

    Much like running individual tests or building specific components, +you can build just the documentation you want:

    +
    ./x doc src/doc/book
    +./x doc src/doc/nomicon
    +./x doc compiler library
    +
    +

    See the nightly docs index page for a full list of books.

    +
  • +
  • +

    Document internal rustc items

    +

    Compiler documentation is not built by default. +To create it by default with x doc, modify bootstrap.toml:

    +
    [build]
    +compiler-docs = true
    +
    +

    Note that when enabled, +documentation for internal compiler items will also be built.

    +

    NOTE: The documentation for the compiler is found at this link.

    +
  • +
+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/building/how-to-build-and-run.html b/building/how-to-build-and-run.html new file mode 100644 index 000000000..f43a48d2f --- /dev/null +++ b/building/how-to-build-and-run.html @@ -0,0 +1,555 @@ + + + + + + How to build and run the compiler - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

How to build and run the compiler

+ +

The compiler is built using a tool called x.py. You will need to +have Python installed to run it.

+

Quick Start

+

For a less in-depth quick-start of getting the compiler running, see quickstart.

+

Get the source code

+

The main repository is rust-lang/rust. This contains the compiler, +the standard library (including core, alloc, test, proc_macro, etc), +and a bunch of tools (e.g. rustdoc, the bootstrapping infrastructure, etc).

+

The very first step to work on rustc is to clone the repository:

+
git clone https://github.com/rust-lang/rust.git
+cd rust
+
+

Partial clone the repository

+

Due to the size of the repository, cloning on a slower internet connection can take a long time, +and requires disk space to store the full history of every file and directory. +Instead, it is possible to tell git to perform a partial clone, which will only fully retrieve +the current file contents, but will automatically retrieve further file contents when you, e.g., +jump back in the history. +All git commands will continue to work as usual, at the price of requiring an internet connection +to visit not-yet-loaded points in history.

+
git clone --filter='blob:none' https://github.com/rust-lang/rust.git
+cd rust
+
+
+

NOTE: This link +describes this type of checkout in more detail, and also compares it to other modes, such as +shallow cloning.

+
+

Shallow clone the repository

+

An older alternative to partial clones is to use shallow clone the repository instead. +To do so, you can use the --depth N option with the git clone command. +This instructs git to perform a "shallow clone", cloning the repository but truncating it to +the last N commits.

+

Passing --depth 1 tells git to clone the repository but truncate the history to the latest +commit that is on the master branch, which is usually fine for browsing the source code or +building the compiler.

+
git clone --depth 1 https://github.com/rust-lang/rust.git
+cd rust
+
+
+

NOTE: A shallow clone limits which git commands can be run. +If you intend to work on and contribute to the compiler, it is +generally recommended to fully clone the repository as shown above, +or to perform a partial clone instead.

+

For example, git bisect and git blame require access to the commit history, +so they don't work if the repository was cloned with --depth 1.

+
+

What is x.py?

+

x.py is the build tool for the rust repository. It can build docs, run tests, and compile the +compiler and standard library.

+

This chapter focuses on the basics to be productive, but +if you want to learn more about x.py, read this chapter.

+

Also, using x rather than x.py is recommended as:

+
+

./x is the most likely to work on every system (on Unix it runs the shell script +that does python version detection, on Windows it will probably run the +powershell script - certainly less likely to break than ./x.py which often just +opens the file in an editor).1

+
+

(You can find the platform related scripts around the x.py, like x.ps1)

+

Notice that this is not absolute. For instance, using Nushell in VSCode on Win10, +typing x or ./x still opens x.py in an editor rather than invoking the program. :)

+

In the rest of this guide, we use x rather than x.py directly. The following +command:

+
./x check
+
+

could be replaced by:

+
./x.py check
+
+

Running x.py

+

The x.py command can be run directly on most Unix systems in the following format:

+
./x <subcommand> [flags]
+
+

This is how the documentation and examples assume you are running x.py. +Some alternative ways are:

+
# On a Unix shell if you don't have the necessary `python3` command
+./x <subcommand> [flags]
+
+# In Windows Powershell (if powershell is configured to run scripts)
+./x <subcommand> [flags]
+./x.ps1 <subcommand> [flags]
+
+# On the Windows Command Prompt (if .py files are configured to run Python)
+x.py <subcommand> [flags]
+
+# You can also run Python yourself, e.g.:
+python x.py <subcommand> [flags]
+
+

On Windows, the Powershell commands may give you an error that looks like this:

+
PS C:\Users\vboxuser\rust> ./x
+./x : File C:\Users\vboxuser\rust\x.ps1 cannot be loaded because running scripts is disabled on this system. For more
+information, see about_Execution_Policies at https:/go.microsoft.com/fwlink/?LinkID=135170.
+At line:1 char:1
++ ./x
++ ~~~
+    + CategoryInfo          : SecurityError: (:) [], PSSecurityException
+    + FullyQualifiedErrorId : UnauthorizedAccess
+
+

You can avoid this error by allowing powershell to run local scripts:

+
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
+
+

Running x.py slightly more conveniently

+

There is a binary that wraps x.py called x in src/tools/x. All it does is +run x.py, but it can be installed system-wide and run from any subdirectory +of a checkout. It also looks up the appropriate version of python to use.

+

You can install it with cargo install --path src/tools/x.

+

To clarify that this is another global installed binary util, which is +similar to the one declared in section What is x.py, but +it works as an independent process to execute the x.py rather than calling the +shell to run the platform related scripts.

+

Create a bootstrap.toml

+

To start, run ./x setup and select the compiler defaults. This will do some initialization +and create a bootstrap.toml for you with reasonable defaults. If you use a different default (which +you'll likely want to do if you want to contribute to an area of rust other than the compiler, such +as rustdoc), make sure to read information about that default (located in src/bootstrap/defaults) +as the build process may be different for other defaults.

+

Alternatively, you can write bootstrap.toml by hand. See bootstrap.example.toml for all the available +settings and explanations of them. See src/bootstrap/defaults for common settings to change.

+

If you have already built rustc and you change settings related to LLVM, then you may have to +execute rm -rf build for subsequent configuration changes to take effect. Note that ./x clean will not cause a rebuild of LLVM.

+

Common x commands

+

Here are the basic invocations of the x commands most commonly used when +working on rustc, std, rustdoc, and other tools.

+
+ + + + +
CommandWhen to use it
./x checkQuick check to see if most things compile; rust-analyzer can run this automatically for you
./x buildBuilds rustc, std, and rustdoc
./x testRuns all tests
./x fmtFormats all code
+
+

As written, these commands are reasonable starting points. However, there are +additional options and arguments for each of them that are worth learning for +serious development work. In particular, ./x build and ./x test +provide many ways to compile or test a subset of the code, which can save a lot +of time.

+

Also, note that x supports all kinds of path suffixes for compiler, library, +and src/tools directories. So, you can simply run x test tidy instead of +x test src/tools/tidy. Or, x build std instead of x build library/std.

+

See the chapters on +testing and rustdoc for more details.

+

Building the compiler

+

Note that building will require a relatively large amount of storage space. +You may want to have upwards of 10 or 15 gigabytes available to build the compiler.

+

Once you've created a bootstrap.toml, you are now ready to run +x. There are a lot of options here, but let's start with what is +probably the best "go to" command for building a local compiler:

+
./x build library
+
+

This may look like it only builds the standard library, but that is not the case. +What this command does is the following:

+
    +
  • Build rustc using the stage0 compiler +
      +
    • This produces the stage1 compiler
    • +
    +
  • +
  • Build std using the stage1 compiler
  • +
+

This final product (stage1 compiler + libs built using that compiler) +is what you need to build other Rust programs (unless you use #![no_std] or +#![no_core]).

+

You will probably find that building the stage1 std is a bottleneck for you, +but fear not, there is a (hacky) workaround... +see the section on avoiding rebuilds for std.

+

Sometimes you don't need a full build. When doing some kind of +"type-based refactoring", like renaming a method, or changing the +signature of some function, you can use ./x check instead for a much faster build.

+

Note that this whole command just gives you a subset of the full rustc +build. The full rustc build (what you get with ./x build --stage 2 compiler/rustc) has quite a few more steps:

+
    +
  • Build rustc with the stage1 compiler. +
      +
    • The resulting compiler here is called the "stage2" compiler, which uses stage1 std from the previous command.
    • +
    +
  • +
  • Build librustdoc and a bunch of other things with the stage2 compiler.
  • +
+

You almost never need to do this.

+

Build specific components

+

If you are working on the standard library, you probably don't need to build +every other default component. Instead, you can build a specific component by +providing its name, like this:

+
./x build --stage 1 library
+
+

If you choose the library profile when running x setup, you can omit --stage 1 (it's the +default).

+

Creating a rustup toolchain

+

Once you have successfully built rustc, you will have created a bunch +of files in your build directory. In order to actually run the +resulting rustc, we recommend creating rustup toolchains. The first +one will run the stage1 compiler (which we built above). The second +will execute the stage2 compiler (which we did not build, but which +you will likely need to build at some point; for example, if you want +to run the entire test suite).

+
rustup toolchain link stage1 build/host/stage1
+rustup toolchain link stage2 build/host/stage2
+
+

Now you can run the rustc you built with. If you run with -vV, you +should see a version number ending in -dev, indicating a build from +your local environment:

+
$ rustc +stage1 -vV
+rustc 1.48.0-dev
+binary: rustc
+commit-hash: unknown
+commit-date: unknown
+host: x86_64-unknown-linux-gnu
+release: 1.48.0-dev
+LLVM version: 11.0
+
+

The rustup toolchain points to the specified toolchain compiled in your build directory, +so the rustup toolchain will be updated whenever x build or x test are run for +that toolchain/stage.

+

Note: the toolchain we've built does not include cargo. In this case, rustup will +fall back to using cargo from the installed nightly, beta, or stable toolchain +(in that order). If you need to use unstable cargo flags, be sure to run +rustup install nightly if you haven't already. See the +rustup documentation on custom toolchains.

+

Note: rust-analyzer and IntelliJ Rust plugin use a component called +rust-analyzer-proc-macro-srv to work with proc macros. If you intend to use a +custom toolchain for a project (e.g. via rustup override set stage1) you may +want to build this component:

+
./x build proc-macro-srv-cli
+
+

Building targets for cross-compilation

+

To produce a compiler that can cross-compile for other targets, +pass any number of target flags to x build. +For example, if your host platform is x86_64-unknown-linux-gnu +and your cross-compilation target is wasm32-wasip1, you can build with:

+
./x build --target x86_64-unknown-linux-gnu,wasm32-wasip1
+
+

Note that if you want the resulting compiler to be able to build crates that +involve proc macros or build scripts, you must be sure to explicitly build target support for the +host platform (in this case, x86_64-unknown-linux-gnu).

+

If you want to always build for other targets without needing to pass flags to x build, +you can configure this in the [build] section of your bootstrap.toml like so:

+
[build]
+target = ["x86_64-unknown-linux-gnu", "wasm32-wasip1"]
+
+

Note that building for some targets requires having external dependencies installed +(e.g. building musl targets requires a local copy of musl). +Any target-specific configuration (e.g. the path to a local copy of musl) +will need to be provided by your bootstrap.toml. +Please see bootstrap.example.toml for information on target-specific configuration keys.

+

For examples of the complete configuration necessary to build a target, please visit +the rustc book, +select any target under the "Platform Support" heading on the left, +and see the section related to building a compiler for that target. +For targets without a corresponding page in the rustc book, +it may be useful to inspect the Dockerfiles +that the Rust infrastructure itself uses to set up and configure cross-compilation.

+

If you have followed the directions from the prior section on creating a rustup toolchain, +then once you have built your compiler you will be able to use it to cross-compile like so:

+
cargo +stage1 build --target wasm32-wasip1
+
+

Other x commands

+

Here are a few other useful x commands. We'll cover some of them in detail +in other sections:

+
    +
  • Building things: +
      +
    • ./x build – builds everything using the stage 1 compiler, +not just up to std
    • +
    • ./x build --stage 2 – builds everything with the stage 2 compiler including +rustdoc
    • +
    +
  • +
  • Running tests (see the section on running tests for +more details): +
      +
    • ./x test library/std – runs the unit tests and integration tests from std
    • +
    • ./x test tests/ui – runs the ui test suite
    • +
    • ./x test tests/ui/const-generics - runs all the tests in +the const-generics/ subdirectory of the ui test suite
    • +
    • ./x test tests/ui/const-generics/const-types.rs - runs +the single test const-types.rs from the ui test suite
    • +
    +
  • +
+

Cleaning out build directories

+

Sometimes you need to start fresh, but this is normally not the case. +If you need to run this then bootstrap is most likely not acting right and +you should file a bug as to what is going wrong. If you do need to clean +everything up then you only need to run one command!

+
./x clean
+
+

rm -rf build works too, but then you have to rebuild LLVM, which can take +a long time even on fast computers.

+

Remarks on disk space

+

Building the compiler (especially if beyond stage 1) can require significant amounts of free disk +space, possibly around 100GB. This is compounded if you have a separate build directory for +rust-analyzer (e.g. build-rust-analyzer). This is easy to hit with dev-desktops which have a set +disk +quota +for each user, but this also applies to local development as well. Occasionally, you may need to:

+
    +
  • Remove build/ directory.
  • +
  • Remove build-rust-analyzer/ directory (if you have a separate rust-analyzer build directory).
  • +
  • Uninstall unnecessary toolchains if you use cargo-bisect-rustc. You can check which toolchains +are installed with rustup toolchain list.
  • +
+
+
  1. +

    issue#1707

    +
  2. +
+
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/building/new-target.html b/building/new-target.html new file mode 100644 index 000000000..293238b74 --- /dev/null +++ b/building/new-target.html @@ -0,0 +1,361 @@ + + + + + + Adding a new target - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Adding a new target

+

These are a set of steps to add support for a new target. There are +numerous end states and paths to get there, so not all sections may be +relevant to your desired goal.

+

See also the associated documentation in the target tier policy.

+ +

Specifying a new LLVM

+

For very new targets, you may need to use a different fork of LLVM +than what is currently shipped with Rust. In that case, navigate to +the src/llvm-project git submodule (you might need to run ./x check at least once so the submodule is updated), check out the +appropriate commit for your fork, then commit that new submodule +reference in the main Rust repository.

+

An example would be:

+
cd src/llvm-project
+git remote add my-target-llvm some-llvm-repository
+git checkout my-target-llvm/my-branch
+cd ..
+git add llvm-project
+git commit -m 'Use my custom LLVM'
+
+

Using pre-built LLVM

+

If you have a local LLVM checkout that is already built, you may be +able to configure Rust to treat your build as the system LLVM to avoid +redundant builds.

+

You can tell Rust to use a pre-built version of LLVM using the target section +of bootstrap.toml:

+
[target.x86_64-unknown-linux-gnu]
+llvm-config = "/path/to/llvm/llvm-7.0.1/bin/llvm-config"
+
+

If you are attempting to use a system LLVM, we have observed the following paths +before, though they may be different from your system:

+
    +
  • /usr/bin/llvm-config-8
  • +
  • /usr/lib/llvm-8/bin/llvm-config
  • +
+

Note that you need to have the LLVM FileCheck tool installed, which is used +for codegen tests. This tool is normally built with LLVM, but if you use your +own preinstalled LLVM, you will need to provide FileCheck in some other way. +On Debian-based systems, you can install the llvm-N-tools package (where N +is the LLVM version number, e.g. llvm-8-tools). Alternately, you can specify +the path to FileCheck with the llvm-filecheck config item in bootstrap.toml +or you can disable codegen test with the codegen-tests item in bootstrap.toml.

+

Creating a target specification

+

You should start with a target JSON file. You can see the specification +for an existing target using --print target-spec-json:

+
rustc -Z unstable-options --target=wasm32-unknown-unknown --print target-spec-json
+
+

Save that JSON to a file and modify it as appropriate for your target.

+

Adding a target specification

+

Once you have filled out a JSON specification and been able to compile +somewhat successfully, you can copy the specification into the +compiler itself.

+

You will need to add a line to the big table inside of the +supported_targets macro in the rustc_target::spec module. You +will then add a corresponding file for your new target containing a +target function.

+

Look for existing targets to use as examples.

+

After adding your target to the rustc_target crate you may want to add +core, std, ... with support for your new target. In that case you will +probably need access to some target_* cfg. Unfortunately when building with +stage0 (a precompiled compiler), you'll get an error that the target cfg is +unexpected because stage0 doesn't know about the new target specification and +we pass --check-cfg in order to tell it to check.

+

To fix the errors you will need to manually add the unexpected value to the +different Cargo.toml in library/{std,alloc,core}/Cargo.toml. Here is an +example for adding NEW_TARGET_ARCH as target_arch:

+

library/std/Cargo.toml:

+
  [lints.rust.unexpected_cfgs]
+  level = "warn"
+  check-cfg = [
+      'cfg(bootstrap)',
+-      'cfg(target_arch, values("xtensa"))',
++      # #[cfg(bootstrap)] NEW_TARGET_ARCH
++      'cfg(target_arch, values("xtensa", "NEW_TARGET_ARCH"))',
+
+

To use this target in bootstrap, we need to explicitly add the target triple to the STAGE0_MISSING_TARGETS +list in src/bootstrap/src/core/sanity.rs. This is necessary because the default compiler bootstrap uses does +not recognize the new target we just added. Therefore, it should be added to STAGE0_MISSING_TARGETS so that the +bootstrap is aware that this target is not yet supported by the stage0 compiler.

+
const STAGE0_MISSING_TARGETS: &[&str] = &[
++   "NEW_TARGET_TRIPLE"
+];
+
+

Patching crates

+

You may need to make changes to crates that the compiler depends on, +such as libc or cc. If so, you can use Cargo's +[patch] ability. For example, if you want to use an +unreleased version of libc, you can add it to the top-level +Cargo.toml file:

+
diff --git a/Cargo.toml b/Cargo.toml
+index 1e83f05e0ca..4d0172071c1 100644
+--- a/Cargo.toml
++++ b/Cargo.toml
+@@ -113,6 +113,8 @@ cargo-util = { path = "src/tools/cargo/crates/cargo-util" }
+ [patch.crates-io]
++libc = { git = "https://github.com/rust-lang/libc", rev = "0bf7ce340699dcbacabdf5f16a242d2219a49ee0" }
+
+ # See comments in `src/tools/rustc-workspace-hack/README.md` for what's going on
+ # here
+ rustc-workspace-hack = { path = 'src/tools/rustc-workspace-hack' }
+
+

After this, run cargo update -p libc to update the lockfiles.

+

Beware that if you patch to a local path dependency, this will enable +warnings for that dependency. Some dependencies are not warning-free, and due +to the deny-warnings setting in bootstrap.toml, the build may suddenly start +to fail. +To work around warnings, you may want to:

+
    +
  • Modify the dependency to remove the warnings
  • +
  • Or for local development purposes, suppress the warnings by setting deny-warnings = false in bootstrap.toml.
  • +
+
# bootstrap.toml
+[rust]
+deny-warnings = false
+
+

Cross-compiling

+

Once you have a target specification in JSON and in the code, you can +cross-compile rustc:

+
DESTDIR=/path/to/install/in \
+./x install -i --stage 1 --host aarch64-apple-darwin.json --target aarch64-apple-darwin \
+compiler/rustc library/std
+
+

If your target specification is already available in the bootstrap +compiler, you can use it instead of the JSON file for both arguments.

+

Promoting a target from tier 2 (target) to tier 2 (host)

+

There are two levels of tier 2 targets: +a) Targets that are only cross-compiled (rustup target add) +b) Targets that have a native toolchain (rustup toolchain install)

+

For an example of promoting a target from cross-compiled to native, +see #75914.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/building/optimized-build.html b/building/optimized-build.html new file mode 100644 index 000000000..c251b7e98 --- /dev/null +++ b/building/optimized-build.html @@ -0,0 +1,318 @@ + + + + + + Optimized build - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Optimized build of the compiler

+ +

There are multiple additional build configuration options and techniques that can be used to compile a +build of rustc that is as optimized as possible (for example when building rustc for a Linux +distribution). The status of these configuration options for various Rust targets is tracked here. +This page describes how you can use these approaches when building rustc yourself.

+ +

Link-time optimization is a powerful compiler technique that can increase program performance. To +enable (Thin-)LTO when building rustc, set the rust.lto config option to "thin" +in bootstrap.toml:

+
[rust]
+lto = "thin"
+
+
+

Note that LTO for rustc is currently supported and tested only for +the x86_64-unknown-linux-gnu target. Other targets may work, but no guarantees are provided. +Notably, LTO-optimized rustc currently produces miscompilations on Windows.

+
+

Enabling LTO on Linux has produced speed-ups by up to 10%.

+

Memory allocator

+

Using a different memory allocator for rustc can provide significant performance benefits. If you +want to enable the jemalloc allocator, you can set the rust.jemalloc option to true +in bootstrap.toml:

+
[rust]
+jemalloc = true
+
+
+

Note that this option is currently only supported for Linux and macOS targets.

+
+

Codegen units

+

Reducing the amount of codegen units per rustc crate can produce a faster build of the compiler. +You can modify the number of codegen units for rustc and libstd in bootstrap.toml with the +following options:

+
[rust]
+codegen-units = 1
+codegen-units-std = 1
+
+

Instruction set

+

By default, rustc is compiled for a generic (and conservative) instruction set architecture +(depending on the selected target), to make it support as many CPUs as possible. If you want to +compile rustc for a specific instruction set architecture, you can set the target_cpu compiler +option in RUSTFLAGS:

+
RUSTFLAGS="-C target_cpu=x86-64-v3" ./x build ...
+
+

If you also want to compile LLVM for a specific instruction set, you can set llvm flags +in bootstrap.toml:

+
[llvm]
+cxxflags = "-march=x86-64-v3"
+cflags = "-march=x86-64-v3"
+
+

Profile-guided optimization

+

Applying profile-guided optimizations (or more generally, feedback-directed optimizations) can +produce a large increase to rustc performance, by up to 15% (1, 2). However, these techniques +are not simply enabled by a configuration option, but rather they require a complex build workflow +that compiles rustc multiple times and profiles it on selected benchmarks.

+

There is a tool called opt-dist that is used to optimize rustc with PGO (profile-guided +optimizations) and BOLT (a post-link binary optimizer) for builds distributed to end users. You +can examine the tool, which is located in src/tools/opt-dist, and build a custom PGO build +workflow based on it, or try to use it directly. Note that the tool is currently quite hardcoded to +the way we use it in Rust's continuous integration workflows, and it might require some custom +changes to make it work in a different environment.

+

To use the tool, you will need to provide some external dependencies:

+
    +
  • A Python3 interpreter (for executing x.py).
  • +
  • Compiled LLVM toolchain, with the llvm-profdata binary. Optionally, if you want to use BOLT, +the llvm-bolt and +merge-fdata binaries have to be available in the toolchain.
  • +
+

These dependencies are provided to opt-dist by an implementation of the Environment struct. +It specifies directories where will the PGO/BOLT pipeline take place, and also external dependencies +like Python or LLVM.

+

Here is an example of how can opt-dist be used locally (outside of CI):

+
    +
  1. Enable metrics in your bootstrap.toml file, because opt-dist expects it to be enabled: +
    [build]
    +metrics = true
    +
    +
  2. +
  3. Build the tool with the following command: +
    ./x build tools/opt-dist
    +
    +
  4. +
  5. Run the tool with the local mode and provide necessary parameters: +
    ./build/host/stage0-tools-bin/opt-dist local \
    +  --target-triple <target> \ # select target, e.g. "x86_64-unknown-linux-gnu"
    +  --checkout-dir <path>    \ # path to rust checkout, e.g. "."
    +  --llvm-dir <path>        \ # path to built LLVM toolchain, e.g. "/foo/bar/llvm/install"
    +  -- python3 x.py dist       # pass the actual build command
    +
    +You can run --help to see further parameters that you can modify.
  6. +
+
+

Note: if you want to run the actual CI pipeline, instead of running opt-dist locally, +you can execute cargo run --manifest-path src/ci/citool/Cargo.toml run-local dist-x86_64-linux.

+
+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/building/prerequisites.html b/building/prerequisites.html new file mode 100644 index 000000000..acc0b7256 --- /dev/null +++ b/building/prerequisites.html @@ -0,0 +1,249 @@ + + + + + + Prerequisites - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Prerequisites

+

Dependencies

+

See the rust-lang/rust INSTALL.

+

Hardware

+

You will need an internet connection to build. The bootstrapping process +involves updating git submodules and downloading a beta compiler. It doesn't +need to be super fast, but that can help.

+

There are no strict hardware requirements, but building the compiler is +computationally expensive, so a beefier machine will help, and I wouldn't +recommend trying to build on a Raspberry Pi! We recommend the following.

+
    +
  • 30GB+ of free disk space. Otherwise, you will have to keep +clearing incremental caches. More space is better, the compiler is a bit of a +hog; it's a problem we are aware of.
  • +
  • 8GB+ RAM
  • +
  • 2+ cores. Having more cores really helps. 10 or 20 or more is not too many!
  • +
+

Beefier machines will lead to much faster builds. If your machine is not very +powerful, a common strategy is to only use ./x check on your local machine +and let the CI build test your changes when you push to a PR branch.

+

Building the compiler takes more than half an hour on my moderately powerful +laptop. We suggest downloading LLVM from CI so you don't have to build it from source +(see here).

+

Like cargo, the build system will use as many cores as possible. Sometimes +this can cause you to run low on memory. You can use -j to adjust the number +of concurrent jobs. If a full build takes more than ~45 minutes to an hour, you +are probably spending most of the time swapping memory in and out; try using +-j1.

+

If you don't have too much free disk space, you may want to turn off +incremental compilation (see here). This will make compilation take +longer (especially after a rebase), but will save a ton of space from the +incremental caches.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/building/quickstart.html b/building/quickstart.html new file mode 100644 index 000000000..6b2241a64 --- /dev/null +++ b/building/quickstart.html @@ -0,0 +1,268 @@ + + + + + + Quickstart - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Quickstart

+

This is a quickstart guide about getting the compiler running. For more +information on the individual steps, see the other pages in this chapter.

+

First, clone the repository:

+
git clone https://github.com/rust-lang/rust.git
+cd rust
+
+

When building the compiler, we don't use cargo directly, instead we use a +wrapper called "x". It is invoked with ./x.

+

We need to create a configuration for the build. Use ./x setup to create a +good default.

+
./x setup
+
+

Then, we can build the compiler. Use ./x build to build the compiler, standard +library and a few tools. You can also ./x check to just check it. All these +commands can take specific components/paths as arguments, for example ./x check compiler to just check the compiler.

+
./x build
+
+
+

When doing a change to the compiler that does not affect the way it compiles +the standard library (so for example, a change to an error message), use +--keep-stage-std 1 to avoid recompiling it.

+
+

After building the compiler and standard library, you now have a working +compiler toolchain. You can use it with rustup by linking it.

+
rustup toolchain link stage1 build/host/stage1
+
+

Now you have a toolchain called stage1 linked to your build. You can use it to +test the compiler.

+
rustc +stage1 testfile.rs
+
+

After doing a change, you can run the compiler test suite with ./x test.

+

./x test runs the full test suite, which is slow and rarely what you want. +Usually, ./x test tests/ui is what you want after a compiler change, testing +all UI tests that invoke the compiler on a specific test file +and check the output.

+
./x test tests/ui
+
+

Use --bless if you've made a change and want to update the .stderr files +with the new output.

+
+

./x suggest can also be helpful for suggesting which tests to run after a +change.

+
+

Congrats, you are now ready to make a change to the compiler! If you have more +questions, the full chapter might contain the +answers, and if it doesn't, feel free to ask for help on +Zulip.

+

If you use VSCode, Vim, Emacs or Helix, ./x setup will ask you if you want to +set up the editor config. For more information, check out suggested +workflows.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/building/suggested.html b/building/suggested.html new file mode 100644 index 000000000..0051c7d7f --- /dev/null +++ b/building/suggested.html @@ -0,0 +1,587 @@ + + + + + + Suggested workflows - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Suggested workflows

+

The full bootstrapping process takes quite a while. Here are some suggestions to +make your life easier.

+ +

Installing a pre-push hook

+

CI will automatically fail your build if it doesn't pass tidy, our internal +tool for ensuring code quality. If you'd like, you can install a Git +hook that will +automatically run ./x test tidy on each push, to ensure your code is up to +par. If the hook fails then run ./x test tidy --bless and commit the changes. +If you decide later that the pre-push behavior is undesirable, you can delete +the pre-push file in .git/hooks.

+

A prebuilt git hook lives at src/etc/pre-push.sh. It can be copied into +your .git/hooks folder as pre-push (without the .sh extension!).

+

You can also install the hook as a step of running ./x setup!

+

Config extensions

+

When working on different tasks, you might need to switch between different bootstrap configurations. +Sometimes you may want to keep an old configuration for future use. But saving raw config values in +random files and manually copying and pasting them can quickly become messy, especially if you have a +long history of different configurations.

+

To simplify managing multiple configurations, you can create config extensions.

+

For example, you can create a simple config file named cross.toml:

+
[build]
+build = "x86_64-unknown-linux-gnu"
+host = ["i686-unknown-linux-gnu"]
+target = ["i686-unknown-linux-gnu"]
+
+
+[llvm]
+download-ci-llvm = false
+
+[target.x86_64-unknown-linux-gnu]
+llvm-config = "/path/to/llvm-19/bin/llvm-config"
+
+

Then, include this in your bootstrap.toml:

+
include = ["cross.toml"]
+
+

You can also include extensions within extensions recursively.

+

Note: In the include field, the overriding logic follows a right-to-left order. For example, +in include = ["a.toml", "b.toml"], extension b.toml overrides a.toml. Also, parent extensions +always overrides the inner ones.

+

Configuring rust-analyzer for rustc

+

Checking the "library" tree

+

Checking the "library" tree requires a stage1 compiler, which can be a heavy process on some computers. +For this reason, bootstrap has a flag called --skip-std-check-if-no-download-rustc that skips checking the +"library" tree if rust.download-rustc isn't available. If you want to avoid putting a heavy load on your computer +with rust-analyzer, you can add the --skip-std-check-if-no-download-rustc flag to your ./x check command in +the rust-analyzer configuration.

+

Project-local rust-analyzer setup

+

rust-analyzer can help you check and format your code whenever you save a +file. By default, rust-analyzer runs the cargo check and rustfmt commands, +but you can override these commands to use more adapted versions of these tools +when hacking on rustc. With custom setup, rust-analyzer can use ./x check +to check the sources, and the stage 0 rustfmt to format them.

+

The default rust-analyzer.check.overrideCommand command line will check all +the crates and tools in the repository. If you are working on a specific part, +you can override the command to only check the part you are working on to save +checking time. For example, if you are working on the compiler, you can override +the command to x check compiler --json-output to only check the compiler part. +You can run x check --help --verbose to see the available parts.

+

Running ./x setup editor will prompt you to create a project-local LSP config +file for one of the supported editors. You can also create the config file as a +step of running ./x setup.

+

Using a separate build directory for rust-analyzer

+

By default, when rust-analyzer runs a check or format command, it will share +the same build directory as manual command-line builds. This can be inconvenient +for two reasons:

+
    +
  • Each build will lock the build directory and force the other to wait, so it +becomes impossible to run command-line builds while rust-analyzer is running +commands in the background.
  • +
  • There is an increased risk of one of the builds deleting previously-built +artifacts due to conflicting compiler flags or other settings, forcing +additional rebuilds in some cases.
  • +
+

To avoid these problems:

+
    +
  • Add --build-dir=build/rust-analyzer to all of the custom x commands in +your editor's rust-analyzer configuration. +(Feel free to choose a different directory name if desired.)
  • +
  • Modify the rust-analyzer.rustfmt.overrideCommand setting so that it points +to the copy of rustfmt in that other build directory.
  • +
  • Modify the rust-analyzer.procMacro.server setting so that it points to the +copy of rust-analyzer-proc-macro-srv in that other build directory.
  • +
+

Using separate build directories for command-line builds and rust-analyzer +requires extra disk space.

+

Visual Studio Code

+

Selecting vscode in ./x setup editor will prompt you to create a +.vscode/settings.json file which will configure Visual Studio code. The +recommended rust-analyzer settings live at +src/etc/rust_analyzer_settings.json.

+

If running ./x check on save is inconvenient, in VS Code you can use a Build +Task instead:

+
// .vscode/tasks.json
+{
+    "version": "2.0.0",
+    "tasks": [
+        {
+            "label": "./x check",
+            "command": "./x check",
+            "type": "shell",
+            "problemMatcher": "$rustc",
+            "presentation": { "clear": true },
+            "group": { "kind": "build", "isDefault": true }
+        }
+    ]
+}
+
+

Neovim

+

For Neovim users, there are a few options. The +easiest way is by using neoconf.nvim, +which allows for project-local configuration files with the native LSP. The +steps for how to use it are below. Note that they require rust-analyzer to +already be configured with Neovim. Steps for this can be found +here.

+
    +
  1. First install the plugin. This can be done by following the steps in the +README.
  2. +
  3. Run ./x setup editor, and select vscode to create a +.vscode/settings.json file. neoconf is able to read and update +rust-analyzer settings automatically when the project is opened when this +file is detected.
  4. +
+

If you're using coc.nvim, you can run ./x setup editor and select vim to +create a .vim/coc-settings.json. The settings can be edited with +:CocLocalConfig. The recommended settings live at +src/etc/rust_analyzer_settings.json.

+

Another way is without a plugin, and creating your own logic in your +configuration. The following code will work for any checkout of rust-lang/rust (newer than Febuary 2025):

+
local function expand_config_variables(option)
+    local var_placeholders = {
+        ['${workspaceFolder}'] = function(_)
+            return vim.lsp.buf.list_workspace_folders()[1]
+        end,
+    }
+
+    if type(option) == "table" then
+        local mt = getmetatable(option)
+        local result = {}
+        for k, v in pairs(option) do
+            result[expand_config_variables(k)] = expand_config_variables(v)
+        end
+        return setmetatable(result, mt)
+    end
+    if type(option) ~= "string" then
+        return option
+    end
+    local ret = option
+    for key, fn in pairs(var_placeholders) do
+        ret = ret:gsub(key, fn)
+    end
+    return ret
+end
+lspconfig.rust_analyzer.setup {
+    root_dir = function()
+        local default = lspconfig.rust_analyzer.config_def.default_config.root_dir()
+        -- the default root detection uses the cargo workspace root.
+        -- but for rust-lang/rust, the standard library is in its own workspace.
+        -- use the git root instead.
+        local compiler_config = vim.fs.joinpath(default, "../src/bootstrap/defaults/config.compiler.toml")
+        if vim.fs.basename(default) == "library" and vim.uv.fs_stat(compiler_config) then
+            return vim.fs.dirname(default)
+        end
+        return default
+    end,
+    on_init = function(client)
+        local path = client.workspace_folders[1].name
+        local config = vim.fs.joinpath(path, "src/etc/rust_analyzer_zed.json")
+        if vim.uv.fs_stat(config) then
+            -- load rust-lang/rust settings
+            local file = io.open(config)
+            local json = vim.json.decode(file:read("*a"))
+            client.config.settings["rust-analyzer"] = expand_config_variables(json.lsp["rust-analyzer"].initialization_options)
+            client.notify("workspace/didChangeConfiguration", { settings = client.config.settings })
+        end
+        return true
+    end
+}
+
+

If you would like to use the build task that is described above, you may either +make your own command in your config, or you can install a plugin such as +overseer.nvim that can read +VSCode's task.json +files, +and follow the same instructions as above.

+

Emacs

+

Emacs provides support for rust-analyzer with project-local configuration +through Eglot. +Steps for setting up Eglot with rust-analyzer can be found +here. +Having set up Emacs & Eglot for Rust development in general, you can run +./x setup editor and select emacs, which will prompt you to create +.dir-locals.el with the recommended configuration for Eglot. +The recommended settings live at src/etc/rust_analyzer_eglot.el. +For more information on project-specific Eglot configuration, consult the +manual.

+

Helix

+

Helix comes with built-in LSP and rust-analyzer support. +It can be configured through languages.toml, as described +here. +You can run ./x setup editor and select helix, which will prompt you to +create languages.toml with the recommended configuration for Helix. The +recommended settings live at src/etc/rust_analyzer_helix.toml.

+

Zed

+

Zed comes with built-in LSP and rust-analyzer support. +It can be configured through .zed/settings.json, as described +here. Selecting zed +in ./x setup editor will prompt you to create a .zed/settings.json +file which will configure Zed with the recommended configuration. The +recommended rust-analyzer settings live +at src/etc/rust_analyzer_zed.json.

+

Check, check, and check again

+

When doing simple refactoring, it can be useful to run ./x check +continuously. If you set up rust-analyzer as described above, this will be +done for you every time you save a file. Here you are just checking that the +compiler can build, but often that is all you need (e.g., when renaming a +method). You can then run ./x build when you actually need to run tests.

+

In fact, it is sometimes useful to put off tests even when you are not 100% sure +the code will work. You can then keep building up refactoring commits and only +run the tests at some later time. You can then use git bisect to track down +precisely which commit caused the problem. A nice side-effect of this style +is that you are left with a fairly fine-grained set of commits at the end, all +of which build and pass tests. This often helps reviewing.

+

x suggest

+

The x suggest subcommand suggests (and runs) a subset of the extensive +rust-lang/rust tests based on files you have changed. This is especially +useful for new contributors who have not mastered the arcane x flags yet and +more experienced contributors as a shorthand for reducing mental effort. In all +cases it is useful not to run the full tests (which can take on the order of +tens of minutes) and just run a subset which are relevant to your changes. For +example, running tidy and linkchecker is useful when editing Markdown files, +whereas UI tests are much less likely to be helpful. While x suggest is a +useful tool, it does not guarantee perfect coverage (just as PR CI isn't a +substitute for bors). See the dedicated chapter for +more information and contribution instructions.

+

Please note that x suggest is in a beta state currently and the tests that it +will suggest are limited.

+

Configuring rustup to use nightly

+

Some parts of the bootstrap process uses pinned, nightly versions of tools like +rustfmt. To make things like cargo fmt work correctly in your repo, run

+
cd <path to rustc repo>
+rustup override set nightly
+
+

after installing a nightly toolchain with rustup. Don't forget to do this +for all directories you have setup a worktree for. You may need to use the +pinned nightly version from src/stage0, but often the normal nightly channel +will work.

+

Note see the section on vscode for how to configure it with this real +rustfmt x uses, and the section on rustup for how to setup rustup +toolchain for your bootstrapped compiler

+

Note This does not allow you to build rustc with cargo directly. You +still have to use x to work on the compiler or standard library, this just +lets you use cargo fmt.

+

Faster Builds with CI-rustc

+

If you are not working on the compiler, you often don't need to build the compiler tree. +For example, you can skip building the compiler and only build the library tree or the +tools under src/tools. To achieve that, you have to enable this by setting the download-rustc +option in your configuration. This tells bootstrap to use the latest nightly compiler for stage > 0 +steps, meaning it will have two precompiled compilers: stage0 compiler and download-rustc compiler +for stage > 0 steps. This way, it will never need to build the in-tree compiler. As a result, your +build time will be significantly reduced by not building the in-tree compiler.

+

Using incremental compilation

+

You can further enable the --incremental flag to save additional time in +subsequent rebuilds:

+
./x test tests/ui --incremental --test-args issue-1234
+
+

If you don't want to include the flag with every command, you can enable it in +the bootstrap.toml:

+
[rust]
+incremental = true
+
+

Note that incremental compilation will use more disk space than usual. If disk +space is a concern for you, you might want to check the size of the build +directory from time to time.

+

Fine-tuning optimizations

+

Setting optimize = false makes the compiler too slow for tests. However, to +improve the test cycle, you can disable optimizations selectively only for the +crates you'll have to rebuild +(source). +For example, when working on rustc_mir_build, the rustc_mir_build and +rustc_driver crates take the most time to incrementally rebuild. You could +therefore set the following in the root Cargo.toml:

+
[profile.release.package.rustc_mir_build]
+opt-level = 0
+[profile.release.package.rustc_driver]
+opt-level = 0
+
+

Working on multiple branches at the same time

+

Working on multiple branches in parallel can be a little annoying, since +building the compiler on one branch will cause the old build and the incremental +compilation cache to be overwritten. One solution would be to have multiple +clones of the repository, but that would mean storing the Git metadata multiple +times, and having to update each clone individually.

+

Fortunately, Git has a better solution called worktrees. This lets you create +multiple "working trees", which all share the same Git database. Moreover, +because all of the worktrees share the same object database, if you update a +branch (e.g. master) in any of them, you can use the new commits from any of the +worktrees. One caveat, though, is that submodules do not get shared. They will +still be cloned multiple times.

+

Given you are inside the root directory for your Rust repository, you can create +a "linked working tree" in a new "rust2" directory by running the following +command:

+
git worktree add ../rust2
+
+

Creating a new worktree for a new branch based on master looks like:

+
git worktree add -b my-feature ../rust2 master
+
+

You can then use that rust2 folder as a separate workspace for modifying and +building rustc!

+

Working with nix

+

Several nix configurations are defined in src/tools/nix-dev-shell.

+

If you're using direnv, you can create a symbol link to src/tools/nix-dev-shell/envrc-flake or src/tools/nix-dev-shell/envrc-shell

+
ln -s ./src/tools/nix-dev-shell/envrc-flake ./.envrc # Use flake
+
+

or

+
ln -s ./src/tools/nix-dev-shell/envrc-shell ./.envrc # Use nix-shell
+
+

Note

+

Note that when using nix on a not-NixOS distribution, it may be necessary to set +patch-binaries-for-nix = true in bootstrap.toml. Bootstrap tries to detect +whether it's running in nix and enable patching automatically, but this +detection can have false negatives.

+

You can also use your nix shell to manage bootstrap.toml:

+
let
+  config = pkgs.writeText "rustc-config" ''
+    # Your bootstrap.toml content goes here
+  ''
+pkgs.mkShell {
+  /* ... */
+  # This environment variable tells bootstrap where our bootstrap.toml is.
+  RUST_BOOTSTRAP_CONFIG = config;
+}
+
+

Shell Completions

+

If you use Bash, Zsh, Fish or PowerShell, you can find automatically-generated shell +completion scripts for x.py in +src/etc/completions.

+

You can use source ./src/etc/completions/x.py.<extension> to load completions +for your shell of choice, or & .\src\etc\completions\x.py.ps1 for PowerShell. +Adding this to your shell's startup script (e.g. .bashrc) will automatically +load this completion.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/cli.html b/cli.html new file mode 100644 index 000000000..35b723acd --- /dev/null +++ b/cli.html @@ -0,0 +1,242 @@ + + + + + + Command-line arguments - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Command-line Arguments

+

Command-line flags are documented in the rustc book. All stable +flags should be documented there. Unstable flags should be documented in the +unstable book.

+

See the forge guide for new options for details on the procedure for +adding a new command-line argument.

+

Guidelines

+
    +
  • Flags should be orthogonal to each other. For example, if we'd have a +json-emitting variant of multiple actions foo and bar, an additional +--json flag is better than adding --foo-json and --bar-json.
  • +
  • Avoid flags with the no- prefix. Instead, use the parse_bool function, +such as -C embed-bitcode=no.
  • +
  • Consider the behavior if the flag is passed multiple times. In some +situations, the values should be accumulated (in order!). In other +situations, subsequent flags should override previous flags (for example, +the lint-level flags). And some flags (like -o) should generate an error +if it is too ambiguous what multiple flags would mean.
  • +
  • Always give options a long descriptive name, if only for more understandable +compiler scripts.
  • +
  • The --verbose flag is for adding verbose information to rustc +output. For example, using it with the --version +flag gives information about the hashes of the compiler code.
  • +
  • Experimental flags and options must be guarded behind the -Z unstable-options flag.
  • +
+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/clipboard.min.js b/clipboard.min.js new file mode 100644 index 000000000..02c549e35 --- /dev/null +++ b/clipboard.min.js @@ -0,0 +1,7 @@ +/*! + * clipboard.js v2.0.4 + * https://zenorocha.github.io/clipboard.js + * + * Licensed MIT © Zeno Rocha + */ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ClipboardJS=e():t.ClipboardJS=e()}(this,function(){return function(n){var o={};function r(t){if(o[t])return o[t].exports;var e=o[t]={i:t,l:!1,exports:{}};return n[t].call(e.exports,e,e.exports,r),e.l=!0,e.exports}return r.m=n,r.c=o,r.d=function(t,e,n){r.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},r.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return r.d(e,"a",e),e},r.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r.p="",r(r.s=0)}([function(t,e,n){"use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i=function(){function o(t,e){for(var n=0;n + + + + + Closure capture inference - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Closure Capture Inference

+

This section describes how rustc handles closures. Closures in Rust are +effectively "desugared" into structs that contain the values they use (or +references to the values they use) from their creator's stack frame. rustc has +the job of figuring out which values a closure uses and how, so it can decide +whether to capture a given variable by shared reference, mutable reference, or +by move. rustc also has to figure out which of the closure traits (Fn, +FnMut, or FnOnce) a closure is capable of +implementing.

+

Let's start with a few examples:

+

Example 1

+

To start, let's take a look at how the closure in the following example is desugared:

+
fn closure(f: impl Fn()) {
+    f();
+}
+
+fn main() {
+    let x: i32 = 10;
+    closure(|| println!("Hi {}", x));  // The closure just reads x.
+    println!("Value of x after return {}", x);
+}
+

Let's say the above is the content of a file called immut.rs. If we compile +immut.rs using the following command. The -Z dump-mir=all flag will cause +rustc to generate and dump the MIR to a directory called mir_dump.

+
> rustc +stage1 immut.rs -Z dump-mir=all
+
+

After we run this command, we will see a newly generated directory in our +current working directory called mir_dump, which will contain several files. +If we look at file rustc.main.-------.mir_map.0.mir, we will find, among +other things, it also contains this line:

+
_4 = &_1;
+_3 = [closure@immut.rs:7:13: 7:36] { x: move _4 };
+

Note that in the MIR examples in this chapter, _1 is x.

+

Here in first line _4 = &_1;, the mir_dump tells us that x was borrowed +as an immutable reference. This is what we would hope as our closure just +reads x.

+

Example 2

+

Here is another example:

+
fn closure(mut f: impl FnMut()) {
+    f();
+}
+
+fn main() {
+    let mut x: i32 = 10;
+    closure(|| {
+        x += 10;  // The closure mutates the value of x
+        println!("Hi {}", x)
+    });
+    println!("Value of x after return {}", x);
+}
+
_4 = &mut _1;
+_3 = [closure@mut.rs:7:13: 10:6] { x: move _4 };
+

This time along, in the line _4 = &mut _1;, we see that the borrow is changed to mutable borrow. +Fair enough! The closure increments x by 10.

+

Example 3

+

One more example:

+
fn closure(f: impl FnOnce()) {
+    f();
+}
+
+fn main() {
+    let x = vec![21];
+    closure(|| {
+        drop(x);  // Makes x unusable after the fact.
+    });
+    // println!("Value of x after return {:?}", x);
+}
+
_6 = [closure@move.rs:7:13: 9:6] { x: move _1 }; // bb16[3]: scope 1 at move.rs:7:13: 9:6
+

Here, x is directly moved into the closure and the access to it will not be permitted after the +closure.

+

Inferences in the compiler

+

Now let's dive into rustc code and see how all these inferences are done by the compiler.

+

Let's start with defining a term that we will be using quite a bit in the rest of the discussion - +upvar. An upvar is a variable that is local to the function where the closure is defined. So, +in the above examples, x will be an upvar to the closure. They are also sometimes referred to as +the free variables meaning they are not bound to the context of the closure. +compiler/rustc_passes/src/upvars.rs defines a query called upvars_mentioned +for this purpose.

+

Other than lazy invocation, one other thing that distinguishes a closure from a +normal function is that it can use the upvars. It borrows these upvars from its surrounding +context; therefore the compiler has to determine the upvar's borrow type. The compiler starts with +assigning an immutable borrow type and lowers the restriction (that is, changes it from +immutable to mutable to move) as needed, based on the usage. In the Example 1 above, the +closure only uses the variable for printing but does not modify it in any way and therefore, in the +mir_dump, we find the borrow type for the upvar x to be immutable. In example 2, however, the +closure modifies x and increments it by some value. Because of this mutation, the compiler, which +started off assigning x as an immutable reference type, has to adjust it as a mutable reference. +Likewise in the third example, the closure drops the vector and therefore this requires the variable +x to be moved into the closure. Depending on the borrow kind, the closure has to implement the +appropriate trait: Fn trait for immutable borrow, FnMut for mutable borrow, +and FnOnce for move semantics.

+

Most of the code related to the closure is in the +compiler/rustc_hir_typeck/src/upvar.rs file and the data structures are +declared in the file compiler/rustc_middle/src/ty/mod.rs.

+

Before we go any further, let's discuss how we can examine the flow of control through the rustc +codebase. For closures specifically, set the RUSTC_LOG env variable as below and collect the +output in a file:

+
> RUSTC_LOG=rustc_hir_typeck::upvar rustc +stage1 -Z dump-mir=all \
+    <.rs file to compile> 2> <file where the output will be dumped>
+
+

This uses the stage1 compiler and enables debug! logging for the +rustc_hir_typeck::upvar module.

+

The other option is to step through the code using lldb or gdb.

+
    +
  1. rust-lldb build/host/stage1/bin/rustc test.rs
  2. +
  3. In lldb: +
      +
    1. b upvar.rs:134 // Setting the breakpoint on a certain line in the upvar.rs file
    2. +
    3. r // Run the program until it hits the breakpoint
    4. +
    +
  4. +
+

Let's start with upvar.rs. This file has something called +the euv::ExprUseVisitor which walks the source of the closure and +invokes a callback for each upvar that is borrowed, mutated, or moved.

+
fn main() {
+    let mut x = vec![21];
+    let _cl = || {
+        let y = x[0];  // 1.
+        x[0] += 1;  // 2.
+    };
+}
+

In the above example, our visitor will be called twice, for the lines marked 1 and 2, once for a +shared borrow and another one for a mutable borrow. It will also tell us what was borrowed.

+

The callbacks are defined by implementing the Delegate trait. The +InferBorrowKind type implements Delegate and keeps a map that +records for each upvar which mode of capture was required. The modes of capture +can be ByValue (moved) or ByRef (borrowed). For ByRef borrows, the possible +BorrowKinds are ImmBorrow, UniqueImmBorrow, MutBorrow as defined in the +compiler/rustc_middle/src/ty/mod.rs.

+

Delegate defines a few different methods (the different callbacks): +consume for move of a variable, borrow for a borrow of some kind +(shared or mutable), and mutate when we see an assignment of something.

+

All of these callbacks have a common argument cmt which stands for Category, +Mutability and Type and is defined in +compiler/rustc_hir_typeck/src/expr_use_visitor.rs. Borrowing from the code +comments, "cmt is a complete categorization of a value indicating where it +originated and how it is located, as well as the mutability of the memory in +which the value is stored". Based on the callback (consume, borrow etc.), we +will call the relevant adjust_upvar_borrow_kind_for_<something> and pass the +cmt along. Once the borrow type is adjusted, we store it in the table, which +basically says what borrows were made for each closure.

+
self.tables
+    .borrow_mut()
+    .upvar_capture_map
+    .extend(delegate.adjust_upvar_captures);
+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/coherence.html b/coherence.html new file mode 100644 index 000000000..51061aa0d --- /dev/null +++ b/coherence.html @@ -0,0 +1,284 @@ + + + + + + Coherence checking - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Coherence

+
+

NOTE: this is based on notes by @lcnr

+
+

Coherence checking is what detects both of trait impls and inherent impls overlapping with others. +(reminder: inherent impls are impls of concrete types like impl MyStruct {})

+

Overlapping trait impls always produce an error, +while overlapping inherent impls result in an error only if they have methods with the same name.

+

Checking for overlaps is split in two parts. First there's the overlap check(s), +which finds overlaps between traits and inherent implementations that the compiler currently knows about.

+

However, Coherence also results in an error if any other impls could exist, +even if they are currently unknown. +This affects impls which may get added to upstream crates in a backwards compatible way, +and impls from downstream crates. +This is called the Orphan check.

+

Overlap checks

+

Overlap checks are performed for both inherent impls, and for trait impls. +This uses the same overlap checking code, really done as two separate analyses. +Overlap checks always consider pairs of implementations, comparing them to each other.

+

Overlap checking for inherent impl blocks is done through fn check_item (in coherence/inherent_impls_overlap.rs), +where you can very clearly see that (at least for small n), the check really performs n^2 +comparisons between impls.

+

In the case of traits, this check is currently done as part of building the specialization graph, +to handle specializing impls overlapping with their parent, but this may change in the future.

+

In both cases, all pairs of impls are checked for overlap.

+

Overlapping is sometimes partially allowed:

+
    +
  1. for marker traits
  2. +
  3. under specialization
  4. +
+

but normally isn't.

+

The overlap check has various modes (see OverlapMode). +Importantly, there's the explicit negative impl check, and the implicit negative impl check. +Both try to prove that an overlap is definitely impossible.

+

The explicit negative impl check

+

This check is done in impl_intersection_has_negative_obligation.

+

This check tries to find a negative trait implementation. +For example:

+
#![allow(unused)]
+fn main() {
+struct MyCustomErrorType;
+
+// both in your own crate
+impl From<&str> for MyCustomErrorType {}
+impl<E> From<E> for MyCustomErrorType where E: Error {}
+}
+

In this example, we'd get: +MyCustomErrorType: From<&str> and MyCustomErrorType: From<?E>, giving ?E = &str.

+

And thus, these two implementations would overlap. +However, libstd provides &str: !Error, and therefore guarantees that there +will never be a positive implementation of &str: Error, and thus there is no overlap.

+

Note that for this kind of negative impl check, we must have explicit negative implementations provided. +This is not currently stable.

+

The implicit negative impl check

+

This check is done in impl_intersection_has_impossible_obligation, +and does not rely on negative trait implementations and is stable.

+

Let's say there's a

+
#![allow(unused)]
+fn main() {
+impl From<MyLocalType> for Box<dyn Error> {}  // in your own crate
+impl<E> From<E> for Box<dyn Error> where E: Error {} // in std
+}
+

This would give: Box<dyn Error>: From<MyLocalType>, and Box<dyn Error>: From<?E>,
+giving ?E = MyLocalType.

+

In your crate there's no MyLocalType: Error, downstream crates cannot implement Error (a remote trait) for MyLocalType (a remote type). +Therefore, these two impls do not overlap. +Importantly, this works even if there isn't a impl !Error for MyLocalType.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/compiler-debugging.html b/compiler-debugging.html new file mode 100644 index 000000000..13063aec4 --- /dev/null +++ b/compiler-debugging.html @@ -0,0 +1,549 @@ + + + + + + Debugging the compiler - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Debugging the compiler

+ +

This chapter contains a few tips to debug the compiler. These tips aim to be +useful no matter what you are working on. Some of the other chapters have +advice about specific parts of the compiler (e.g. the Queries Debugging and +Testing chapter or the LLVM Debugging +chapter).

+

Configuring the compiler

+

By default, rustc is built without most debug information. To enable debug info, +set debug = true in your bootstrap.toml.

+

Setting debug = true turns on many different debug options (e.g., debug-assertions, +debug-logging, etc.) which can be individually tweaked if you want to, but many people +simply set debug = true.

+

If you want to use GDB to debug rustc, please set bootstrap.toml with options:

+
[rust]
+debug = true
+debuginfo-level = 2
+
+
+

NOTE: +This will use a lot of disk space +(upwards of 35GB), +and will take a lot more compile time. +With debuginfo-level = 1 (the default when debug = true), +you will be able to track the execution path, +but will lose the symbol information for debugging.

+
+

The default configuration will enable symbol-mangling-version v0. +This requires at least GDB v10.2, +otherwise you need to disable new symbol-mangling-version in bootstrap.toml.

+
[rust]
+new-symbol-mangling = false
+
+
+

See the comments in bootstrap.example.toml for more info.

+
+

You will need to rebuild the compiler after changing any configuration option.

+

Suppressing the ICE file

+

By default, if rustc encounters an Internal Compiler Error (ICE) it will dump the ICE contents to an +ICE file within the current working directory named rustc-ice-<timestamp>-<pid>.txt. If this is +not desirable, you can prevent the ICE file from being created with RUSTC_ICE=0.

+

Getting a backtrace

+

When you have an ICE (panic in the compiler), you can set +RUST_BACKTRACE=1 to get the stack trace of the panic! like in +normal Rust programs. IIRC backtraces don't work on MinGW, +sorry. If you have trouble or the backtraces are full of unknown, +you might want to find some way to use Linux, Mac, or MSVC on Windows.

+

In the default configuration (without debug set to true), you don't have line numbers +enabled, so the backtrace looks like this:

+
stack backtrace:
+   0: std::sys::imp::backtrace::tracing::imp::unwind_backtrace
+   1: std::sys_common::backtrace::_print
+   2: std::panicking::default_hook::{{closure}}
+   3: std::panicking::default_hook
+   4: std::panicking::rust_panic_with_hook
+   5: std::panicking::begin_panic
+   (~~~~ LINES REMOVED BY ME FOR BREVITY ~~~~)
+  32: rustc_typeck::check_crate
+  33: <std::thread::local::LocalKey<T>>::with
+  34: <std::thread::local::LocalKey<T>>::with
+  35: rustc::ty::context::TyCtxt::create_and_enter
+  36: rustc_driver::driver::compile_input
+  37: rustc_driver::run_compiler
+
+

If you set debug = true, you will get line numbers for the stack trace. +Then the backtrace will look like this:

+
stack backtrace:
+   (~~~~ LINES REMOVED BY ME FOR BREVITY ~~~~)
+             at /home/user/rust/compiler/rustc_typeck/src/check/cast.rs:110
+   7: rustc_typeck::check::cast::CastCheck::check
+             at /home/user/rust/compiler/rustc_typeck/src/check/cast.rs:572
+             at /home/user/rust/compiler/rustc_typeck/src/check/cast.rs:460
+             at /home/user/rust/compiler/rustc_typeck/src/check/cast.rs:370
+   (~~~~ LINES REMOVED BY ME FOR BREVITY ~~~~)
+  33: rustc_driver::driver::compile_input
+             at /home/user/rust/compiler/rustc_driver/src/driver.rs:1010
+             at /home/user/rust/compiler/rustc_driver/src/driver.rs:212
+  34: rustc_driver::run_compiler
+             at /home/user/rust/compiler/rustc_driver/src/lib.rs:253
+
+

-Z flags

+

The compiler has a bunch of -Z * flags. These are unstable flags that are only +enabled on nightly. Many of them are useful for debugging. To get a full listing +of -Z flags, use -Z help.

+

One useful flag is -Z verbose-internals, which generally enables printing more +info that could be useful for debugging.

+

Right below you can find elaborate explainers on a selected few.

+

Getting a backtrace for errors

+

If you want to get a backtrace to the point where the compiler emits an +error message, you can pass the -Z treat-err-as-bug=n, which will make +the compiler panic on the nth error. If you leave off =n, the compiler will +assume 1 for n and thus panic on the first error it encounters.

+

For example:

+
$ cat error.rs
+
+
fn main() {
+    1 + ();
+}
+
$ rustc +stage1 error.rs
+error[E0277]: cannot add `()` to `{integer}`
+ --> error.rs:2:7
+  |
+2 |       1 + ();
+  |         ^ no implementation for `{integer} + ()`
+  |
+  = help: the trait `Add<()>` is not implemented for `{integer}`
+
+error: aborting due to previous error
+
+

Now, where does the error above come from?

+
$ RUST_BACKTRACE=1 rustc +stage1 error.rs -Z treat-err-as-bug
+error[E0277]: the trait bound `{integer}: std::ops::Add<()>` is not satisfied
+ --> error.rs:2:7
+  |
+2 |     1 + ();
+  |       ^ no implementation for `{integer} + ()`
+  |
+  = help: the trait `std::ops::Add<()>` is not implemented for `{integer}`
+
+error: internal compiler error: unexpected panic
+
+note: the compiler unexpectedly panicked. this is a bug.
+
+note: we would appreciate a bug report: https://github.com/rust-lang/rust/blob/master/CONTRIBUTING.md#bug-reports
+
+note: rustc 1.24.0-dev running on x86_64-unknown-linux-gnu
+
+note: run with `RUST_BACKTRACE=1` for a backtrace
+
+thread 'rustc' panicked at 'encountered error with `-Z treat_err_as_bug',
+/home/user/rust/compiler/rustc_errors/src/lib.rs:411:12
+note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose
+backtrace.
+stack backtrace:
+  (~~~ IRRELEVANT PART OF BACKTRACE REMOVED BY ME ~~~)
+   7: rustc::traits::error_reporting::<impl rustc::infer::InferCtxt<'a, 'tcx>>
+             ::report_selection_error
+             at /home/user/rust/compiler/rustc_middle/src/traits/error_reporting.rs:823
+   8: rustc::traits::error_reporting::<impl rustc::infer::InferCtxt<'a, 'tcx>>
+             ::report_fulfillment_errors
+             at /home/user/rust/compiler/rustc_middle/src/traits/error_reporting.rs:160
+             at /home/user/rust/compiler/rustc_middle/src/traits/error_reporting.rs:112
+   9: rustc_typeck::check::FnCtxt::select_obligations_where_possible
+             at /home/user/rust/compiler/rustc_typeck/src/check/mod.rs:2192
+  (~~~ IRRELEVANT PART OF BACKTRACE REMOVED BY ME ~~~)
+  36: rustc_driver::run_compiler
+             at /home/user/rust/compiler/rustc_driver/src/lib.rs:253
+
+

Cool, now I have a backtrace for the error!

+

Debugging delayed bugs

+

The -Z eagerly-emit-delayed-bugs option makes it easy to debug delayed bugs. +It turns them into normal errors, i.e. makes them visible. This can be used in +combination with -Z treat-err-as-bug to stop at a particular delayed bug and +get a backtrace.

+

Getting the error creation location

+

-Z track-diagnostics can help figure out where errors are emitted. It uses #[track_caller] +for this and prints its location alongside the error:

+
$ RUST_BACKTRACE=1 rustc +stage1 error.rs -Z track-diagnostics
+error[E0277]: cannot add `()` to `{integer}`
+ --> src\error.rs:2:7
+  |
+2 |     1 + ();
+  |       ^ no implementation for `{integer} + ()`
+-Ztrack-diagnostics: created at compiler/rustc_trait_selection/src/traits/error_reporting/mod.rs:638:39
+  |
+  = help: the trait `Add<()>` is not implemented for `{integer}`
+  = help: the following other types implement trait `Add<Rhs>`:
+            <&'a f32 as Add<f32>>
+            <&'a f64 as Add<f64>>
+            <&'a i128 as Add<i128>>
+            <&'a i16 as Add<i16>>
+            <&'a i32 as Add<i32>>
+            <&'a i64 as Add<i64>>
+            <&'a i8 as Add<i8>>
+            <&'a isize as Add<isize>>
+          and 48 others
+
+For more information about this error, try `rustc --explain E0277`.
+
+

This is similar but different to -Z treat-err-as-bug:

+
    +
  • it will print the locations for all errors emitted
  • +
  • it does not require a compiler built with debug symbols
  • +
  • you don't have to read through a big stack trace.
  • +
+

Getting logging output

+

The compiler uses the tracing crate for logging.

+

For details see the guide section on tracing

+

Narrowing (Bisecting) Regressions

+

The cargo-bisect-rustc tool can be used as a quick and easy way to +find exactly which PR caused a change in rustc behavior. It automatically +downloads rustc PR artifacts and tests them against a project you provide +until it finds the regression. You can then look at the PR to get more context +on why it was changed. See this tutorial on how to use +it.

+

Downloading Artifacts from Rust's CI

+

The rustup-toolchain-install-master tool by kennytm can be used to +download the artifacts produced by Rust's CI for a specific SHA1 -- this +basically corresponds to the successful landing of some PR -- and then sets +them up for your local use. This also works for artifacts produced by @bors try. This is helpful when you want to examine the resulting build of a PR +without doing the build yourself.

+

#[rustc_*] TEST attributes

+

The compiler defines a whole lot of internal (perma-unstable) attributes some of which are useful +for debugging by dumping extra compiler-internal information. These are prefixed with rustc_ and +are gated behind the internal feature rustc_attrs (enabled via e.g. #![feature(rustc_attrs)]).

+

For a complete and up to date list, see builtin_attrs. More specifically, the ones marked TEST. +Here are some notable ones:

+
+ + + + + + + + + + + + +
AttributeDescription
rustc_def_pathDumps the def_path_str of an item.
rustc_dump_def_parentsDumps the chain of DefId parents of certain definitions.
rustc_dump_item_boundsDumps the item_bounds of an item.
rustc_dump_predicatesDumps the predicates_of an item.
rustc_dump_vtableDumps the vtable layout of an impl, or a type alias of a dyn type.
rustc_hidden_type_of_opaquesDumps the hidden type of each opaque types in the crate.
rustc_layoutSee this section.
rustc_object_lifetime_defaultDumps the object lifetime defaults of an item.
rustc_outlivesDumps implied bounds of an item. More precisely, the inferred_outlives_of an item.
rustc_regionsDumps NLL closure region requirements.
rustc_symbol_nameDumps the mangled & demangled symbol_name of an item.
rustc_variancesDumps the variances of an item.
+
+

Right below you can find elaborate explainers on a selected few.

+

Formatting Graphviz output (.dot files)

+

Some compiler options for debugging specific features yield graphviz graphs - +e.g. the #[rustc_mir(borrowck_graphviz_postflow="suffix.dot")] attribute +on a function dumps various borrow-checker dataflow graphs in conjunction with +-Zdump-mir-dataflow.

+

These all produce .dot files. To view these files, install graphviz (e.g. +apt-get install graphviz) and then run the following commands:

+
$ dot -T pdf maybe_init_suffix.dot > maybe_init_suffix.pdf
+$ firefox maybe_init_suffix.pdf # Or your favorite pdf viewer
+
+

Debugging type layouts

+

The internal attribute #[rustc_layout] can be used to dump the Layout of +the type it is attached to. For example:

+
#![allow(unused)]
+#![feature(rustc_attrs)]
+
+fn main() {
+#[rustc_layout(debug)]
+type T<'a> = &'a u32;
+}
+

Will emit the following:

+
error: layout_of(&'a u32) = Layout {
+    fields: Primitive,
+    variants: Single {
+        index: 0,
+    },
+    abi: Scalar(
+        Scalar {
+            value: Pointer,
+            valid_range: 1..=18446744073709551615,
+        },
+    ),
+    largest_niche: Some(
+        Niche {
+            offset: Size {
+                raw: 0,
+            },
+            scalar: Scalar {
+                value: Pointer,
+                valid_range: 1..=18446744073709551615,
+            },
+        },
+    ),
+    align: AbiAndPrefAlign {
+        abi: Align {
+            pow2: 3,
+        },
+        pref: Align {
+            pow2: 3,
+        },
+    },
+    size: Size {
+        raw: 8,
+    },
+}
+ --> src/lib.rs:4:1
+  |
+4 | type T<'a> = &'a u32;
+  | ^^^^^^^^^^^^^^^^^^^^^
+
+error: aborting due to previous error
+
+

Configuring CodeLLDB for debugging rustc

+

If you are using VSCode, and have edited your bootstrap.toml to request debugging +level 1 or 2 for the parts of the code you're interested in, then you should be +able to use the CodeLLDB extension in VSCode to debug it.

+

Here is a sample launch.json file, being used to run a stage 1 compiler direct +from the directory where it is built (does not have to be "installed"):

+
// .vscode/launch.json
+{
+    "version": "0.2.0",
+    "configurations": [
+      {
+        "type": "lldb",
+        "request": "launch",
+        "name": "Launch",
+        "args": [],  // array of string command-line arguments to pass to compiler
+        "program": "${workspaceFolder}/build/host/stage1/bin/rustc",
+        "windows": {  // applicable if using windows
+            "program": "${workspaceFolder}/build/host/stage1/bin/rustc.exe"
+        },
+        "cwd": "${workspaceFolder}",  // current working directory at program start
+        "stopOnEntry": false,
+        "sourceLanguages": ["rust"]
+      }
+    ]
+  }
+
+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/compiler-src.html b/compiler-src.html new file mode 100644 index 000000000..b4affc115 --- /dev/null +++ b/compiler-src.html @@ -0,0 +1,362 @@ + + + + + + The compiler source code - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

High-level overview of the compiler source

+ +

Now that we have seen what the compiler does, +let's take a look at the structure of the rust-lang/rust repository, +where the rustc source code lives.

+
+

You may find it helpful to read the "Overview of the compiler" +chapter, which introduces how the compiler works, before this one.

+
+

Workspace structure

+

The rust-lang/rust repository consists of a single large cargo workspace +containing the compiler, the standard libraries (core, alloc, std, +proc_macro, etc), and rustdoc, along with the build system and a +bunch of tools and submodules for building a full Rust distribution.

+

The repository consists of three main directories:

+ +

Compiler

+

The compiler is implemented in the various compiler/ crates. +The compiler/ crates all have names starting with rustc_*. These are a +collection of around 50 interdependent crates ranging in size from tiny to +huge. There is also the rustc crate which is the actual binary (i.e. the +main function); it doesn't actually do anything besides calling the +rustc_driver crate, which drives the various parts of compilation in other +crates.

+

The dependency order of these crates is complex, but roughly it is +something like this:

+
    +
  1. rustc (the binary) calls rustc_driver::main.
  2. +
  3. rustc_driver depends on a lot of other crates, but the main one is +rustc_interface.
  4. +
  5. rustc_interface depends on most of the other compiler crates. It is a +fairly generic interface for driving the whole compilation.
  6. +
  7. Most of the other rustc_* crates depend on rustc_middle, which defines +a lot of central data structures in the compiler.
  8. +
  9. rustc_middle and most of the other crates depend on a handful of crates +representing the early parts of the compiler (e.g. the parser), fundamental +data structures (e.g. Span), or error reporting: +rustc_data_structures, rustc_span, rustc_errors, etc.
  10. +
+

You can see the exact dependencies by running cargo tree, +just like you would for any other Rust package:

+
cargo tree --package rustc_driver
+
+

One final thing: src/llvm-project is a submodule for our fork of LLVM. +During bootstrapping, LLVM is built and the compiler/rustc_llvm crate +contains Rust wrappers around LLVM (which is written in C++), so that the +compiler can interface with it.

+

Most of this book is about the compiler, so we won't have any further +explanation of these crates here.

+

Big picture

+

The dependency structure of the compiler is influenced by two main factors:

+
    +
  1. Organization. The compiler is a huge codebase; it would be an impossibly +large crate. In part, the dependency structure reflects the code structure +of the compiler.
  2. +
  3. Compile-time. By breaking the compiler into multiple crates, we can take +better advantage of incremental/parallel compilation using cargo. In +particular, we try to have as few dependencies between crates as possible so +that we don't have to rebuild as many crates if you change one.
  4. +
+

At the very bottom of the dependency tree are a handful of crates that are used +by the whole compiler (e.g. rustc_span). The very early parts of the +compilation process (e.g. parsing and the Abstract Syntax Tree (AST)) +depend on only these.

+

After the AST is constructed and other early analysis is done, the +compiler's query system gets set up. The query system is set up in a +clever way using function pointers. This allows us to break dependencies +between crates, allowing more parallel compilation. The query system is defined +in rustc_middle, so nearly all subsequent parts of the compiler depend on +this crate. It is a really large crate, leading to long compile times. Some +efforts have been made to move stuff out of it with varying success. Another +side-effect is that sometimes related functionality gets scattered across +different crates. For example, linting functionality is found across earlier +parts of the crate, rustc_lint, rustc_middle, and other places.

+

Ideally there would be fewer, more cohesive crates, with incremental and +parallel compilation making sure compile times stay reasonable. However, +incremental and parallel compilation haven't gotten good enough for that yet, +so breaking things into separate crates has been our solution so far.

+

At the top of the dependency tree is rustc_driver and rustc_interface +which is an unstable wrapper around the query system helping drive various +stages of compilation. Other consumers of the compiler may use this interface +in different ways (e.g. rustdoc or maybe eventually rust-analyzer). The +rustc_driver crate first parses command line arguments and then uses +rustc_interface to drive the compilation to completion.

+

rustdoc

+

The bulk of rustdoc is in librustdoc. However, the rustdoc binary +itself is src/tools/rustdoc, which does nothing except call rustdoc::main.

+

There is also JavaScript and CSS for the docs in src/tools/rustdoc-js +and src/tools/rustdoc-themes.

+

You can read more about rustdoc in this chapter.

+

Tests

+

The test suite for all of the above is in tests/. You can read more +about the test suite in this chapter.

+

The test harness is in src/tools/compiletest/.

+

Build System

+

There are a number of tools in the repository just for building the compiler, +standard library, rustdoc, etc, along with testing, building a full Rust +distribution, etc.

+

One of the primary tools is src/bootstrap/. You can read more about +bootstrapping in this chapter. The process may also use other tools +from src/tools/, such as tidy/ or compiletest/.

+

Standard library

+

This code is fairly similar to most other Rust crates except that it must be +built in a special way because it can use unstable (nightly) features. +The standard library is sometimes referred to as libstd or the "standard facade".

+

Other

+

There are a lot of other things in the rust-lang/rust repo that are related +to building a full Rust distribution. Most of the time you don't need to worry about them.

+

These include:

+
    +
  • src/ci: The CI configuration. This actually quite extensive because we +run a lot of tests on a lot of platforms.
  • +
  • src/doc: Various documentation, including submodules for a few books.
  • +
  • src/etc: Miscellaneous utilities.
  • +
  • And more...
  • +
+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/compiler-team.html b/compiler-team.html new file mode 100644 index 000000000..b0d913a99 --- /dev/null +++ b/compiler-team.html @@ -0,0 +1,329 @@ + + + + + + About the compiler team - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

About the compiler team

+

rustc is maintained by the Rust compiler team. The people who belong to +this team collectively work to track regressions and implement new features. +Members of the Rust compiler team are people who have made significant +contributions to rustc and its design.

+

Discussion

+

Currently the compiler team chats in Zulip:

+
    +
  • Team chat occurs in the t-compiler stream on the Zulip instance
  • +
  • There are also a number of other associated Zulip streams, +such as t-compiler/help, where people can ask for help +with rustc development, or t-compiler/meetings, +where the team holds their weekly triage and steering meetings.
  • +
+

Reviewers

+

If you're interested in figuring out who can answer questions about a +particular part of the compiler, or you'd just like to know who works on what, +check out triagebot.toml's assign section. +It contains a listing of the various parts of the compiler and a list of people +who are reviewers of each part.

+

Rust compiler meeting

+

The compiler team has a weekly meeting where we do triage and try to +generally stay on top of new bugs, regressions, and discuss important +things in general. +They are held on Zulip. It works roughly as follows:

+
    +
  • Announcements, MCPs/FCPs, and WG-check-ins: We share some +announcements with the rest of the team about important things we want +everyone to be aware of. We also share the status of MCPs and FCPs and we +use the opportunity to have a couple of WGs giving us an update about +their work.
  • +
  • Check for beta and stable nominations: These are nominations of things to +backport to beta and stable respectively. +We then look for new cases where the compiler broke previously working +code in the wild. Regressions are important issues to fix, so it's +likely that they are tagged as P-critical or P-high; the major +exception would be bug fixes (though even there we often aim to give +warnings first).
  • +
  • Review P-critical and P-high bugs: P-critical and P-high bugs are +those that are sufficiently important for us to actively track +progress. P-critical and P-high bugs should ideally always have an +assignee.
  • +
  • Check S-waiting-on-team and I-nominated issues: These are issues where feedback from +the team is desired.
  • +
  • Look over the performance triage report: We check for PRs that made the +performance worse and try to decide if it's worth reverting the performance regression or if +the regression can be addressed in a future PR.
  • +
+

The meeting currently takes place on Thursdays at 10am Boston time +(UTC-4 typically, but daylight savings time sometimes makes things +complicated).

+

Team membership

+

Membership in the Rust team is typically offered when someone has been +making significant contributions to the compiler for some +time. Membership is both a recognition but also an obligation: +compiler team members are generally expected to help with upkeep as +well as doing reviews and other work.

+

If you are interested in becoming a compiler team member, the first +thing to do is to start fixing some bugs, or get involved in a working +group. One good way to find bugs is to look for +open issues tagged with E-easy +or +E-mentor.

+

You can also dig through the graveyard of PRs that were +closed due to inactivity, +some of them may contain work that is still useful - refer to the +associated issues, if any - and only needs some finishing touches +for which the original author didn't have time.

+

r+ rights

+

Once you have made a number of individual PRs to rustc, we will often +offer r+ privileges. This means that you have the right to instruct +"bors" (the robot that manages which PRs get landed into rustc) to +merge a PR +(here are some instructions for how to talk to bors).

+

The guidelines for reviewers are as follows:

+
    +
  • You are always welcome to review any PR, regardless of who it is +assigned to. However, do not r+ PRs unless: +
      +
    • You are confident in that part of the code.
    • +
    • You are confident that nobody else wants to review it first. +
        +
      • For example, sometimes people will express a desire to review a +PR before it lands, perhaps because it touches a particularly +sensitive part of the code.
      • +
      +
    • +
    +
  • +
  • Always be polite when reviewing: you are a representative of the +Rust project, so it is expected that you will go above and beyond +when it comes to the Code of Conduct.
  • +
+

Reviewer rotation

+

Once you have r+ rights, you can also be added to the reviewer rotation. +triagebot is the bot that automatically assigns incoming PRs to reviewers. +If you are added, you will be randomly selected to review +PRs. If you find you are assigned a PR that you don't feel comfortable +reviewing, you can also leave a comment like r? @so-and-so to assign +to someone else — if you don't know who to request, just write r? @nikomatsakis for reassignment and @nikomatsakis will pick someone +for you.

+

Getting on the reviewer rotation is much appreciated as it lowers the +review burden for all of us! However, if you don't have time to give +people timely feedback on their PRs, it may be better that you don't +get on the list.

+

Full team membership

+

Full team membership is typically extended once someone made many +contributions to the Rust compiler over time, ideally (but not +necessarily) to multiple areas. Sometimes this might be implementing a +new feature, but it is also important — perhaps more important! — to +have time and willingness to help out with general upkeep such as +bugfixes, tracking regressions, and other less glamorous work.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/compiletest.html b/compiletest.html new file mode 100644 index 000000000..c091f8233 --- /dev/null +++ b/compiletest.html @@ -0,0 +1,12 @@ + + + + + Redirecting... + + + + +

Redirecting to... tests/compiletest.html.

+ + diff --git a/const-eval.html b/const-eval.html new file mode 100644 index 000000000..7b9c78c4f --- /dev/null +++ b/const-eval.html @@ -0,0 +1,267 @@ + + + + + + Constant evaluation - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Constant Evaluation

+

Constant evaluation is the process of computing values at compile time. For a +specific item (constant/static/array length) this happens after the MIR for the +item is borrow-checked and optimized. In many cases trying to const evaluate an +item will trigger the computation of its MIR for the first time.

+

Prominent examples are:

+
    +
  • The initializer of a static
  • +
  • Array length +
      +
    • needs to be known to reserve stack or heap space
    • +
    +
  • +
  • Enum variant discriminants +
      +
    • needs to be known to prevent two variants from having the same +discriminant
    • +
    +
  • +
  • Patterns +
      +
    • need to be known to check for overlapping patterns
    • +
    +
  • +
+

Additionally constant evaluation can be used to reduce the workload or binary +size at runtime by precomputing complex operations at compile time and only +storing the result.

+

All uses of constant evaluation can either be categorized as "influencing the type system" +(array lengths, enum variant discriminants, const generic parameters), or as solely being +done to precompute expressions to be used at runtime.

+

Constant evaluation can be done by calling the const_eval_* functions of TyCtxt. +They're the wrappers of the const_eval query.

+
    +
  • const_eval_global_id_for_typeck evaluates a constant to a valtree, +so the result value can be further inspected by the compiler.
  • +
  • const_eval_global_id evaluate a constant to an "opaque blob" containing its final value; +this is only useful for codegen backends and the CTFE evaluator engine itself.
  • +
  • eval_static_initializer specifically computes the initial values of a static. +Statics are special; all other functions do not represent statics correctly +and have thus assertions preventing their use on statics.
  • +
+

The const_eval_* functions use a ParamEnv of environment +in which the constant is evaluated (e.g. the function within which the constant is used) +and a GlobalId. The GlobalId is made up of an Instance referring to a constant +or static or of an Instance of a function and an index into the function's Promoted table.

+

Constant evaluation returns an EvalToValTreeResult for type system constants +or EvalToConstValueResult with either the error, or a representation of the +evaluated constant: a valtree or a MIR constant +value, respectively.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/const-eval/interpret.html b/const-eval/interpret.html new file mode 100644 index 000000000..b96f14d3f --- /dev/null +++ b/const-eval/interpret.html @@ -0,0 +1,407 @@ + + + + + + Interpreter - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Interpreter

+ +

The interpreter is a virtual machine for executing MIR without compiling to +machine code. It is usually invoked via tcx.const_eval_* functions. The +interpreter is shared between the compiler (for compile-time function +evaluation, CTFE) and the tool Miri, which +uses the same virtual machine to detect Undefined Behavior in (unsafe) Rust +code.

+

If you start out with a constant:

+
#![allow(unused)]
+fn main() {
+const FOO: usize = 1 << 12;
+}
+

rustc doesn't actually invoke anything until the constant is either used or +placed into metadata.

+

Once you have a use-site like:

+
type Foo = [u8; FOO - 42];
+

The compiler needs to figure out the length of the array before being able to +create items that use the type (locals, constants, function arguments, ...).

+

To obtain the (in this case empty) parameter environment, one can call +let param_env = tcx.param_env(length_def_id);. The GlobalId needed is

+
let gid = GlobalId {
+    promoted: None,
+    instance: Instance::mono(length_def_id),
+};
+

Invoking tcx.const_eval(param_env.and(gid)) will now trigger the creation of +the MIR of the array length expression. The MIR will look something like this:

+
Foo::{{constant}}#0: usize = {
+    let mut _0: usize;
+    let mut _1: (usize, bool);
+
+    bb0: {
+        _1 = CheckedSub(const FOO, const 42usize);
+        assert(!move (_1.1: bool), "attempt to subtract with overflow") -> bb1;
+    }
+
+    bb1: {
+        _0 = move (_1.0: usize);
+        return;
+    }
+}
+
+

Before the evaluation, a virtual memory location (in this case essentially a +vec![u8; 4] or vec![u8; 8]) is created for storing the evaluation result.

+

At the start of the evaluation, _0 and _1 are +Operand::Immediate(Immediate::Scalar(ScalarMaybeUndef::Undef)). This is quite +a mouthful: Operand can represent either data stored somewhere in the +interpreter memory (Operand::Indirect), or (as an optimization) +immediate data stored in-line. And Immediate can either be a single +(potentially uninitialized) scalar value (integer or thin pointer), +or a pair of two of them. In our case, the single scalar value is not (yet) +initialized.

+

When the initialization of _1 is invoked, the value of the FOO constant is +required, and triggers another call to tcx.const_eval_*, which will not be shown +here. If the evaluation of FOO is successful, 42 will be subtracted from its +value 4096 and the result stored in _1 as +Operand::Immediate(Immediate::ScalarPair(Scalar::Raw { data: 4054, .. }, Scalar::Raw { data: 0, .. }). The first part of the pair is the computed value, +the second part is a bool that's true if an overflow happened. A Scalar::Raw +also stores the size (in bytes) of this scalar value; we are eliding that here.

+

The next statement asserts that said boolean is 0. In case the assertion +fails, its error message is used for reporting a compile-time error.

+

Since it does not fail, Operand::Immediate(Immediate::Scalar(Scalar::Raw { data: 4054, .. })) is stored in the virtual memory it was allocated before the +evaluation. _0 always refers to that location directly.

+

After the evaluation is done, the return value is converted from Operand to +ConstValue by op_to_const: the former representation is geared towards +what is needed during const evaluation, while ConstValue is shaped by the +needs of the remaining parts of the compiler that consume the results of const +evaluation. As part of this conversion, for types with scalar values, even if +the resulting Operand is Indirect, it will return an immediate +ConstValue::Scalar(computed_value) (instead of the usual ConstValue::ByRef). +This makes using the result much more efficient and also more convenient, as no +further queries need to be executed in order to get at something as simple as a +usize.

+

Future evaluations of the same constants will not actually invoke +the interpreter, but just use the cached result.

+

Datastructures

+

The interpreter's outside-facing datastructures can be found in +rustc_middle/src/mir/interpret. +This is mainly the error enum and the ConstValue and Scalar types. A +ConstValue can be either Scalar (a single Scalar, i.e., integer or thin +pointer), Slice (to represent byte slices and strings, as needed for pattern +matching) or ByRef, which is used for anything else and refers to a virtual +allocation. These allocations can be accessed via the methods on +tcx.interpret_interner. A Scalar is either some Raw integer or a pointer; +see the next section for more on that.

+

If you are expecting a numeric result, you can use eval_usize (panics on +anything that can't be represented as a u64) or try_eval_usize which results +in an Option<u64> yielding the Scalar if possible.

+

Memory

+

To support any kind of pointers, the interpreter needs to have a "virtual memory" that the +pointers can point to. This is implemented in the Memory type. In the +simplest model, every global variable, stack variable and every dynamic +allocation corresponds to an Allocation in that memory. (Actually using an +allocation for every MIR stack variable would be very inefficient; that's why we +have Operand::Immediate for stack variables that are both small and never have +their address taken. But that is purely an optimization.)

+

Such an Allocation is basically just a sequence of u8 storing the value of +each byte in this allocation. (Plus some extra data, see below.) Every +Allocation has a globally unique AllocId assigned in Memory. With that, a +Pointer consists of a pair of an AllocId (indicating the allocation) and +an offset into the allocation (indicating which byte of the allocation the +pointer points to). It may seem odd that a Pointer is not just an integer +address, but remember that during const evaluation, we cannot know at which +actual integer address the allocation will end up -- so we use AllocId as +symbolic base addresses, which means we need a separate offset. (As an aside, +it turns out that pointers at run-time are +more than just integers, too.)

+

These allocations exist so that references and raw pointers have something to +point to. There is no global linear heap in which things are allocated, but each +allocation (be it for a local variable, a static or a (future) heap allocation) +gets its own little memory with exactly the required size. So if you have a +pointer to an allocation for a local variable a, there is no possible (no +matter how unsafe) operation that you can do that would ever change said pointer +to a pointer to a different local variable b. +Pointer arithmetic on a will only ever change its offset; the AllocId stays the same.

+

This, however, causes a problem when we want to store a Pointer into an +Allocation: we cannot turn it into a sequence of u8 of the right length! +AllocId and offset together are twice as big as a pointer "seems" to be. This +is what the relocation field of Allocation is for: the byte offset of the +Pointer gets stored as a bunch of u8, while its AllocId gets stored +out-of-band. The two are reassembled when the Pointer is read from memory. +The other bit of extra data an Allocation needs is undef_mask for keeping +track of which of its bytes are initialized.

+

Global memory and exotic allocations

+

Memory exists only during evaluation; it gets destroyed when the +final value of the constant is computed. In case that constant contains any +pointers, those get "interned" and moved to a global "const eval memory" that is +part of TyCtxt. These allocations stay around for the remaining computation +and get serialized into the final output (so that dependent crates can use +them).

+

Moreover, to also support function pointers, the global memory in TyCtxt can +also contain "virtual allocations": instead of an Allocation, these contain an +Instance. That allows a Pointer to point to either normal data or a +function, which is needed to be able to evaluate casts from function pointers to +raw pointers.

+

Finally, the GlobalAlloc type used in the global memory also contains a +variant Static that points to a particular const or static item. This is +needed to support circular statics, where we need to have a Pointer to a +static for which we cannot yet have an Allocation as we do not know the +bytes of its value.

+

Pointer values vs Pointer types

+

One common cause of confusion in the interpreter is that being a pointer value and having +a pointer type are entirely independent properties. By "pointer value", we +refer to a Scalar::Ptr containing a Pointer and thus pointing somewhere into +the interpreter's virtual memory. This is in contrast to Scalar::Raw, which is just some +concrete integer.

+

However, a variable of pointer or reference type, such as *const T or &T, +does not have to have a pointer value: it could be obtained by casting or +transmuting an integer to a pointer. +And similarly, when casting or transmuting a reference to some +actual allocation to an integer, we end up with a pointer value +(Scalar::Ptr) at integer type (usize). This is a problem because we +cannot meaningfully perform integer operations such as division on pointer +values.

+

Interpretation

+

Although the main entry point to constant evaluation is the tcx.const_eval_* +functions, there are additional functions in +rustc_const_eval/src/const_eval +that allow accessing the fields of a ConstValue (ByRef or otherwise). You should +never have to access an Allocation directly except for translating it to the +compilation target (at the moment just LLVM).

+

The interpreter starts by creating a virtual stack frame for the current constant that is +being evaluated. There's essentially no difference between a constant and a +function with no arguments, except that constants do not allow local (named) +variables at the time of writing this guide.

+

A stack frame is defined by the Frame type in +rustc_const_eval/src/interpret/eval_context.rs +and contains all the local +variables memory (None at the start of evaluation). Each frame refers to the +evaluation of either the root constant or subsequent calls to const fn. The +evaluation of another constant simply calls tcx.const_eval_*, which produce an +entirely new and independent stack frame.

+

The frames are just a Vec<Frame>, there's no way to actually refer to a +Frame's memory even if horrible shenanigans are done via unsafe code. The only +memory that can be referred to are Allocations.

+

The interpreter now calls the step method (in +rustc_const_eval/src/interpret/step.rs +) until it either returns an error or has no further statements to execute. Each +statement will now initialize or modify the locals or the virtual memory +referred to by a local. This might require evaluating other constants or +statics, which just recursively invokes tcx.const_eval_*.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/contributing.html b/contributing.html new file mode 100644 index 000000000..1d806f93c --- /dev/null +++ b/contributing.html @@ -0,0 +1,603 @@ + + + + + + Contribution procedures - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Contribution procedures

+ +

Bug reports

+

While bugs are unfortunate, they're a reality in software. We can't fix what we +don't know about, so please report liberally. If you're not sure if something +is a bug or not, feel free to file a bug anyway.

+

If you believe reporting your bug publicly represents a security risk to Rust users, +please follow our instructions for reporting security vulnerabilities.

+

If you're using the nightly channel, please check if the bug exists in the +latest toolchain before filing your bug. It might be fixed already.

+

If you have the chance, before reporting a bug, please search existing issues, +as it's possible that someone else has already reported your error. This doesn't +always work, and sometimes it's hard to know what to search for, so consider this +extra credit. We won't mind if you accidentally file a duplicate report.

+

Similarly, to help others who encountered the bug find your issue, consider +filing an issue with a descriptive title, which contains information that might +be unique to it. This can be the language or compiler feature used, the +conditions that trigger the bug, or part of the error message if there is any. +An example could be: "impossible case reached" on lifetime inference for impl +Trait in return position.

+

Opening an issue is as easy as following this +link and filling out the fields +in the appropriate provided template.

+

Bug fixes or "normal" code changes

+

For most PRs, no special procedures are needed. You can just open a PR, and it +will be reviewed, approved, and merged. This includes most bug fixes, +refactorings, and other user-invisible changes. The next few sections talk +about exceptions to this rule.

+

Also, note that it is perfectly acceptable to open WIP PRs or GitHub Draft PRs. +Some people prefer to do this so they can get feedback along the +way or share their code with a collaborator. Others do this so they can utilize +the CI to build and test their PR (e.g. when developing on a slow machine).

+

New features

+

Rust has strong backwards-compatibility guarantees. Thus, new features can't +just be implemented directly in stable Rust. Instead, we have 3 release +channels: stable, beta, and nightly.

+
    +
  • Stable: this is the latest stable release for general usage.
  • +
  • Beta: this is the next release (will be stable within 6 weeks).
  • +
  • Nightly: follows the master branch of the repo. This is the only +channel where unstable, incomplete, or experimental features are usable with +feature gates.
  • +
+

See this chapter on implementing new features for more +information.

+

Breaking changes

+

Breaking changes have a dedicated section in the dev-guide.

+

Major changes

+

The compiler team has a special process for large changes, whether or not they +cause breakage. This process is called a Major Change Proposal (MCP). MCP is a +relatively lightweight mechanism for getting feedback on large changes to the +compiler (as opposed to a full RFC or a design meeting with the team).

+

Example of things that might require MCPs include major refactorings, changes +to important types, or important changes to how the compiler does something, or +smaller user-facing changes.

+

When in doubt, ask on zulip. It would be a shame to put a lot of work +into a PR that ends up not getting merged! See this document for +more info on MCPs.

+

Performance

+

Compiler performance is important. We have put a lot of effort over the last +few years into gradually improving it.

+

If you suspect that your change may cause a performance regression (or +improvement), you can request a "perf run" (and your reviewer may also request one +before approving). This is yet another bot that will compile a collection of +benchmarks on a compiler with your changes. The numbers are reported +here, and you can see a comparison of your changes against the latest +master.

+
+

For an introduction to the performance of Rust code in general +which would also be useful in rustc development, see The Rust Performance Book.

+
+

Pull requests

+

Pull requests (or PRs for short) are the primary mechanism we use to change Rust. +GitHub itself has some great documentation on using the +Pull Request feature. We use the "fork and pull" model described here, +where contributors push changes to their personal fork and create pull requests to +bring those changes into the source repository. We have more info about how to use git +when contributing to Rust under the git section.

+
+

Advice for potentially large, complex, cross-cutting and/or very domain-specific changes

+

The compiler reviewers on rotation usually each have areas of the compiler that they know well, +but also have areas that they are not very familiar with. If your PR contains changes that are +large, complex, cross-cutting and/or highly domain-specific, it becomes very difficult to find a +suitable reviewer who is comfortable in reviewing all of the changes in such a PR. This is also +true if the changes are not only compiler-specific but also contains changes which fall under the +purview of reviewers from other teams, like the standard library team. There's a bot +which notifies the relevant teams and pings people who have setup specific alerts based on the +files modified.

+

Before making such changes, you are strongly encouraged to discuss your proposed changes with +the compiler team beforehand (and with other teams that the changes would require approval +from), and work with the compiler team to see if we can help you break down a large potentially +unreviewable PR into a series of smaller more individually reviewable PRs.

+

You can communicate with the compiler team by creating a #t-compiler thread on zulip +to discuss your proposed changes.

+

Communicating with the compiler team beforehand helps in several ways:

+
    +
  1. It increases the likelihood of your PRs being reviewed in a timely manner. +
      +
    • We can help you identify suitable reviewers before you open actual PRs, or help find +advisors and liaisons to help you navigate the change procedures, or help with running +try-jobs, perf runs and crater runs as suitable.
    • +
    +
  2. +
  3. It helps the compiler team track your changes.
  4. +
  5. The compiler team can perform vibe checks on your changes early and often, to see if the +direction of the changes align with what the compiler team prefers to see.
  6. +
  7. Helps to avoid situations where you may have invested significant time and effort into large +changes that the compiler team might not be willing to accept, or finding out very late that the +changes are in a direction that the compiler team disagrees with.
  8. +
+
+

Keeping your branch up-to-date

+

The CI in rust-lang/rust applies your patches directly against the current master, +not against the commit your branch is based on. This can lead to unexpected failures +if your branch is outdated, even when there are no explicit merge conflicts.

+

Before submitting or updating a PR, make sure to update your branch +as mentioned here if it's significantly +behind the master branch (e.g., more than 100 commits behind). +This fetches the latest master branch and rebases your changes on top of it, +ensuring your PR is tested against the latest code.

+

After rebasing, it's recommended to run the relevant tests locally to catch any issues before CI runs.

+

r?

+

All pull requests are reviewed by another person. We have a bot, +@rustbot, that will automatically assign a random person +to review your request based on which files you changed.

+

If you want to request that a specific person reviews your pull request, you +can add an r? to the pull request description or in a comment. For example, +if you want to ask a review to @awesome-reviewer, add

+
r? @awesome-reviewer
+
+

to the end of the pull request description, and @rustbot will assign +them instead of a random person. This is entirely optional.

+

You can also assign a random reviewer from a specific team by writing r? rust-lang/groupname. +As an example, +if you were making a diagnostics change, +then you could get a reviewer from the diagnostics team by adding:

+
r? rust-lang/diagnostics
+
+

For a full list of possible groupnames, +check the adhoc_groups section at the triagebot.toml config file, +or the list of teams in the rust-lang teams database.

+

Waiting for reviews

+
+

NOTE

+

Pull request reviewers are often working at capacity, +and many of them are contributing on a volunteer basis. +In order to minimize review delays, +pull request authors and assigned reviewers should ensure that the review label +(S-waiting-on-review and S-waiting-on-author) stays updated, +invoking these commands when appropriate:

+
    +
  • +

    @rustbot author: +the review is finished, +and PR author should check the comments and take action accordingly.

    +
  • +
  • +

    @rustbot review: +the author is ready for a review, +and this PR will be queued again in the reviewer's queue.

    +
  • +
+
+

Please note that the reviewers are humans, who for the most part work on rustc +in their free time. This means that they can take some time to respond and review +your PR. It also means that reviewers can miss some PRs that are assigned to them.

+

To try to move PRs forward, the Triage WG regularly goes through all PRs that +are waiting for review and haven't been discussed for at least 2 weeks. If you +don't get a review within 2 weeks, feel free to ask the Triage WG on +Zulip (#t-release/triage). They have knowledge of when to ping, who might be +on vacation, etc.

+

The reviewer may request some changes using the GitHub code review interface. +They may also request special procedures for some PRs. +See Crater and Breaking Changes chapters for some examples of such procedures.

+

CI

+

In addition to being reviewed by a human, pull requests are automatically tested, +thanks to continuous integration (CI). Basically, every time you open and update +a pull request, CI builds the compiler and tests it against the +compiler test suite, and also performs other tests such as checking that +your pull request is in compliance with Rust's style guidelines.

+

Running continuous integration tests allows PR authors to catch mistakes early +without going through a first review cycle, and also helps reviewers stay aware +of the status of a particular pull request.

+

Rust has plenty of CI capacity, and you should never have to worry about wasting +computational resources each time you push a change. It is also perfectly fine +(and even encouraged!) to use the CI to test your changes if it can help your +productivity. In particular, we don't recommend running the full ./x test suite locally, +since it takes a very long time to execute.

+

r+

+

After someone has reviewed your pull request, they will leave an annotation +on the pull request with an r+. It will look something like this:

+
@bors r+
+
+

This tells @bors, our lovable integration bot, that your pull request has +been approved. The PR then enters the merge queue, where @bors +will run all the tests on every platform we support. If it all works out, +@bors will merge your code into master and close the pull request.

+

Depending on the scale of the change, you may see a slightly different form of r+:

+
@bors r+ rollup
+
+

The additional rollup tells @bors that this change should always be "rolled up". +Changes that are rolled up are tested and merged alongside other PRs, to +speed the process up. Typically only small changes that are expected not to conflict +with one another are marked as "always roll up".

+

Be patient; this can take a while and the queue can sometimes be long. PRs are never merged by hand.

+

Opening a PR

+

You are now ready to file a pull request? Great! Here are a few points you +should be aware of.

+

All pull requests should be filed against the master branch, +unless you know for sure that you should target a different branch.

+

Make sure your pull request is in compliance with Rust's style guidelines by running

+
$ ./x test tidy --bless
+
+

We recommend to make this check before every pull request (and every new commit +in a pull request); you can add git hooks +before every push to make sure you never forget to make this check. +The CI will also run tidy and will fail if tidy fails.

+

Rust follows a no merge-commit policy, meaning, when you encounter merge +conflicts you are expected to always rebase instead of merging. E.g. always use +rebase when bringing the latest changes from the master branch to your feature +branch. If your PR contains merge commits, it will get marked as has-merge-commits. +Once you have removed the merge commits, e.g., through an interactive rebase, you +should remove the label again:

+
@rustbot label -has-merge-commits
+
+

See this chapter for more details.

+

If you encounter merge conflicts or when a reviewer asks you to perform some +changes, your PR will get marked as S-waiting-on-author. When you resolve +them, you should use @rustbot to mark it as S-waiting-on-review:

+
@rustbot ready
+
+

GitHub allows closing issues using keywords. This feature +should be used to keep the issue tracker tidy. However, it is generally preferred +to put the "closes #123" text in the PR description rather than the issue commit; +particularly during rebasing, citing the issue number in the commit can "spam" +the issue in question.

+

However, if your PR fixes a stable-to-beta or stable-to-stable regression and has +been accepted for a beta and/or stable backport (i.e., it is marked beta-accepted +and/or stable-accepted), please do not use any such keywords since we don't +want the corresponding issue to get auto-closed once the fix lands on master. +Please update the PR description while still mentioning the issue somewhere. +For example, you could write Fixes (after beta backport) #NNN..

+

As for further actions, please keep a sharp look-out for a PR whose title begins with +[beta] or [stable] and which backports the PR in question. When that one gets +merged, the relevant issue can be closed. The closing comment should mention all +PRs that were involved. If you don't have the permissions to close the issue, please +leave a comment on the original PR asking the reviewer to close it for you.

+

Reverting a PR

+

When a PR leads to miscompile, significant performance regressions, or other critical issues, we may +want to revert that PR with a regression test case. You can also check out the revert policy on +Forge docs (which is mainly targeted for reviewers, but contains useful info for PR authors too).

+

If the PR contains huge changes, it can be challenging to revert, making it harder to review +incremental fixes in subsequent updates. Or if certain code in that PR is heavily depended upon by +subsequent PRs, reverting it can become difficult.

+

In such cases, we can identify the problematic code and disable it for some input, as shown in #128271.

+

For MIR optimizations, we can also use the -Zunsound-mir-opt option to gate the mir-opt, as shown +in #132356.

+

External dependencies

+

This section has moved to "Using External Repositories".

+

Writing documentation

+

Documentation improvements are very welcome. The source of doc.rust-lang.org +is located in src/doc in the tree, and standard API documentation is generated +from the source code itself (e.g. library/std/src/lib.rs). Documentation pull requests +function in the same way as other pull requests.

+

To find documentation-related issues, use the A-docs label.

+

You can find documentation style guidelines in RFC 1574.

+

To build the standard library documentation, use x doc --stage 0 library --open. +To build the documentation for a book (e.g. the unstable book), use x doc src/doc/unstable-book. +Results should appear in build/host/doc, as well as automatically open in your default browser. +See Building Documentation for more +information.

+

You can also use rustdoc directly to check small fixes. For example, +rustdoc src/doc/reference.md will render reference to doc/reference.html. +The CSS might be messed up, but you can verify that the HTML is right.

+

Contributing to rustc-dev-guide

+

Contributions to the rustc-dev-guide are always welcome, and can be made directly at +the rust-lang/rustc-dev-guide repo. +The issue tracker in that repo is also a great way to find things that need doing. +There are issues for beginners and advanced compiler devs alike!

+

Just a few things to keep in mind:

+
    +
  • +

    Please try to avoid overly long lines and use semantic line breaks (where you break the line after each sentence). +There is no strict limit on line lengths; let the sentence or part of the sentence flow to its proper end on the same line.

    +
  • +
  • +

    When contributing text to the guide, please contextualize the information with some time period +and/or a reason so that the reader knows how much to trust the information. +Aim to provide a reasonable amount of context, possibly including but not limited to:

    +
      +
    • +

      A reason for why the data may be out of date other than "change", +as change is a constant across the project.

      +
    • +
    • +

      The date the comment was added, e.g. instead of writing "Currently, ..." +or "As of now, ...", +consider adding the date, in one of the following formats:

      +
        +
      • Jan 2021
      • +
      • January 2021
      • +
      • jan 2021
      • +
      • january 2021
      • +
      +

      There is a CI action (in .github/workflows/date-check.yml) +that generates a monthly report showing those that are over 6 months old +(example).

      +

      For the action to pick the date, +add a special annotation before specifying the date:

      +
      <!-- date-check --> Apr 2025
      +
      +

      Example:

      +
      As of <!-- date-check --> Apr 2025, the foo did the bar.
      +
      +

      For cases where the date should not be part of the visible rendered output, +use the following instead:

      +
      <!-- date-check: Apr 2025 -->
      +
      +
    • +
    • +

      A link to a relevant WG, tracking issue, rustc rustdoc page, or similar, that may provide +further explanation for the change process or a way to verify that the information is not +outdated.

      +
    • +
    +
  • +
  • +

    If a text grows rather long (more than a few page scrolls) or complicated (more than four +subsections), +it might benefit from having a Table of Contents at the beginning, +which you can auto-generate by including the <!-- toc --> marker at the top.

    +
  • +
+

Issue triage

+

Please see https://forge.rust-lang.org/release/issue-triaging.html.

+

Rfcbot labels

+

rfcbot uses its own labels for tracking the process of coordinating +asynchronous decisions, such as approving or rejecting a change. +This is used for RFCs, issues, and pull requests.

+
+ + + + + + + + + +
LabelsColorDescription
proposed-final-comment-period GrayCurrently awaiting signoff of all team members in order to enter the final comment period.
disposition-merge GreenIndicates the intent is to merge the change.
disposition-close RedIndicates the intent is to not accept the change and close it.
disposition-postpone GrayIndicates the intent is to not accept the change at this time and postpone it to a later date.
final-comment-period BlueCurrently soliciting final comments before merging or closing.
finished-final-comment-period Light YellowThe final comment period has concluded, and the issue will be merged or closed.
postponed YellowThe issue has been postponed.
closed RedThe issue has been rejected.
to-announce GrayIssues that have finished their final-comment-period and should be publicly announced. Note: the rust-lang/rust repository uses this label differently, to announce issues at the triage meetings.
+
+ +

This section has moved to the "About this guide" chapter.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/conventions.html b/conventions.html new file mode 100644 index 000000000..cdee8cae4 --- /dev/null +++ b/conventions.html @@ -0,0 +1,344 @@ + + + + + + Coding conventions - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Coding conventions

+

This file offers some tips on the coding conventions for rustc. This +chapter covers formatting, coding for correctness, +using crates from crates.io, and some tips on +structuring your PR for easy review.

+

+

Formatting and the tidy script

+

rustc is moving towards the Rust standard coding style.

+

However, for now we don't use stable rustfmt; we use a pinned version with a +special config, so this may result in different style from normal rustfmt. +Therefore, formatting this repository using cargo fmt is not recommended.

+

Instead, formatting should be done using ./x fmt. It's a good habit to run +./x fmt before every commit, as this reduces conflicts later.

+

Formatting is checked by the tidy script. It runs automatically when you do +./x test and can be run in isolation with ./x fmt --check.

+

If you want to use format-on-save in your editor, the pinned version of +rustfmt is built under build/<target>/stage0/bin/rustfmt.

+

Formatting C++ code

+

The compiler contains some C++ code for interfacing with parts of LLVM that +don't have a stable C API. +When modifying that code, use this command to format it:

+
./x test tidy --extra-checks cpp:fmt --bless
+
+

This uses a pinned version of clang-format, to avoid relying on the local +environment.

+

Formatting and linting Python code

+

The Rust repository contains quite a lot of Python code. We try to keep +it both linted and formatted by the ruff tool.

+

When modifying Python code, use this command to format it:

+
./x test tidy --extra-checks py:fmt --bless
+
+

And, the following command to run lints:

+
./x test tidy --extra-checks py:lint
+
+

These use a pinned version of ruff, to avoid relying on the local environment.

+

+ + + + +

In the past, files began with a copyright and license notice. Please omit +this notice for new files licensed under the standard terms (dual +MIT/Apache-2.0).

+

All of the copyright notices should be gone by now, but if you come across one +in the rust-lang/rust repo, feel free to open a PR to remove it.

+

Line length

+

Lines should be at most 100 characters. It's even better if you can +keep things to 80.

+

Sometimes, and particularly for tests, it can be necessary to exempt yourself from this limit. +In that case, you can add a comment towards the top of the file like so:

+
#![allow(unused)]
+fn main() {
+// ignore-tidy-linelength
+}
+

Tabs vs spaces

+

Prefer 4-space indents.

+

+

Coding for correctness

+

Beyond formatting, there are a few other tips that are worth +following.

+

Prefer exhaustive matches

+

Using _ in a match is convenient, but it means that when new +variants are added to the enum, they may not get handled correctly. +Ask yourself: if a new variant were added to this enum, what's the +chance that it would want to use the _ code, versus having some +other treatment? Unless the answer is "low", then prefer an +exhaustive match.

+

The same advice applies to if let and while let, +which are effectively tests for a single variant.

+

Use "TODO" comments for things you don't want to forget

+

As a useful tool to yourself, you can insert a // TODO comment +for something that you want to get back to before you land your PR:

+
fn do_something() {
+    if something_else {
+        unimplemented!(); // TODO write this
+    }
+}
+

The tidy script will report an error for a // TODO comment, so this +code would not be able to land until the TODO is fixed (or removed).

+

This can also be useful in a PR as a way to signal from one commit that you are +leaving a bug that a later commit will fix:

+
if foo {
+    return true; // TODO wrong, but will be fixed in a later commit
+}
+

+

Using crates from crates.io

+

See the crates.io dependencies section.

+

+

How to structure your PR

+

How you prepare the commits in your PR can make a big difference for the +reviewer. Here are some tips.

+

Isolate "pure refactorings" into their own commit. For example, if +you rename a method, then put that rename into its own commit, along +with the renames of all the uses.

+

More commits is usually better. If you are doing a large change, +it's almost always better to break it up into smaller steps that can +be independently understood. The one thing to be aware of is that if +you introduce some code following one strategy, then change it +dramatically (versus adding to it) in a later commit, that +'back-and-forth' can be confusing.

+

Format liberally. While only the final commit of a PR must be correctly +formatted, it is both easier to review and less noisy to format each commit +individually using ./x fmt.

+

No merges. We do not allow merge commits into our history, other +than those by bors. If you get a merge conflict, rebase instead via a +command like git rebase -i rust-lang/master (presuming you use the +name rust-lang for your remote).

+

Individual commits do not have to build (but it's nice). We do not +require that every intermediate commit successfully builds – we only +expect to be able to bisect at a PR level. However, if you can make +individual commits build, that is always helpful.

+

Naming conventions

+

Apart from normal Rust style/naming conventions, there are also some specific +to the compiler.

+
    +
  • +

    cx tends to be short for "context" and is often used as a suffix. For +example, tcx is a common name for the Typing Context.

    +
  • +
  • +

    'tcx is used as the lifetime name for the Typing Context.

    +
  • +
  • +

    Because crate is a keyword, if you need a variable to represent something +crate-related, often the spelling is changed to krate.

    +
  • +
+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/coroutine-closures.html b/coroutine-closures.html new file mode 100644 index 000000000..e336d2d74 --- /dev/null +++ b/coroutine-closures.html @@ -0,0 +1,523 @@ + + + + + + Async closures/"coroutine-closures" - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Async closures/"coroutine-closures"

+ +

Please read RFC 3668 to understand the general motivation of the feature. This is a very technical and somewhat "vertical" chapter; ideally we'd split this and sprinkle it across all the relevant chapters, but for the purposes of understanding async closures holistically, I've put this together all here in one chapter.

+

Coroutine-closures -- a technical deep dive

+

Coroutine-closures are a generalization of async closures, being special syntax for closure expressions which return a coroutine, notably one that is allowed to capture from the closure's upvars.

+

For now, the only usable kind of coroutine-closure is the async closure, and supporting async closures is the extent of this PR. We may eventually support gen || {}, etc., and most of the problems and curiosities described in this document apply to all coroutine-closures in general.

+

As a consequence of the code being somewhat general, this document may flip between calling them "async closures" and "coroutine-closures". The future that is returned by the async closure will generally be called the "coroutine" or the "child coroutine".

+

HIR

+

Async closures (and in the future, other coroutine flavors such as gen) are represented in HIR as a hir::Closure. +The closure-kind of the hir::Closure is ClosureKind::CoroutineClosure(_)1, which wraps an async block, which is also represented in HIR as a hir::Closure. +The closure-kind of the async block is ClosureKind::Closure(CoroutineKind::Desugared(_, CoroutineSource::Closure))2.

+

Like async fn, when lowering an async closure's body, we need to unconditionally move all of the closures arguments into the body so they are captured. This is handled by lower_coroutine_body_with_moved_arguments3. The only notable quirk with this function is that the async block we end up generating as a capture kind of CaptureBy::ByRef4. We later force all of the closure args to be captured by-value5, but we don't want the whole async block to act as if it were an async move, since that would defeat the purpose of the self-borrowing of an async closure.

+

rustc_middle::ty Representation

+

For the purposes of keeping the implementation mostly future-compatible (i.e. with gen || {} and async gen || {}), most of this section calls async closures "coroutine-closures".

+

The main thing that this PR introduces is a new TyKind called CoroutineClosure6 and corresponding variants on other relevant enums in typeck and borrowck (UpvarArgs, DefiningTy, AggregateKind).

+

We introduce a new TyKind instead of generalizing the existing TyKind::Closure due to major representational differences in the type. The major differences between CoroutineClosures can be explored by first inspecting the CoroutineClosureArgsParts, which is the "unpacked" representation of the coroutine-closure's generics.

+

Similarities to closures

+

Like a closure, we have parent_args, a closure_kind_ty, and a tupled_upvars_ty. These represent the same thing as their closure counterparts; namely: the generics inherited from the body that the closure is defined in, the maximum "calling capability" of the closure (i.e. must it be consumed to be called, like FnOnce, or can it be called by-ref), and the captured upvars of the closure itself.

+

The signature

+

A traditional closure has a fn_sig_as_fn_ptr_ty which it uses to represent the signature of the closure. In contrast, we store the signature of a coroutine closure in a somewhat "exploded" way, since coroutine-closures have two signatures depending on what AsyncFn* trait you call it with (see below sections).

+

Conceptually, the coroutine-closure may be thought as containing several different signature types depending on whether it is being called by-ref or by-move.

+

To conveniently recreate both of these signatures, the signature_parts_ty stores all of the relevant parts of the coroutine returned by this coroutine-closure. This signature parts type will have the general shape of fn(tupled_inputs, resume_ty) -> (return_ty, yield_ty), where resume_ty, return_ty, and yield_ty are the respective types for the coroutine returned by the coroutine-closure7.

+

The compiler mainly deals with the CoroutineClosureSignature type8, which is created by extracting the relevant types out of the fn() ptr type described above, and which exposes methods that can be used to construct the coroutine that the coroutine-closure ultimately returns.

+

The data we need to carry along to construct a Coroutine return type

+

Along with the data stored in the signature, to construct a TyKind::Coroutine to return, we also need to store the "witness" of the coroutine.

+

So what about the upvars of the Coroutine that is returned? Well, for AsyncFnOnce (i.e. call-by-move), this is simply the same upvars that the coroutine returns. But for AsyncFnMut/AsyncFn, the coroutine that is returned from the coroutine-closure borrows data from the coroutine-closure with a given "environment" lifetime9. This corresponds to the &self lifetime10 on the AsyncFnMut/AsyncFn call signature, and the GAT lifetime of the ByRef11.

+

Actually getting the coroutine return type(s)

+

To most easily construct the Coroutine that a coroutine-closure returns, you can use the to_coroutine_given_kind_and_upvars12 helper on CoroutineClosureSignature, which can be acquired from the CoroutineClosureArgs.

+

Most of the args to that function will be components that you can get out of the CoroutineArgs, except for the goal_kind: ClosureKind which controls which flavor of coroutine to return based off of the ClosureKind passed in -- i.e. it will prepare the by-ref coroutine if ClosureKind::Fn | ClosureKind::FnMut, and the by-move coroutine if ClosureKind::FnOnce.

+

Trait Hierarchy

+

We introduce a parallel hierarchy of Fn* traits that are implemented for . The motivation for the introduction was covered in a blog post: Async Closures.

+

All currently-stable callable types (i.e., closures, function items, function pointers, and dyn Fn* trait objects) automatically implement AsyncFn*() -> T if they implement Fn*() -> Fut for some output type Fut, and Fut implements Future<Output = T>13.

+

Async closures implement AsyncFn* as their bodies permit; i.e. if they end up using upvars in a way that is compatible (i.e. if they consume or mutate their upvars, it may affect whether they implement AsyncFn and AsyncFnMut...)

+

Lending

+

We may in the future move AsyncFn* onto a more general set of LendingFn* traits; however, there are some concrete technical implementation details that limit our ability to use LendingFn ergonomically in the compiler today. These have to do with:

+
    +
  • Closure signature inference.
  • +
  • Limitations around higher-ranked trait bounds.
  • +
  • Shortcomings with error messages.
  • +
+

These limitations, plus the fact that the underlying trait should have no effect on the user experience of async closures and async Fn trait bounds, leads us to AsyncFn* for now. To ensure we can eventually move to these more general traits, the precise AsyncFn* trait definitions (including the associated types) are left as an implementation detail.

+

When do async closures implement the regular Fn* traits?

+

We mention above that "regular" callable types can implement AsyncFn*, but the reverse question exists of "can async closures implement Fn* too"? The short answer is "when it's valid", i.e. when the coroutine that would have been returned from AsyncFn/AsyncFnMut does not actually have any upvars that are "lent" from the parent coroutine-closure.

+

See the "follow-up: when do..." section below for an elaborated answer. The full answer describes a pretty interesting and hopefully thorough heuristic that is used to ensure that most async closures "just work".

+

Tale of two bodies...

+

When async closures are called with AsyncFn/AsyncFnMut, they return a coroutine that borrows from the closure. However, when they are called via AsyncFnOnce, we consume that closure, and cannot return a coroutine that borrows from data that is now dropped.

+

To work around this limitation, we synthesize a separate by-move MIR body for calling AsyncFnOnce::call_once on a coroutine-closure that can be called by-ref.

+

This body operates identically to the "normal" coroutine returned from calling the coroutine-closure, except for the fact that it has a different set of upvars, since we must move the captures from the parent coroutine-closure into the child coroutine.

+

Synthesizing the by-move body

+

When we want to access the by-move body of the coroutine returned by a coroutine-closure, we can do so via the coroutine_by_move_body_def_id14 query.

+

This query synthesizes a new MIR body by copying the MIR body of the coroutine and inserting additional derefs and field projections15 to preserve the semantics of the body.

+

Since we've synthesized a new def id, this query is also responsible for feeding a ton of other relevant queries for the MIR body. This query is ensure()d16 during the mir_promoted query, since it operates on the built mir of the coroutine.

+

Closure signature inference

+

The closure signature inference algorithm for async closures is a bit more complicated than the inference algorithm for "traditional" closures. Like closures, we iterate through all of the clauses that may be relevant (for the expectation type passed in)17.

+

To extract a signature, we consider two situations:

+
    +
  • Projection predicates with AsyncFnOnce::Output, which we will use to extract the inputs and output type for the closure. This corresponds to the situation that there was a F: AsyncFn*() -> T bound18.
  • +
  • Projection predicates with FnOnce::Output, which we will use to extract the inputs. For the output, we also try to deduce an output by looking for relevant Future::Output projection predicates. This corresponds to the situation that there was an F: Fn*() -> T, T: Future<Output = U> bound.19 +
      +
    • If there is no Future bound, we simply use a fresh infer var for the output. This corresponds to the case where one can pass an async closure to a combinator function like Option::map.20
    • +
    +
  • +
+

We support the latter case simply to make it easier for users to simply drop-in async || {} syntax, even when they're calling an API that was designed before first-class AsyncFn* traits were available.

+

Calling a closure before its kind has been inferred

+

We defer21 the computation of a coroutine-closure's "kind" (i.e. its maximum calling mode: AsyncFnOnce/AsyncFnMut/AsyncFn) until the end of typeck. However, since we want to be able to call that coroutine-closure before the end of typeck, we need to come up with the return type of the coroutine-closure before that.

+

Unlike regular closures, whose return type does not change depending on what Fn* trait we call it with, coroutine-closures do end up returning different coroutine types depending on the flavor of AsyncFn* trait used to call it.

+

Specifically, while the def-id of the returned coroutine does not change, the upvars22 (which are either borrowed or moved from the parent coroutine-closure) and the coroutine-kind23 are dependent on the calling mode.

+

We introduce a AsyncFnKindHelper trait which allows us to defer the question of "does this coroutine-closure support this calling mode"24 via a trait goal, and "what are the tupled upvars of this calling mode"25 via an associated type, which can be computed by appending the input types of the coroutine-closure to either the upvars or the "by ref" upvars computed during upvar analysis.

+

Ok, so why?

+

This seems a bit roundabout and complex, and I admit that it is. But let's think of the "do nothing" alternative -- we could instead mark all AsyncFn* goals as ambiguous until upvar analysis, at which point we would know exactly what to put into the upvars of the coroutine we return. However, this is actually very detrimental to inference in the program, since it means that programs like this would not be valid:

+
#![allow(unused)]
+fn main() {
+let c = async || -> String { .. };
+let s = c().await;
+// ^^^ If we can't project `<{c} as AsyncFn>::call()` to a coroutine, then the `IntoFuture::into_future` call inside of the `.await` stalls, and the type of `s` is left unconstrained as an infer var.
+s.as_bytes();
+// ^^^ That means we can't call any methods on the awaited return of a coroutine-closure, like... at all!
+}
+

So instead, we use this alias (in this case, a projection: AsyncFnKindHelper::Upvars<'env, ...>) to delay the computation of the tupled upvars and give us something to put in its place, while still allowing us to return a TyKind::Coroutine (which is a rigid type) and we may successfully confirm the built-in traits we need (in our case, Future), since the Future implementation doesn't depend on the upvars at all.

+

Upvar analysis

+

By and large, the upvar analysis for coroutine-closures and their child coroutines proceeds like normal upvar analysis. However, there are several interesting bits that happen to account for async closures' special natures:

+

Forcing all inputs to be captured

+

Like async fn, all input arguments are captured. We explicitly force26 all of these inputs to be captured by move so that the future coroutine returned by async closures does not depend on whether the input is used by the body or not, which would impart an interesting semver hazard.

+

Computing the by-ref captures

+

For a coroutine-closure that supports AsyncFn/AsyncFnMut, we must also compute the relationship between the captures of the coroutine-closure and its child coroutine. Specifically, the coroutine-closure may move a upvar into its captures, but the coroutine may only borrow that upvar.

+

We compute the "coroutine_captures_by_ref_ty" by looking at all of the child coroutine's captures and comparing them to the corresponding capture of the parent coroutine-closure27. This coroutine_captures_by_ref_ty ends up being represented as a for<'env> fn() -> captures... type, with the additional binder lifetime representing the "&self" lifetime of calling AsyncFn::async_call or AsyncFnMut::async_call_mut. We instantiate that binder later when actually calling the methods.

+

Note that not every by-ref capture from the parent coroutine-closure results in a "lending" borrow. See the Follow-up: When do async closures implement the regular Fn* traits? section below for more details, since this intimately influences whether or not the coroutine-closure is allowed to implement the Fn* family of traits.

+

By-move body + FnOnce quirk

+

There are several situations where the closure upvar analysis ends up inferring upvars for the coroutine-closure's child coroutine that are too relaxed, and end up resulting in borrow-checker errors. This is best illustrated via examples. For example, given:

+
#![allow(unused)]
+fn main() {
+fn force_fnonce<T: async FnOnce()>(t: T) -> T { t }
+
+let x = String::new();
+let c = force_fnonce(async move || {
+    println!("{x}");
+});
+}
+

x will be moved into the coroutine-closure, but the coroutine that is returned would only borrow &x. However, since force_fnonce forces the coroutine-closure to AsyncFnOnce, which is not lending, we must force the capture to happen by-move28.

+

Similarly:

+
#![allow(unused)]
+fn main() {
+let x = String::new();
+let y = String::new();
+let c = async move || {
+    drop(y);
+    println!("{x}");
+};
+}
+

x will be moved into the coroutine-closure, but the coroutine that is returned would only borrow &x. However, since we also capture y and drop it, the coroutine-closure is forced to be AsyncFnOnce. We must also force the capture of x to happen by-move. To determine this situation in particular, since unlike the last example the coroutine-kind's closure-kind has not yet been constrained, we must analyze the body of the coroutine-closure to see if how all of the upvars are used, to determine if they've been used in a way that is "consuming" -- i.e. that would force it to FnOnce29.

+

Follow-up: When do async closures implement the regular Fn* traits?

+

Well, first of all, all async closures implement FnOnce since they can always be called at least once.

+

For Fn/FnMut, the detailed answer involves answering a related question: is the coroutine-closure lending? Because if it is, then it cannot implement the non-lending Fn/FnMut traits.

+

Determining when the coroutine-closure must lend its upvars is implemented in the should_reborrow_from_env_of_parent_coroutine_closure helper function30. Specifically, this needs to happen in two places:

+
    +
  1. Are we borrowing data owned by the parent closure? We can determine if that is the case by checking if the parent capture is by-move, EXCEPT if we apply a deref projection, which means we're reborrowing a reference that we captured by-move.
  2. +
+
#![allow(unused)]
+fn main() {
+let x = &1i32; // Let's call this lifetime `'1`.
+let c = async move || {
+    println!("{:?}", *x);
+    // Even though the inner coroutine borrows by ref, we're only capturing `*x`,
+    // not `x`, so the inner closure is allowed to reborrow the data for `'1`.
+};
+}
+
    +
  1. If a coroutine is mutably borrowing from a parent capture, then that mutable borrow cannot live for longer than either the parent or the borrow that we have on the original upvar. Therefore we always need to borrow the child capture with the lifetime of the parent coroutine-closure's env.
  2. +
+
#![allow(unused)]
+fn main() {
+let mut x = 1i32;
+let c = async || {
+    x = 1;
+    // The parent borrows `x` for some `&'1 mut i32`.
+    // However, when we call `c()`, we implicitly autoref for the signature of
+    // `AsyncFnMut::async_call_mut`. Let's call that lifetime `'call`. Since
+    // the maximum that `&'call mut &'1 mut i32` can be reborrowed is `&'call mut i32`,
+    // the inner coroutine should capture w/ the lifetime of the coroutine-closure.
+};
+}
+

If either of these cases apply, then we should capture the borrow with the lifetime of the parent coroutine-closure's env. Luckily, if this function is not correct, then the program is not unsound, since we still borrowck and validate the choices made from this function -- the only side-effect is that the user may receive unnecessary borrowck errors.

+

Instance resolution

+

If a coroutine-closure has a closure-kind of FnOnce, then its AsyncFnOnce::call_once and FnOnce::call_once implementations resolve to the coroutine-closure's body31, and the Future::poll of the coroutine that gets returned resolves to the body of the child closure.

+

If a coroutine-closure has a closure-kind of FnMut/Fn, then the same applies to AsyncFn and the corresponding Future implementation of the coroutine that gets returned.31 However, we use a MIR shim to generate the implementation of AsyncFnOnce::call_once/FnOnce::call_once32, and Fn::call/FnMut::call_mut instances if they exist33.

+

This is represented by the ConstructCoroutineInClosureShim34. The receiver_by_ref bool will be true if this is the instance of Fn::call/FnMut::call_mut.35 The coroutine that all of these instances returns corresponds to the by-move body we will have synthesized by this point.36

+

Borrow-checking

+

It turns out that borrow-checking async closures is pretty straightforward. After adding a new DefiningTy::CoroutineClosure37 variant, and teaching borrowck how to generate the signature of the coroutine-closure38, borrowck proceeds totally fine.

+

One thing to note is that we don't borrow-check the synthetic body we make for by-move coroutines, since by construction (and the validity of the by-ref coroutine body it was derived from) it must be valid.

+
+
  1. +

    https://github.com/rust-lang/rust/blob/5ca0e9fa9b2f92b463a0a2b0b34315e09c0b7236/compiler/rustc_ast_lowering/src/expr.rs#L1147

    +
  2. +
  3. +

    https://github.com/rust-lang/rust/blob/5ca0e9fa9b2f92b463a0a2b0b34315e09c0b7236/compiler/rustc_ast_lowering/src/expr.rs#L1117

    +
  4. +
  5. +

    https://github.com/rust-lang/rust/blob/5ca0e9fa9b2f92b463a0a2b0b34315e09c0b7236/compiler/rustc_ast_lowering/src/item.rs#L1096-L1100

    +
  6. +
  7. +

    https://github.com/rust-lang/rust/blob/5ca0e9fa9b2f92b463a0a2b0b34315e09c0b7236/compiler/rustc_ast_lowering/src/item.rs#L1276-L1279

    +
  8. +
  9. +

    https://github.com/rust-lang/rust/blob/5ca0e9fa9b2f92b463a0a2b0b34315e09c0b7236/compiler/rustc_hir_typeck/src/upvar.rs#L250-L256

    +
  10. +
  11. +

    https://github.com/rust-lang/rust/blob/5ca0e9fa9b2f92b463a0a2b0b34315e09c0b7236/compiler/rustc_type_ir/src/ty_kind.rs#L163-L168

    +
  12. +
  13. +

    https://github.com/rust-lang/rust/blob/5ca0e9fa9b2f92b463a0a2b0b34315e09c0b7236/compiler/rustc_type_ir/src/ty_kind/closure.rs#L221-L229

    +
  14. +
  15. +

    https://github.com/rust-lang/rust/blob/5ca0e9fa9b2f92b463a0a2b0b34315e09c0b7236/compiler/rustc_type_ir/src/ty_kind/closure.rs#L362

    +
  16. +
  17. +

    https://github.com/rust-lang/rust/blob/5ca0e9fa9b2f92b463a0a2b0b34315e09c0b7236/compiler/rustc_type_ir/src/ty_kind/closure.rs#L447-L455

    +
  18. +
  19. +

    https://github.com/rust-lang/rust/blob/5ca0e9fa9b2f92b463a0a2b0b34315e09c0b7236/library/core/src/ops/async_function.rs#L36

    +
  20. +
  21. +

    https://github.com/rust-lang/rust/blob/5ca0e9fa9b2f92b463a0a2b0b34315e09c0b7236/library/core/src/ops/async_function.rs#L30

    +
  22. +
  23. +

    https://github.com/rust-lang/rust/blob/5ca0e9fa9b2f92b463a0a2b0b34315e09c0b7236/compiler/rustc_type_ir/src/ty_kind/closure.rs#L419

    +
  24. +
  25. +

    https://github.com/rust-lang/rust/blob/7c7bb7dc017545db732f5cffec684bbaeae0a9a0/compiler/rustc_next_trait_solver/src/solve/assembly/structural_traits.rs#L404-L409

    +
  26. +
  27. +

    https://github.com/rust-lang/rust/blob/5ca0e9fa9b2f92b463a0a2b0b34315e09c0b7236/compiler/rustc_mir_transform/src/coroutine/by_move_body.rs#L1-L70

    +
  28. +
  29. +

    https://github.com/rust-lang/rust/blob/5ca0e9fa9b2f92b463a0a2b0b34315e09c0b7236/compiler/rustc_mir_transform/src/coroutine/by_move_body.rs#L131-L195

    +
  30. +
  31. +

    https://github.com/rust-lang/rust/blob/5ca0e9fa9b2f92b463a0a2b0b34315e09c0b7236/compiler/rustc_mir_transform/src/lib.rs#L339-L342

    +
  32. +
  33. +

    https://github.com/rust-lang/rust/blob/5ca0e9fa9b2f92b463a0a2b0b34315e09c0b7236/compiler/rustc_hir_typeck/src/closure.rs#L345-L362

    +
  34. +
  35. +

    https://github.com/rust-lang/rust/blob/5ca0e9fa9b2f92b463a0a2b0b34315e09c0b7236/compiler/rustc_hir_typeck/src/closure.rs#L486-L487

    +
  36. +
  37. +

    https://github.com/rust-lang/rust/blob/5ca0e9fa9b2f92b463a0a2b0b34315e09c0b7236/compiler/rustc_hir_typeck/src/closure.rs#L517-L534

    +
  38. +
  39. +

    https://github.com/rust-lang/rust/blob/5ca0e9fa9b2f92b463a0a2b0b34315e09c0b7236/compiler/rustc_hir_typeck/src/closure.rs#L575-L590

    +
  40. +
  41. +

    https://github.com/rust-lang/rust/blob/705cfe0e966399e061d64dd3661bfbc57553ed87/compiler/rustc_hir_typeck/src/callee.rs#L169-L210

    +
  42. +
  43. +

    https://github.com/rust-lang/rust/blob/705cfe0e966399e061d64dd3661bfbc57553ed87/compiler/rustc_type_ir/src/ty_kind/closure.rs#L574-L576

    +
  44. +
  45. +

    https://github.com/rust-lang/rust/blob/705cfe0e966399e061d64dd3661bfbc57553ed87/compiler/rustc_type_ir/src/ty_kind/closure.rs#L554-L563

    +
  46. +
  47. +

    https://github.com/rust-lang/rust/blob/7c7bb7dc017545db732f5cffec684bbaeae0a9a0/library/core/src/ops/async_function.rs#L135-L144

    +
  48. +
  49. +

    https://github.com/rust-lang/rust/blob/7c7bb7dc017545db732f5cffec684bbaeae0a9a0/library/core/src/ops/async_function.rs#L146-L154

    +
  50. +
  51. +

    https://github.com/rust-lang/rust/blob/7c7bb7dc017545db732f5cffec684bbaeae0a9a0/compiler/rustc_hir_typeck/src/upvar.rs#L250-L259

    +
  52. +
  53. +

    https://github.com/rust-lang/rust/blob/7c7bb7dc017545db732f5cffec684bbaeae0a9a0/compiler/rustc_hir_typeck/src/upvar.rs#L375-L471

    +
  54. +
  55. +

    https://github.com/rust-lang/rust/blob/7c7bb7dc017545db732f5cffec684bbaeae0a9a0/compiler/rustc_hir_typeck/src/upvar.rs#L211-L248

    +
  56. +
  57. +

    https://github.com/rust-lang/rust/blob/7c7bb7dc017545db732f5cffec684bbaeae0a9a0/compiler/rustc_hir_typeck/src/upvar.rs#L532-L539

    +
  58. +
  59. +

    https://github.com/rust-lang/rust/blob/7c7bb7dc017545db732f5cffec684bbaeae0a9a0/compiler/rustc_hir_typeck/src/upvar.rs#L1818-L1860

    +
  60. +
  61. +

    https://github.com/rust-lang/rust/blob/705cfe0e966399e061d64dd3661bfbc57553ed87/compiler/rustc_ty_utils/src/instance.rs#L351 ↩2

    +
  62. +
  63. +

    https://github.com/rust-lang/rust/blob/705cfe0e966399e061d64dd3661bfbc57553ed87/compiler/rustc_ty_utils/src/instance.rs#L341-L349

    +
  64. +
  65. +

    https://github.com/rust-lang/rust/blob/705cfe0e966399e061d64dd3661bfbc57553ed87/compiler/rustc_ty_utils/src/instance.rs#L312-L326

    +
  66. +
  67. +

    https://github.com/rust-lang/rust/blob/705cfe0e966399e061d64dd3661bfbc57553ed87/compiler/rustc_middle/src/ty/instance.rs#L129-L134

    +
  68. +
  69. +

    https://github.com/rust-lang/rust/blob/705cfe0e966399e061d64dd3661bfbc57553ed87/compiler/rustc_middle/src/ty/instance.rs#L136-L141

    +
  70. +
  71. +

    https://github.com/rust-lang/rust/blob/07cbbdd69363da97075650e9be24b78af0bcdd23/compiler/rustc_middle/src/ty/instance.rs#L841

    +
  72. +
  73. +

    https://github.com/rust-lang/rust/blob/705cfe0e966399e061d64dd3661bfbc57553ed87/compiler/rustc_borrowck/src/universal_regions.rs#L110-L115

    +
  74. +
  75. +

    https://github.com/rust-lang/rust/blob/7c7bb7dc017545db732f5cffec684bbaeae0a9a0/compiler/rustc_borrowck/src/universal_regions.rs#L743-L790

    +
  76. +
+
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/crates-io.html b/crates-io.html new file mode 100644 index 000000000..38b00172c --- /dev/null +++ b/crates-io.html @@ -0,0 +1,234 @@ + + + + + + crates.io dependencies - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

crates.io dependencies

+

The Rust compiler supports building with some dependencies from crates.io. +Examples are log and env_logger.

+

In general, +you should avoid adding dependencies to the compiler for several reasons:

+
    +
  • The dependency may not be of high quality or well-maintained.
  • +
  • The dependency may not be using a compatible license.
  • +
  • The dependency may have transitive dependencies that have one of the above +problems.
  • +
+ +

Note that there is no official policy for vetting new dependencies to the compiler. +Decisions are made on a case-by-case basis, during code review.

+

Permitted dependencies

+

The tidy tool has a list of crates that are allowed. To add a +dependency that is not already in the compiler, you will need to add it to the list.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/css/chrome.css b/css/chrome.css new file mode 100644 index 000000000..7a95c2441 --- /dev/null +++ b/css/chrome.css @@ -0,0 +1,643 @@ +/* CSS for UI elements (a.k.a. chrome) */ + +html { + scrollbar-color: var(--scrollbar) var(--bg); +} +#searchresults a, +.content a:link, +a:visited, +a > .hljs { + color: var(--links); +} + +/* + body-container is necessary because mobile browsers don't seem to like + overflow-x on the body tag when there is a tag. +*/ +#body-container { + /* + This is used when the sidebar pushes the body content off the side of + the screen on small screens. Without it, dragging on mobile Safari + will want to reposition the viewport in a weird way. + */ + overflow-x: clip; +} + +/* Menu Bar */ + +#menu-bar, +#menu-bar-hover-placeholder { + z-index: 101; + margin: auto calc(0px - var(--page-padding)); +} +#menu-bar { + position: relative; + display: flex; + flex-wrap: wrap; + background-color: var(--bg); + border-block-end-color: var(--bg); + border-block-end-width: 1px; + border-block-end-style: solid; +} +#menu-bar.sticky, +#menu-bar-hover-placeholder:hover + #menu-bar, +#menu-bar:hover, +html.sidebar-visible #menu-bar { + position: -webkit-sticky; + position: sticky; + top: 0 !important; +} +#menu-bar-hover-placeholder { + position: sticky; + position: -webkit-sticky; + top: 0; + height: var(--menu-bar-height); +} +#menu-bar.bordered { + border-block-end-color: var(--table-border-color); +} +#menu-bar i, #menu-bar .icon-button { + position: relative; + padding: 0 8px; + z-index: 10; + line-height: var(--menu-bar-height); + cursor: pointer; + transition: color 0.5s; +} +@media only screen and (max-width: 420px) { + #menu-bar i, #menu-bar .icon-button { + padding: 0 5px; + } +} + +.icon-button { + border: none; + background: none; + padding: 0; + color: inherit; +} +.icon-button i { + margin: 0; +} + +.right-buttons { + margin: 0 15px; +} +.right-buttons a { + text-decoration: none; +} + +.left-buttons { + display: flex; + margin: 0 5px; +} +html:not(.js) .left-buttons button { + display: none; +} + +.menu-title { + display: inline-block; + font-weight: 200; + font-size: 2.4rem; + line-height: var(--menu-bar-height); + text-align: center; + margin: 0; + flex: 1; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +.menu-title { + cursor: pointer; +} + +.menu-bar, +.menu-bar:visited, +.nav-chapters, +.nav-chapters:visited, +.mobile-nav-chapters, +.mobile-nav-chapters:visited, +.menu-bar .icon-button, +.menu-bar a i { + color: var(--icons); +} + +.menu-bar i:hover, +.menu-bar .icon-button:hover, +.nav-chapters:hover, +.mobile-nav-chapters i:hover { + color: var(--icons-hover); +} + +/* Nav Icons */ + +.nav-chapters { + font-size: 2.5em; + text-align: center; + text-decoration: none; + + position: fixed; + top: 0; + bottom: 0; + margin: 0; + max-width: 150px; + min-width: 90px; + + display: flex; + justify-content: center; + align-content: center; + flex-direction: column; + + transition: color 0.5s, background-color 0.5s; +} + +.nav-chapters:hover { + text-decoration: none; + background-color: var(--theme-hover); + transition: background-color 0.15s, color 0.15s; +} + +.nav-wrapper { + margin-block-start: 50px; + display: none; +} + +.mobile-nav-chapters { + font-size: 2.5em; + text-align: center; + text-decoration: none; + width: 90px; + border-radius: 5px; + background-color: var(--sidebar-bg); +} + +/* Only Firefox supports flow-relative values */ +.previous { float: left; } +[dir=rtl] .previous { float: right; } + +/* Only Firefox supports flow-relative values */ +.next { + float: right; + right: var(--page-padding); +} +[dir=rtl] .next { + float: left; + right: unset; + left: var(--page-padding); +} + +/* Use the correct buttons for RTL layouts*/ +[dir=rtl] .previous i.fa-angle-left:before {content:"\f105";} +[dir=rtl] .next i.fa-angle-right:before { content:"\f104"; } + +@media only screen and (max-width: 1080px) { + .nav-wide-wrapper { display: none; } + .nav-wrapper { display: block; } +} + +/* sidebar-visible */ +@media only screen and (max-width: 1380px) { + #sidebar-toggle-anchor:checked ~ .page-wrapper .nav-wide-wrapper { display: none; } + #sidebar-toggle-anchor:checked ~ .page-wrapper .nav-wrapper { display: block; } +} + +/* Inline code */ + +:not(pre) > .hljs { + display: inline; + padding: 0.1em 0.3em; + border-radius: 3px; +} + +:not(pre):not(a) > .hljs { + color: var(--inline-code-color); + overflow-x: initial; +} + +a:hover > .hljs { + text-decoration: underline; +} + +pre { + position: relative; +} +pre > .buttons { + position: absolute; + z-index: 100; + right: 0px; + top: 2px; + margin: 0px; + padding: 2px 0px; + + color: var(--sidebar-fg); + cursor: pointer; + visibility: hidden; + opacity: 0; + transition: visibility 0.1s linear, opacity 0.1s linear; +} +pre:hover > .buttons { + visibility: visible; + opacity: 1 +} +pre > .buttons :hover { + color: var(--sidebar-active); + border-color: var(--icons-hover); + background-color: var(--theme-hover); +} +pre > .buttons i { + margin-inline-start: 8px; +} +pre > .buttons button { + cursor: inherit; + margin: 0px 5px; + padding: 4px 4px 3px 5px; + font-size: 23px; + + border-style: solid; + border-width: 1px; + border-radius: 4px; + border-color: var(--icons); + background-color: var(--theme-popup-bg); + transition: 100ms; + transition-property: color,border-color,background-color; + color: var(--icons); +} + +pre > .buttons button.clip-button { + padding: 2px 4px 0px 6px; +} +pre > .buttons button.clip-button::before { + /* clipboard image from octicons (https://github.com/primer/octicons/tree/v2.0.0) MIT license + */ + content: url('data:image/svg+xml,\ +\ +\ +'); + filter: var(--copy-button-filter); +} +pre > .buttons button.clip-button:hover::before { + filter: var(--copy-button-filter-hover); +} + +@media (pointer: coarse) { + pre > .buttons button { + /* On mobile, make it easier to tap buttons. */ + padding: 0.3rem 1rem; + } + + .sidebar-resize-indicator { + /* Hide resize indicator on devices with limited accuracy */ + display: none; + } +} +pre > code { + display: block; + padding: 1rem; +} + +/* FIXME: ACE editors overlap their buttons because ACE does absolute + positioning within the code block which breaks padding. The only solution I + can think of is to move the padding to the outer pre tag (or insert a div + wrapper), but that would require fixing a whole bunch of CSS rules. +*/ +.hljs.ace_editor { + padding: 0rem 0rem; +} + +pre > .result { + margin-block-start: 10px; +} + +/* Search */ + +#searchresults a { + text-decoration: none; +} + +mark { + border-radius: 2px; + padding-block-start: 0; + padding-block-end: 1px; + padding-inline-start: 3px; + padding-inline-end: 3px; + margin-block-start: 0; + margin-block-end: -1px; + margin-inline-start: -3px; + margin-inline-end: -3px; + background-color: var(--search-mark-bg); + transition: background-color 300ms linear; + cursor: pointer; +} + +mark.fade-out { + background-color: rgba(0,0,0,0) !important; + cursor: auto; +} + +.searchbar-outer { + margin-inline-start: auto; + margin-inline-end: auto; + max-width: var(--content-max-width); +} + +#searchbar { + width: 100%; + margin-block-start: 5px; + margin-block-end: 0; + margin-inline-start: auto; + margin-inline-end: auto; + padding: 10px 16px; + transition: box-shadow 300ms ease-in-out; + border: 1px solid var(--searchbar-border-color); + border-radius: 3px; + background-color: var(--searchbar-bg); + color: var(--searchbar-fg); +} +#searchbar:focus, +#searchbar.active { + box-shadow: 0 0 3px var(--searchbar-shadow-color); +} + +.searchresults-header { + font-weight: bold; + font-size: 1em; + padding-block-start: 18px; + padding-block-end: 0; + padding-inline-start: 5px; + padding-inline-end: 0; + color: var(--searchresults-header-fg); +} + +.searchresults-outer { + margin-inline-start: auto; + margin-inline-end: auto; + max-width: var(--content-max-width); + border-block-end: 1px dashed var(--searchresults-border-color); +} + +ul#searchresults { + list-style: none; + padding-inline-start: 20px; +} +ul#searchresults li { + margin: 10px 0px; + padding: 2px; + border-radius: 2px; +} +ul#searchresults li.focus { + background-color: var(--searchresults-li-bg); +} +ul#searchresults span.teaser { + display: block; + clear: both; + margin-block-start: 5px; + margin-block-end: 0; + margin-inline-start: 20px; + margin-inline-end: 0; + font-size: 0.8em; +} +ul#searchresults span.teaser em { + font-weight: bold; + font-style: normal; +} + +/* Sidebar */ + +.sidebar { + position: fixed; + left: 0; + top: 0; + bottom: 0; + width: var(--sidebar-width); + font-size: 0.875em; + box-sizing: border-box; + -webkit-overflow-scrolling: touch; + overscroll-behavior-y: contain; + background-color: var(--sidebar-bg); + color: var(--sidebar-fg); +} +.sidebar-iframe-inner { + --padding: 10px; + + background-color: var(--sidebar-bg); + padding: var(--padding); + margin: 0; + font-size: 1.4rem; + color: var(--sidebar-fg); + min-height: calc(100vh - var(--padding) * 2); +} +.sidebar-iframe-outer { + border: none; + height: 100%; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; +} +[dir=rtl] .sidebar { left: unset; right: 0; } +.sidebar-resizing { + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + user-select: none; +} +html:not(.sidebar-resizing) .sidebar { + transition: transform 0.3s; /* Animation: slide away */ +} +.sidebar code { + line-height: 2em; +} +.sidebar .sidebar-scrollbox { + overflow-y: auto; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + padding: 10px 10px; +} +.sidebar .sidebar-resize-handle { + position: absolute; + cursor: col-resize; + width: 0; + right: calc(var(--sidebar-resize-indicator-width) * -1); + top: 0; + bottom: 0; + display: flex; + align-items: center; +} + +.sidebar-resize-handle .sidebar-resize-indicator { + width: 100%; + height: 12px; + background-color: var(--icons); + margin-inline-start: var(--sidebar-resize-indicator-space); +} + +[dir=rtl] .sidebar .sidebar-resize-handle { + left: calc(var(--sidebar-resize-indicator-width) * -1); + right: unset; +} +.js .sidebar .sidebar-resize-handle { + cursor: col-resize; + width: calc(var(--sidebar-resize-indicator-width) - var(--sidebar-resize-indicator-space)); +} +/* sidebar-hidden */ +#sidebar-toggle-anchor:not(:checked) ~ .sidebar { + transform: translateX(calc(0px - var(--sidebar-width) - var(--sidebar-resize-indicator-width))); + z-index: -1; +} +[dir=rtl] #sidebar-toggle-anchor:not(:checked) ~ .sidebar { + transform: translateX(calc(var(--sidebar-width) + var(--sidebar-resize-indicator-width))); +} +.sidebar::-webkit-scrollbar { + background: var(--sidebar-bg); +} +.sidebar::-webkit-scrollbar-thumb { + background: var(--scrollbar); +} + +/* sidebar-visible */ +#sidebar-toggle-anchor:checked ~ .page-wrapper { + transform: translateX(calc(var(--sidebar-width) + var(--sidebar-resize-indicator-width))); +} +[dir=rtl] #sidebar-toggle-anchor:checked ~ .page-wrapper { + transform: translateX(calc(0px - var(--sidebar-width) - var(--sidebar-resize-indicator-width))); +} +@media only screen and (min-width: 620px) { + #sidebar-toggle-anchor:checked ~ .page-wrapper { + transform: none; + margin-inline-start: calc(var(--sidebar-width) + var(--sidebar-resize-indicator-width)); + } + [dir=rtl] #sidebar-toggle-anchor:checked ~ .page-wrapper { + transform: none; + } +} + +.chapter { + list-style: none outside none; + padding-inline-start: 0; + line-height: 2.2em; +} + +.chapter ol { + width: 100%; +} + +.chapter li { + display: flex; + color: var(--sidebar-non-existant); +} +.chapter li a { + display: block; + padding: 0; + text-decoration: none; + color: var(--sidebar-fg); +} + +.chapter li a:hover { + color: var(--sidebar-active); +} + +.chapter li a.active { + color: var(--sidebar-active); +} + +.chapter li > a.toggle { + cursor: pointer; + display: block; + margin-inline-start: auto; + padding: 0 10px; + user-select: none; + opacity: 0.68; +} + +.chapter li > a.toggle div { + transition: transform 0.5s; +} + +/* collapse the section */ +.chapter li:not(.expanded) + li > ol { + display: none; +} + +.chapter li.chapter-item { + line-height: 1.5em; + margin-block-start: 0.6em; +} + +.chapter li.expanded > a.toggle div { + transform: rotate(90deg); +} + +.spacer { + width: 100%; + height: 3px; + margin: 5px 0px; +} +.chapter .spacer { + background-color: var(--sidebar-spacer); +} + +@media (-moz-touch-enabled: 1), (pointer: coarse) { + .chapter li a { padding: 5px 0; } + .spacer { margin: 10px 0; } +} + +.section { + list-style: none outside none; + padding-inline-start: 20px; + line-height: 1.9em; +} + +/* Theme Menu Popup */ + +.theme-popup { + position: absolute; + left: 10px; + top: var(--menu-bar-height); + z-index: 1000; + border-radius: 4px; + font-size: 0.7em; + color: var(--fg); + background: var(--theme-popup-bg); + border: 1px solid var(--theme-popup-border); + margin: 0; + padding: 0; + list-style: none; + display: none; + /* Don't let the children's background extend past the rounded corners. */ + overflow: hidden; +} +[dir=rtl] .theme-popup { left: unset; right: 10px; } +.theme-popup .default { + color: var(--icons); +} +.theme-popup .theme { + width: 100%; + border: 0; + margin: 0; + padding: 2px 20px; + line-height: 25px; + white-space: nowrap; + text-align: start; + cursor: pointer; + color: inherit; + background: inherit; + font-size: inherit; +} +.theme-popup .theme:hover { + background-color: var(--theme-hover); +} + +.theme-selected::before { + display: inline-block; + content: "✓"; + margin-inline-start: -14px; + width: 14px; +} diff --git a/css/general.css b/css/general.css new file mode 100644 index 000000000..9946cfc01 --- /dev/null +++ b/css/general.css @@ -0,0 +1,279 @@ +/* Base styles and content styles */ + +:root { + /* Browser default font-size is 16px, this way 1 rem = 10px */ + font-size: 62.5%; + color-scheme: var(--color-scheme); +} + +html { + font-family: "Open Sans", sans-serif; + color: var(--fg); + background-color: var(--bg); + text-size-adjust: none; + -webkit-text-size-adjust: none; +} + +body { + margin: 0; + font-size: 1.6rem; + overflow-x: hidden; +} + +code { + font-family: var(--mono-font) !important; + font-size: var(--code-font-size); + direction: ltr !important; +} + +/* make long words/inline code not x overflow */ +main { + overflow-wrap: break-word; +} + +/* make wide tables scroll if they overflow */ +.table-wrapper { + overflow-x: auto; +} + +/* Don't change font size in headers. */ +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + font-size: unset; +} + +.left { float: left; } +.right { float: right; } +.boring { opacity: 0.6; } +.hide-boring .boring { display: none; } +.hidden { display: none !important; } + +h2, h3 { margin-block-start: 2.5em; } +h4, h5 { margin-block-start: 2em; } + +.header + .header h3, +.header + .header h4, +.header + .header h5 { + margin-block-start: 1em; +} + +h1:target::before, +h2:target::before, +h3:target::before, +h4:target::before, +h5:target::before, +h6:target::before { + display: inline-block; + content: "»"; + margin-inline-start: -30px; + width: 30px; +} + +/* This is broken on Safari as of version 14, but is fixed + in Safari Technology Preview 117 which I think will be Safari 14.2. + https://bugs.webkit.org/show_bug.cgi?id=218076 +*/ +:target { + /* Safari does not support logical properties */ + scroll-margin-top: calc(var(--menu-bar-height) + 0.5em); +} + +.page { + outline: 0; + padding: 0 var(--page-padding); + margin-block-start: calc(0px - var(--menu-bar-height)); /* Compensate for the #menu-bar-hover-placeholder */ +} +.page-wrapper { + box-sizing: border-box; + background-color: var(--bg); +} +.no-js .page-wrapper, +.js:not(.sidebar-resizing) .page-wrapper { + transition: margin-left 0.3s ease, transform 0.3s ease; /* Animation: slide away */ +} +[dir=rtl] .js:not(.sidebar-resizing) .page-wrapper { + transition: margin-right 0.3s ease, transform 0.3s ease; /* Animation: slide away */ +} + +.content { + overflow-y: auto; + padding: 0 5px 50px 5px; +} +.content main { + margin-inline-start: auto; + margin-inline-end: auto; + max-width: var(--content-max-width); +} +.content p { line-height: 1.45em; } +.content ol { line-height: 1.45em; } +.content ul { line-height: 1.45em; } +.content a { text-decoration: none; } +.content a:hover { text-decoration: underline; } +.content img, .content video { max-width: 100%; } +.content .header:link, +.content .header:visited { + color: var(--fg); +} +.content .header:link, +.content .header:visited:hover { + text-decoration: none; +} + +table { + margin: 0 auto; + border-collapse: collapse; +} +table td { + padding: 3px 20px; + border: 1px var(--table-border-color) solid; +} +table thead { + background: var(--table-header-bg); +} +table thead td { + font-weight: 700; + border: none; +} +table thead th { + padding: 3px 20px; +} +table thead tr { + border: 1px var(--table-header-bg) solid; +} +/* Alternate background colors for rows */ +table tbody tr:nth-child(2n) { + background: var(--table-alternate-bg); +} + + +blockquote { + margin: 20px 0; + padding: 0 20px; + color: var(--fg); + background-color: var(--quote-bg); + border-block-start: .1em solid var(--quote-border); + border-block-end: .1em solid var(--quote-border); +} + +.warning { + margin: 20px; + padding: 0 20px; + border-inline-start: 2px solid var(--warning-border); +} + +.warning:before { + position: absolute; + width: 3rem; + height: 3rem; + margin-inline-start: calc(-1.5rem - 21px); + content: "ⓘ"; + text-align: center; + background-color: var(--bg); + color: var(--warning-border); + font-weight: bold; + font-size: 2rem; +} + +blockquote .warning:before { + background-color: var(--quote-bg); +} + +kbd { + background-color: var(--table-border-color); + border-radius: 4px; + border: solid 1px var(--theme-popup-border); + box-shadow: inset 0 -1px 0 var(--theme-hover); + display: inline-block; + font-size: var(--code-font-size); + font-family: var(--mono-font); + line-height: 10px; + padding: 4px 5px; + vertical-align: middle; +} + +sup { + /* Set the line-height for superscript and footnote references so that there + isn't an awkward space appearing above lines that contain the footnote. + + See https://github.com/rust-lang/mdBook/pull/2443#discussion_r1813773583 + for an explanation. + */ + line-height: 0; +} + +.footnote-definition { + font-size: 0.9em; +} +/* The default spacing for a list is a little too large. */ +.footnote-definition ul, +.footnote-definition ol { + padding-left: 20px; +} +.footnote-definition > li { + /* Required to position the ::before target */ + position: relative; +} +.footnote-definition > li:target { + scroll-margin-top: 50vh; +} +.footnote-reference:target { + scroll-margin-top: 50vh; +} +/* Draws a border around the footnote (including the marker) when it is selected. + TODO: If there are multiple linkbacks, highlight which one you just came + from so you know which one to click. +*/ +.footnote-definition > li:target::before { + border: 2px solid var(--footnote-highlight); + border-radius: 6px; + position: absolute; + top: -8px; + right: -8px; + bottom: -8px; + left: -32px; + pointer-events: none; + content: ""; +} +/* Pulses the footnote reference so you can quickly see where you left off reading. + This could use some improvement. +*/ +@media not (prefers-reduced-motion) { + .footnote-reference:target { + animation: fn-highlight 0.8s; + border-radius: 2px; + } + + @keyframes fn-highlight { + from { + background-color: var(--footnote-highlight); + } + } +} + +.tooltiptext { + position: absolute; + visibility: hidden; + color: #fff; + background-color: #333; + transform: translateX(-50%); /* Center by moving tooltip 50% of its width left */ + left: -8px; /* Half of the width of the icon */ + top: -35px; + font-size: 0.8em; + text-align: center; + border-radius: 6px; + padding: 5px 8px; + margin: 5px; + z-index: 1000; +} +.tooltipped .tooltiptext { + visibility: visible; +} + +.chapter li.part-title { + color: var(--sidebar-fg); + margin: 5px 0px; + font-weight: bold; +} + +.result-no-output { + font-style: italic; +} diff --git a/css/print.css b/css/print.css new file mode 100644 index 000000000..80ec3a544 --- /dev/null +++ b/css/print.css @@ -0,0 +1,50 @@ + +#sidebar, +#menu-bar, +.nav-chapters, +.mobile-nav-chapters { + display: none; +} + +#page-wrapper.page-wrapper { + transform: none !important; + margin-inline-start: 0px; + overflow-y: initial; +} + +#content { + max-width: none; + margin: 0; + padding: 0; +} + +.page { + overflow-y: initial; +} + +code { + direction: ltr !important; +} + +pre > .buttons { + z-index: 2; +} + +a, a:visited, a:active, a:hover { + color: #4183c4; + text-decoration: none; +} + +h1, h2, h3, h4, h5, h6 { + page-break-inside: avoid; + page-break-after: avoid; +} + +pre, code { + page-break-inside: avoid; + white-space: pre-wrap; +} + +.fa { + display: none !important; +} diff --git a/css/variables.css b/css/variables.css new file mode 100644 index 000000000..6a692ae7b --- /dev/null +++ b/css/variables.css @@ -0,0 +1,319 @@ + +/* Globals */ + +:root { + --sidebar-width: 300px; + --sidebar-resize-indicator-width: 8px; + --sidebar-resize-indicator-space: 2px; + --page-padding: 15px; + --content-max-width: 750px; + --menu-bar-height: 50px; + --mono-font: "Source Code Pro", Consolas, "Ubuntu Mono", Menlo, "DejaVu Sans Mono", monospace, monospace; + --code-font-size: 0.875em; /* please adjust the ace font size accordingly in editor.js */ +} + +/* Themes */ + +.ayu { + --bg: hsl(210, 25%, 8%); + --fg: #c5c5c5; + + --sidebar-bg: #14191f; + --sidebar-fg: #c8c9db; + --sidebar-non-existant: #5c6773; + --sidebar-active: #ffb454; + --sidebar-spacer: #2d334f; + + --scrollbar: var(--sidebar-fg); + + --icons: #737480; + --icons-hover: #b7b9cc; + + --links: #0096cf; + + --inline-code-color: #ffb454; + + --theme-popup-bg: #14191f; + --theme-popup-border: #5c6773; + --theme-hover: #191f26; + + --quote-bg: hsl(226, 15%, 17%); + --quote-border: hsl(226, 15%, 22%); + + --warning-border: #ff8e00; + + --table-border-color: hsl(210, 25%, 13%); + --table-header-bg: hsl(210, 25%, 28%); + --table-alternate-bg: hsl(210, 25%, 11%); + + --searchbar-border-color: #848484; + --searchbar-bg: #424242; + --searchbar-fg: #fff; + --searchbar-shadow-color: #d4c89f; + --searchresults-header-fg: #666; + --searchresults-border-color: #888; + --searchresults-li-bg: #252932; + --search-mark-bg: #e3b171; + + --color-scheme: dark; + + /* Same as `--icons` */ + --copy-button-filter: invert(45%) sepia(6%) saturate(621%) hue-rotate(198deg) brightness(99%) contrast(85%); + /* Same as `--sidebar-active` */ + --copy-button-filter-hover: invert(68%) sepia(55%) saturate(531%) hue-rotate(341deg) brightness(104%) contrast(101%); + + --footnote-highlight: #2668a6; +} + +.coal { + --bg: hsl(200, 7%, 8%); + --fg: #98a3ad; + + --sidebar-bg: #292c2f; + --sidebar-fg: #a1adb8; + --sidebar-non-existant: #505254; + --sidebar-active: #3473ad; + --sidebar-spacer: #393939; + + --scrollbar: var(--sidebar-fg); + + --icons: #43484d; + --icons-hover: #b3c0cc; + + --links: #2b79a2; + + --inline-code-color: #c5c8c6; + + --theme-popup-bg: #141617; + --theme-popup-border: #43484d; + --theme-hover: #1f2124; + + --quote-bg: hsl(234, 21%, 18%); + --quote-border: hsl(234, 21%, 23%); + + --warning-border: #ff8e00; + + --table-border-color: hsl(200, 7%, 13%); + --table-header-bg: hsl(200, 7%, 28%); + --table-alternate-bg: hsl(200, 7%, 11%); + + --searchbar-border-color: #aaa; + --searchbar-bg: #b7b7b7; + --searchbar-fg: #000; + --searchbar-shadow-color: #aaa; + --searchresults-header-fg: #666; + --searchresults-border-color: #98a3ad; + --searchresults-li-bg: #2b2b2f; + --search-mark-bg: #355c7d; + + --color-scheme: dark; + + /* Same as `--icons` */ + --copy-button-filter: invert(26%) sepia(8%) saturate(575%) hue-rotate(169deg) brightness(87%) contrast(82%); + /* Same as `--sidebar-active` */ + --copy-button-filter-hover: invert(36%) sepia(70%) saturate(503%) hue-rotate(167deg) brightness(98%) contrast(89%); + + --footnote-highlight: #4079ae; +} + +.light, html:not(.js) { + --bg: hsl(0, 0%, 100%); + --fg: hsl(0, 0%, 0%); + + --sidebar-bg: #fafafa; + --sidebar-fg: hsl(0, 0%, 0%); + --sidebar-non-existant: #aaaaaa; + --sidebar-active: #1f1fff; + --sidebar-spacer: #f4f4f4; + + --scrollbar: #8F8F8F; + + --icons: #747474; + --icons-hover: #000000; + + --links: #20609f; + + --inline-code-color: #301900; + + --theme-popup-bg: #fafafa; + --theme-popup-border: #cccccc; + --theme-hover: #e6e6e6; + + --quote-bg: hsl(197, 37%, 96%); + --quote-border: hsl(197, 37%, 91%); + + --warning-border: #ff8e00; + + --table-border-color: hsl(0, 0%, 95%); + --table-header-bg: hsl(0, 0%, 80%); + --table-alternate-bg: hsl(0, 0%, 97%); + + --searchbar-border-color: #aaa; + --searchbar-bg: #fafafa; + --searchbar-fg: #000; + --searchbar-shadow-color: #aaa; + --searchresults-header-fg: #666; + --searchresults-border-color: #888; + --searchresults-li-bg: #e4f2fe; + --search-mark-bg: #a2cff5; + + --color-scheme: light; + + /* Same as `--icons` */ + --copy-button-filter: invert(45.49%); + /* Same as `--sidebar-active` */ + --copy-button-filter-hover: invert(14%) sepia(93%) saturate(4250%) hue-rotate(243deg) brightness(99%) contrast(130%); + + --footnote-highlight: #7e7eff; +} + +.navy { + --bg: hsl(226, 23%, 11%); + --fg: #bcbdd0; + + --sidebar-bg: #282d3f; + --sidebar-fg: #c8c9db; + --sidebar-non-existant: #505274; + --sidebar-active: #2b79a2; + --sidebar-spacer: #2d334f; + + --scrollbar: var(--sidebar-fg); + + --icons: #737480; + --icons-hover: #b7b9cc; + + --links: #2b79a2; + + --inline-code-color: #c5c8c6; + + --theme-popup-bg: #161923; + --theme-popup-border: #737480; + --theme-hover: #282e40; + + --quote-bg: hsl(226, 15%, 17%); + --quote-border: hsl(226, 15%, 22%); + + --warning-border: #ff8e00; + + --table-border-color: hsl(226, 23%, 16%); + --table-header-bg: hsl(226, 23%, 31%); + --table-alternate-bg: hsl(226, 23%, 14%); + + --searchbar-border-color: #aaa; + --searchbar-bg: #aeaec6; + --searchbar-fg: #000; + --searchbar-shadow-color: #aaa; + --searchresults-header-fg: #5f5f71; + --searchresults-border-color: #5c5c68; + --searchresults-li-bg: #242430; + --search-mark-bg: #a2cff5; + + --color-scheme: dark; + + /* Same as `--icons` */ + --copy-button-filter: invert(51%) sepia(10%) saturate(393%) hue-rotate(198deg) brightness(86%) contrast(87%); + /* Same as `--sidebar-active` */ + --copy-button-filter-hover: invert(46%) sepia(20%) saturate(1537%) hue-rotate(156deg) brightness(85%) contrast(90%); + + --footnote-highlight: #4079ae; +} + +.rust { + --bg: hsl(60, 9%, 87%); + --fg: #262625; + + --sidebar-bg: #3b2e2a; + --sidebar-fg: #c8c9db; + --sidebar-non-existant: #505254; + --sidebar-active: #e69f67; + --sidebar-spacer: #45373a; + + --scrollbar: var(--sidebar-fg); + + --icons: #737480; + --icons-hover: #262625; + + --links: #2b79a2; + + --inline-code-color: #6e6b5e; + + --theme-popup-bg: #e1e1db; + --theme-popup-border: #b38f6b; + --theme-hover: #99908a; + + --quote-bg: hsl(60, 5%, 75%); + --quote-border: hsl(60, 5%, 70%); + + --warning-border: #ff8e00; + + --table-border-color: hsl(60, 9%, 82%); + --table-header-bg: #b3a497; + --table-alternate-bg: hsl(60, 9%, 84%); + + --searchbar-border-color: #aaa; + --searchbar-bg: #fafafa; + --searchbar-fg: #000; + --searchbar-shadow-color: #aaa; + --searchresults-header-fg: #666; + --searchresults-border-color: #888; + --searchresults-li-bg: #dec2a2; + --search-mark-bg: #e69f67; + + /* Same as `--icons` */ + --copy-button-filter: invert(51%) sepia(10%) saturate(393%) hue-rotate(198deg) brightness(86%) contrast(87%); + /* Same as `--sidebar-active` */ + --copy-button-filter-hover: invert(77%) sepia(16%) saturate(1798%) hue-rotate(328deg) brightness(98%) contrast(83%); + + --footnote-highlight: #d3a17a; +} + +@media (prefers-color-scheme: dark) { + html:not(.js) { + --bg: hsl(200, 7%, 8%); + --fg: #98a3ad; + + --sidebar-bg: #292c2f; + --sidebar-fg: #a1adb8; + --sidebar-non-existant: #505254; + --sidebar-active: #3473ad; + --sidebar-spacer: #393939; + + --scrollbar: var(--sidebar-fg); + + --icons: #43484d; + --icons-hover: #b3c0cc; + + --links: #2b79a2; + + --inline-code-color: #c5c8c6; + + --theme-popup-bg: #141617; + --theme-popup-border: #43484d; + --theme-hover: #1f2124; + + --quote-bg: hsl(234, 21%, 18%); + --quote-border: hsl(234, 21%, 23%); + + --warning-border: #ff8e00; + + --table-border-color: hsl(200, 7%, 13%); + --table-header-bg: hsl(200, 7%, 28%); + --table-alternate-bg: hsl(200, 7%, 11%); + + --searchbar-border-color: #aaa; + --searchbar-bg: #b7b7b7; + --searchbar-fg: #000; + --searchbar-shadow-color: #aaa; + --searchresults-header-fg: #666; + --searchresults-border-color: #98a3ad; + --searchresults-li-bg: #2b2b2f; + --search-mark-bg: #355c7d; + + --color-scheme: dark; + + /* Same as `--icons` */ + --copy-button-filter: invert(26%) sepia(8%) saturate(575%) hue-rotate(169deg) brightness(87%) contrast(82%); + /* Same as `--sidebar-active` */ + --copy-button-filter-hover: invert(36%) sepia(70%) saturate(503%) hue-rotate(167deg) brightness(98%) contrast(89%); + } +} diff --git a/debugging-support-in-rustc.html b/debugging-support-in-rustc.html new file mode 100644 index 000000000..e6a936552 --- /dev/null +++ b/debugging-support-in-rustc.html @@ -0,0 +1,546 @@ + + + + + + Debugging support in the Rust compiler - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Debugging support in the Rust compiler

+ +

This document explains the state of debugging tools support in the Rust compiler (rustc). +It gives an overview of GDB, LLDB, WinDbg/CDB, +as well as infrastructure around Rust compiler to debug Rust code. +If you want to learn how to debug the Rust compiler itself, +see Debugging the Compiler.

+

The material is gathered from the video, +Tom Tromey discusses debugging support in rustc.

+

Preliminaries

+

Debuggers

+

According to Wikipedia

+
+

A debugger or debugging tool is a computer program that is used to test and debug +other programs (the "target" program).

+
+

Writing a debugger from scratch for a language requires a lot of work, especially if +debuggers have to be supported on various platforms. GDB and LLDB, however, can be +extended to support debugging a language. This is the path that Rust has chosen. +This document's main goal is to document the said debuggers support in Rust compiler.

+

DWARF

+

According to the DWARF standard website

+
+

DWARF is a debugging file format used by many compilers and debuggers to support source level +debugging. It addresses the requirements of a number of procedural languages, +such as C, C++, and Fortran, and is designed to be extensible to other languages. +DWARF is architecture independent and applicable to any processor or operating system. +It is widely used on Unix, Linux and other operating systems, +as well as in stand-alone environments.

+
+

DWARF reader is a program that consumes the DWARF format and creates debugger compatible output. +This program may live in the compiler itself. DWARF uses a data structure called +Debugging Information Entry (DIE) which stores the information as "tags" to denote functions, +variables etc., e.g., DW_TAG_variable, DW_TAG_pointer_type, DW_TAG_subprogram etc. +You can also invent your own tags and attributes.

+

CodeView/PDB

+

PDB (Program Database) is a file format created by Microsoft that contains debug information. +PDBs can be consumed by debuggers such as WinDbg/CDB and other tools to display debug information. +A PDB contains multiple streams that describe debug information about a specific binary such +as types, symbols, and source files used to compile the given binary. CodeView is another +format which defines the structure of symbol records and type records that appear within +PDB streams.

+

Supported debuggers

+

GDB

+

Rust expression parser

+

To be able to show debug output, we need an expression parser. +This (GDB) expression parser is written in Bison, +and can parse only a subset of Rust expressions. +GDB parser was written from scratch and has no relation to any other parser, +including that of rustc.

+

GDB has Rust-like value and type output. It can print values and types in a way +that look like Rust syntax in the output. Or when you print a type as ptype in GDB, +it also looks like Rust source code. Checkout the documentation in the manual for GDB/Rust.

+

Parser extensions

+

Expression parser has a couple of extensions in it to facilitate features that you cannot do +with Rust. Some limitations are listed in the manual for GDB/Rust. There is some special +code in the DWARF reader in GDB to support the extensions.

+

A couple of examples of DWARF reader support needed are as follows:

+
    +
  1. +

    Enum: Needed for support for enum types. +The Rust compiler writes the information about enum into DWARF, +and GDB reads the DWARF to understand where is the tag field, +or if there is a tag field, +or if the tag slot is shared with non-zero optimization etc.

    +
  2. +
  3. +

    Dissect trait objects: DWARF extension where the trait object's description in the DWARF +also points to a stub description of the corresponding vtable which in turn points to the +concrete type for which this trait object exists. This means that you can do a print *object +for that trait object, and GDB will understand how to find the correct type of the payload in +the trait object.

    +
  4. +
+

TODO: Figure out if the following should be mentioned in the GDB-Rust document rather than +this guide page so there is no duplication. This is regarding the following comments:

+

This comment by Tom

+
+

gdb's Rust extensions and limitations are documented in the gdb manual: +https://sourceware.org/gdb/onlinedocs/gdb/Rust.html -- however, this neglects to mention that +gdb convenience variables and registers follow the gdb $ convention, and that the Rust parser +implements the gdb @ extension.

+
+

This question by Aman

+
+

@tromey do you think we should mention this part in the GDB-Rust document rather than this +document so there is no duplication etc.?

+
+

LLDB

+

Rust expression parser

+

This expression parser is written in C++. It is a type of Recursive Descent parser. +It implements slightly less of the Rust language than GDB. +LLDB has Rust-like value and type output.

+

Developer notes

+
    +
  • LLDB has a plugin architecture but that does not work for language support.
  • +
  • GDB generally works better on Linux.
  • +
+

WinDbg/CDB

+

Microsoft provides Windows Debugging Tools such as the Windows Debugger (WinDbg) and +the Console Debugger (CDB) which both support debugging programs written in Rust. These +debuggers parse the debug info for a binary from the PDB, if available, to construct a +visualization to serve up in the debugger.

+

Natvis

+

Both WinDbg and CDB support defining and viewing custom visualizations for any given type +within the debugger using the Natvis framework. The Rust compiler defines a set of Natvis +files that define custom visualizations for a subset of types in the standard libraries such +as, std, core, and alloc. These Natvis files are embedded into PDBs generated by the +*-pc-windows-msvc target triples to automatically enable these custom visualizations when +debugging. This default can be overridden by setting the strip rustc flag to either debuginfo +or symbols.

+

Rust has support for embedding Natvis files for crates outside of the standard libraries by +using the #[debugger_visualizer] attribute. +For more details on how to embed debugger visualizers, +please refer to the section on the debugger_visualizer attribute.

+

DWARF and rustc

+

DWARF is the standard way compilers generate debugging information that debuggers read. +It is the debugging format on macOS and Linux. +It is a multi-language and extensible format, +and is mostly good enough for Rust's purposes. +Hence, the current implementation reuses DWARF's concepts. +This is true even if some of the concepts in DWARF do not align with Rust semantically because, +generally, there can be some kind of mapping between the two.

+

We have some DWARF extensions that the Rust compiler emits and the debuggers understand that +are not in the DWARF standard.

+
    +
  • +

    Rust compiler will emit DWARF for a virtual table, and this vtable object will have a +DW_AT_containing_type that points to the real type. This lets debuggers dissect a trait object +pointer to correctly find the payload. E.g., here's such a DIE, from a test case in the gdb +repository:

    +
    <1><1a9>: Abbrev Number: 3 (DW_TAG_structure_type)
    +   <1aa>   DW_AT_containing_type: <0x1b4>
    +   <1ae>   DW_AT_name        : (indirect string, offset: 0x23d): vtable
    +   <1b2>   DW_AT_byte_size   : 0
    +   <1b3>   DW_AT_alignment   : 8
    +
    +
  • +
  • +

    The other extension is that the Rust compiler can emit a tagless discriminated union. +See DWARF feature request for this item.

    +
  • +
+

Current limitations of DWARF

+
    +
  • Traits - require a bigger change than normal to DWARF, on how to represent Traits in DWARF.
  • +
  • DWARF provides no way to differentiate between Structs and Tuples. Rust compiler emits +fields with __0 and debuggers look for a sequence of such names to overcome this limitation. +For example, in this case the debugger would look at a field via x.__0 instead of x.0. +This is resolved via the Rust parser in the debugger so now you can do x.0.
  • +
+

DWARF relies on debuggers to know some information about platform ABI. +Rust does not do that all the time.

+

Developer notes

+

This section is from the talk about certain aspects of development.

+

What is missing

+

Code signing for LLDB debug server on macOS

+

According to Wikipedia, System Integrity Protection is

+
+

System Integrity Protection (SIP, sometimes referred to as rootless) is a security feature +of Apple's macOS operating system introduced in OS X El Capitan. It comprises a number of +mechanisms that are enforced by the kernel. A centerpiece is the protection of system-owned +files and directories against modifications by processes without a specific "entitlement", +even when executed by the root user or a user with root privileges (sudo).

+
+

It prevents processes using ptrace syscall. If a process wants to use ptrace it has to be +code signed. The certificate that signs it has to be trusted on your machine.

+

See Apple developer documentation for System Integrity Protection.

+

We may need to sign up with Apple and get the keys to do this signing. Tom has looked into if +Mozilla cannot do this because it is at the maximum number of +keys it is allowed to sign. Tom does not know if Mozilla could get more keys.

+

Alternatively, Tom suggests that maybe a Rust legal entity is needed to get the keys via Apple. +This problem is not technical in nature. If we had such a key we could sign GDB as well and +ship that.

+

DWARF and Traits

+

Rust traits are not emitted into DWARF at all. The impact of this is calling a method x.method() +does not work as is. The reason being that method is implemented by a trait, as opposed +to a type. That information is not present so finding trait methods is missing.

+

DWARF has a notion of interface types (possibly added for Java). Tom's idea was to use this +interface type as traits.

+

DWARF only deals with concrete names, not the reference types. So, a given implementation of a +trait for a type would be one of these interfaces (DW_tag_interface type). Also, the type for +which it is implemented would describe all the interfaces this type implements. This requires a +DWARF extension.

+

Issue on Github: https://github.com/rust-lang/rust/issues/33014

+

Typical process for a Debug Info change (LLVM)

+

LLVM has Debug Info (DI) builders. This is the primary thing that Rust calls into. +This is why we need to change LLVM first because that is emitted first and not DWARF directly. +This is a kind of metadata that you construct and hand-off to LLVM. For the Rustc/LLVM hand-off +some LLVM DI builder methods are called to construct representation of a type.

+

The steps of this process are as follows:

+
    +
  1. +

    LLVM needs changing.

    +

    LLVM does not emit Interface types at all, so this needs to be implemented in the LLVM first.

    +

    Get sign off on LLVM maintainers that this is a good idea.

    +
  2. +
  3. +

    Change the DWARF extension.

    +
  4. +
  5. +

    Update the debuggers.

    +

    Update DWARF readers, expression evaluators.

    +
  6. +
  7. +

    Update Rust compiler.

    +

    Change it to emit this new information.

    +
  8. +
+

Procedural macro stepping

+

A deeply profound question is that how do you actually debug a procedural macro? +What is the location you emit for a macro expansion? Consider some of the following cases -

+
    +
  • You can emit location of the invocation of the macro.
  • +
  • You can emit the location of the definition of the macro.
  • +
  • You can emit locations of the content of the macro.
  • +
+

RFC: https://github.com/rust-lang/rfcs/pull/2117

+

Focus is to let macros decide what to do. This can be achieved by having some kind of attribute +that lets the macro tell the compiler where the line marker should be. This affects where you +set the breakpoints and what happens when you step it.

+

Source file checksums in debug info

+

Both DWARF and CodeView (PDB) support embedding a cryptographic hash of each source file that +contributed to the associated binary.

+

The cryptographic hash can be used by a debugger to verify that the source file matches the +executable. If the source file does not match, the debugger can provide a warning to the user.

+

The hash can also be used to prove that a given source file has not been modified since it was +used to compile an executable. Because MD5 and SHA1 both have demonstrated vulnerabilities, +using SHA256 is recommended for this application.

+

The Rust compiler stores the hash for each source file in the corresponding SourceFile in +the SourceMap. The hashes of input files to external crates are stored in rlib metadata.

+

A default hashing algorithm is set in the target specification. This allows the target to +specify the best hash available, since not all targets support all hash algorithms.

+

The hashing algorithm for a target can also be overridden with the -Z source-file-checksum= +command-line option.

+

DWARF 5

+

DWARF version 5 supports embedding an MD5 hash to validate the source file version in use. +DWARF 5 - Section 6.2.4.1 opcode DW_LNCT_MD5

+

LLVM

+

LLVM IR supports MD5 and SHA1 (and SHA256 in LLVM 11+) source file checksums in the DIFile node.

+

LLVM DIFile documentation

+

Microsoft Visual C++ Compiler /ZH option

+

The MSVC compiler supports embedding MD5, SHA1, or SHA256 hashes in the PDB using the /ZH +compiler option.

+

MSVC /ZH documentation

+

Clang

+

Clang always embeds an MD5 checksum, though this does not appear in documentation.

+

Future work

+

Name mangling changes

+
    +
  • New demangler in libiberty (gcc source tree).
  • +
  • New demangler in LLVM or LLDB.
  • +
+

TODO: Check the location of the demangler source. #1157

+

Reuse Rust compiler for expressions

+

This is an important idea because debuggers by and large do not try to implement type +inference. You need to be much more explicit when you type into the debugger than your +actual source code. So, you cannot just copy and paste an expression from your source +code to debugger and expect the same answer but this would be nice. This can be helped +by using compiler.

+

It is certainly doable but it is a large project. You certainly need a bridge to the +debugger because the debugger alone has access to the memory. Both GDB (gcc) and LLDB (clang) +have this feature. LLDB uses Clang to compile code to JIT and GDB can do the same with GCC.

+

Both debuggers expression evaluation implement both a superset and a subset of Rust. +They implement just the expression language, +but they also add some extensions like GDB has convenience variables. +Therefore, if you are taking this route, +then you not only need to do this bridge, +but may have to add some mode to let the compiler understand some extensions.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/diagnostics.html b/diagnostics.html new file mode 100644 index 000000000..bef1b350e --- /dev/null +++ b/diagnostics.html @@ -0,0 +1,1143 @@ + + + + + + Errors and lints - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Errors and lints

+ +

A lot of effort has been put into making rustc have great error messages. +This chapter is about how to emit compile errors and lints from the compiler.

+

Diagnostic structure

+

The main parts of a diagnostic error are the following:

+
error[E0000]: main error message
+  --> file.rs:LL:CC
+   |
+LL | <code>
+   | -^^^^- secondary label
+   |  |
+   |  primary label
+   |
+   = note: note without a `Span`, created with `.note`
+note: sub-diagnostic message for `.span_note`
+  --> file.rs:LL:CC
+   |
+LL | more code
+   |      ^^^^
+
+
    +
  • Level (error, warning, etc.). It indicates the severity of the message. +(See diagnostic levels)
  • +
  • Code (for example, for "mismatched types", it is E0308). It helps +users get more information about the current error through an extended +description of the problem in the error code index. Not all diagnostic have a +code. For example, diagnostics created by lints don't have one.
  • +
  • Message. It is the main description of the problem. It should be general and +able to stand on its own, so that it can make sense even in isolation.
  • +
  • Diagnostic window. This contains several things: +
      +
    • The path, line number and column of the beginning of the primary span.
    • +
    • The users' affected code and its surroundings.
    • +
    • Primary and secondary spans underlying the users' code. These spans can +optionally contain one or more labels. +
        +
      • Primary spans should have enough text to describe the problem in such a +way that if it were the only thing being displayed (for example, in an +IDE) it would still make sense. Because it is "spatially aware" (it +points at the code), it can generally be more succinct than the error +message.
      • +
      • If cluttered output can be foreseen in cases when multiple span labels +overlap, it is a good idea to tweak the output appropriately. For +example, the if/else arms have incompatible types error uses different +spans depending on whether the arms are all in the same line, if one of +the arms is empty and if none of those cases applies.
      • +
      +
    • +
    +
  • +
  • Sub-diagnostics. Any error can have multiple sub-diagnostics that look +similar to the main part of the error. These are used for cases where the +order of the explanation might not correspond with the order of the code. If +the order of the explanation can be "order free", leveraging secondary labels +in the main diagnostic is preferred, as it is typically less verbose.
  • +
+

The text should be matter of fact and avoid capitalization and periods, unless +multiple sentences are needed:

+
error: the fobrulator needs to be krontrificated
+
+

When code or an identifier must appear in a message or label, it should be +surrounded with backticks:

+
error: the identifier `foo.bar` is invalid
+
+

Error codes and explanations

+

Most errors have an associated error code. Error codes are linked to long-form +explanations which contains an example of how to trigger the error and in-depth +details about the error. They may be viewed with the --explain flag, or via +the error index.

+

As a general rule, give an error a code (with an associated explanation) if the +explanation would give more information than the error itself. A lot of the time +it's better to put all the information in the emitted error itself. However, +sometimes that would make the error verbose or there are too many possible +triggers to include useful information for all cases in the error, in which case +it's a good idea to add an explanation.1 +As always, if you are not sure, just ask your reviewer!

+

If you decide to add a new error with an associated error code, please read +this section for a guide and important details about the +process.

+

Lints versus fixed diagnostics

+

Some messages are emitted via lints, where the user can control the +level. Most diagnostics are hard-coded such that the user cannot control the +level.

+

Usually it is obvious whether a diagnostic should be "fixed" or a lint, but +there are some grey areas.

+

Here are a few examples:

+
    +
  • Borrow checker errors: these are fixed errors. The user cannot adjust the +level of these diagnostics to silence the borrow checker.
  • +
  • Dead code: this is a lint. While the user probably doesn't want dead code in +their crate, making this a hard error would make refactoring and development +very painful.
  • +
  • future-incompatible lints: +these are silenceable lints. +It was decided that making them fixed errors would cause too much breakage, +so warnings are instead emitted, +and will eventually be turned into fixed (hard) errors.
  • +
+

Hard-coded warnings (those using methods like span_warn) should be avoided +for normal code, preferring to use lints instead. Some cases, such as warnings +with CLI flags, will require the use of hard-coded warnings.

+

See the deny lint level below for guidelines when to +use an error-level lint instead of a fixed error.

+

Diagnostic output style guide

+
    +
  • Write in plain simple English. If your message, when shown on a – possibly +small – screen (which hasn't been cleaned for a while), cannot be understood +by a normal programmer, who just came out of bed after a night partying, +it's too complex.
  • +
  • Error, Warning, Note, and Help messages start with a lowercase +letter and do not end with punctuation.
  • +
  • Error messages should be succinct. Users will see these error messages many +times, and more verbose descriptions can be viewed with the --explain +flag. That said, don't make it so terse that it's hard to understand.
  • +
  • The word "illegal" is illegal. Prefer "invalid" or a more specific word +instead.
  • +
  • Errors should document the span of code where they occur (use +rustc_errors::DiagCtxt's +span_* methods or a diagnostic struct's #[primary_span] to easily do +this). Also note other spans that have contributed to the error if the span +isn't too large.
  • +
  • When emitting a message with span, try to reduce the span to the smallest +amount possible that still signifies the issue
  • +
  • Try not to emit multiple error messages for the same error. This may require +detecting duplicates.
  • +
  • When the compiler has too little information for a specific error message, +consult with the compiler team to add new attributes for library code that +allow adding more information. For example see +#[rustc_on_unimplemented]. Use these +annotations when available!
  • +
  • Keep in mind that Rust's learning curve is rather steep, and that the +compiler messages are an important learning tool.
  • +
  • When talking about the compiler, call it the compiler, not Rust or +rustc.
  • +
  • Use the Oxford comma when +writing lists of items.
  • +
+

Lint naming

+

From RFC 0344, lint names should be consistent, with the following +guidelines:

+

The basic rule is: the lint name should make sense when read as "allow +lint-name" or "allow lint-name items". For example, "allow +deprecated items" and "allow dead_code" makes sense, while "allow +unsafe_block" is ungrammatical (should be plural).

+
    +
  • +

    Lint names should state the bad thing being checked for, e.g. deprecated, +so that #[allow(deprecated)] (items) reads correctly. Thus ctypes is not +an appropriate name; improper_ctypes is.

    +
  • +
  • +

    Lints that apply to arbitrary items (like the stability lints) should just +mention what they check for: use deprecated rather than +deprecated_items. This keeps lint names short. (Again, think "allow +lint-name items".)

    +
  • +
  • +

    If a lint applies to a specific grammatical class, mention that class and +use the plural form: use unused_variables rather than unused_variable. +This makes #[allow(unused_variables)] read correctly.

    +
  • +
  • +

    Lints that catch unnecessary, unused, or useless aspects of code should use +the term unused, e.g. unused_imports, unused_typecasts.

    +
  • +
  • +

    Use snake case in the same way you would for function names.

    +
  • +
+

Diagnostic levels

+

Guidelines for different diagnostic levels:

+
    +
  • +

    error: emitted when the compiler detects a problem that makes it unable to +compile the program, either because the program is invalid or the programmer +has decided to make a specific warning into an error.

    +
  • +
  • +

    warning: emitted when the compiler detects something odd about a program. +Care should be taken when adding warnings to avoid warning fatigue, and +avoid false-positives where there really isn't a problem with the code. Some +examples of when it is appropriate to issue a warning:

    +
      +
    • A situation where the user should take action, such as swap out a +deprecated item, or use a Result, but otherwise doesn't prevent +compilation.
    • +
    • Unnecessary syntax that can be removed without affecting the semantics of +the code. For example, unused code, or unnecessary unsafe.
    • +
    • Code that is very likely to be incorrect, dangerous, or confusing, but the +language technically allows, and is not ready or confident enough to make +an error. For example unused_comparisons (out of bounds comparisons) or +bindings_with_variant_name (the user likely did not intend to create a +binding in a pattern).
    • +
    • Future-incompatible lints, where something was +accidentally or erroneously accepted in the past, but rejecting would +cause excessive breakage in the ecosystem.
    • +
    • Stylistic choices. For example, camel or snake case, or the dyn trait +warning in the 2018 edition. These have a high bar to be added, and should +only be used in exceptional circumstances. Other stylistic choices should +either be allow-by-default lints, or part of other tools like Clippy or +rustfmt.
    • +
    +
  • +
  • +

    help: emitted following an error or warning to give additional +information to the user about how to solve their problem. These messages +often include a suggestion string and rustc_errors::Applicability +confidence level to guide automated source fixes by tools. See the +Suggestions section for more details.

    +

    The error or warning portion should not suggest how to fix the problem, +only the "help" sub-diagnostic should.

    +
  • +
  • +

    note: emitted to given more context and identify additional circumstances +and parts of the code that caused the warning or error. For example, the +borrow checker will note any previous conflicting borrows.

    +

    help vs note: help should be used to show changes the user can +possibly make to fix the problem. note should be used for everything else, +such as other context, information and facts, online resources to read, etc.

    +
  • +
+

Not to be confused with lint levels, whose guidelines are:

+
    +
  • +

    forbid: Lints should never default to forbid.

    +
  • +
  • +

    deny: Equivalent to error diagnostic level. Some examples:

    +
      +
    • A future-incompatible or edition-based lint that has graduated from the +warning level.
    • +
    • Something that has an extremely high confidence that is incorrect, but +still want an escape hatch to allow it to pass.
    • +
    +
  • +
  • +

    warn: Equivalent to the warning diagnostic level. See warning above +for guidelines.

    +
  • +
  • +

    allow: Examples of the kinds of lints that should default to allow:

    +
      +
    • The lint has a too high false positive rate.
    • +
    • The lint is too opinionated.
    • +
    • The lint is experimental.
    • +
    • The lint is used for enforcing something that is not normally enforced. +For example, the unsafe_code lint can be used to prevent usage of unsafe +code.
    • +
    +
  • +
+

More information about lint levels can be found in the rustc +book and the reference.

+

Helpful tips and options

+

Finding the source of errors

+

There are three main ways to find where a given error is emitted:

+
    +
  • +

    grep for either a sub-part of the error message/label or error code. This +usually works well and is straightforward, but there are some cases where +the code emitting the error is removed from the code where the error is +constructed behind a relatively deep call-stack. Even then, it is a good way +to get your bearings.

    +
  • +
  • +

    Invoking rustc with the nightly-only flag -Z treat-err-as-bug=1 +will treat the first error being emitted as an Internal Compiler Error, which +allows you to get a +stack trace at the point the error has been emitted. Change the 1 to +something else if you wish to trigger on a later error.

    +

    There are limitations with this approach:

    +
      +
    • Some calls get elided from the stack trace because they get inlined in the compiled rustc.
    • +
    • The construction of the error is far away from where it is emitted, +a problem similar to the one we faced with the grep approach. +In some cases, we buffer multiple errors in order to emit them in order.
    • +
    +
  • +
  • +

    Invoking rustc with -Z track-diagnostics will print error creation +locations alongside the error.

    +
  • +
+

The regular development practices apply: judicious use of debug!() statements +and use of a debugger to trigger break points in order to figure out in what +order things are happening.

+

Span

+

Span is the primary data structure in rustc used to represent a +location in the code being compiled. Spans are attached to most constructs in +HIR and MIR, allowing for more informative error reporting.

+

A Span can be looked up in a SourceMap to get a "snippet" +useful for displaying errors with span_to_snippet and other +similar methods on the SourceMap.

+

Error messages

+

The rustc_errors crate defines most of the utilities used for +reporting errors.

+

Diagnostics can be implemented as types which implement the Diagnostic +trait. This is preferred for new diagnostics as it enforces a separation +between diagnostic emitting logic and the main code paths. For less-complex +diagnostics, the Diagnostic trait can be derived -- see Diagnostic +structs. Within the trait implementation, the APIs +described below can be used as normal.

+

DiagCtxt has methods that create and emit errors. These methods +usually have names like span_err or struct_span_err or span_warn, etc... +There are lots of them; they emit different types of "errors", such as +warnings, errors, fatal errors, suggestions, etc.

+

In general, there are two classes of such methods: ones that emit an error +directly and ones that allow finer control over what to emit. For example, +span_err emits the given error message at the given Span, but +struct_span_err instead returns a +Diag.

+

Most of these methods will accept strings, but it is recommended that typed +identifiers for translatable diagnostics be used for new diagnostics (see +Translation).

+

Diag allows you to add related notes and suggestions to an error +before emitting it by calling the emit method. (Failing to either +emit or cancel a Diag will result in an ICE.) See the +docs for more info on what you can do.

+
// Get a `Diag`. This does _not_ emit an error yet.
+let mut err = sess.dcx.struct_span_err(sp, fluent::example::example_error);
+
+// In some cases, you might need to check if `sp` is generated by a macro to
+// avoid printing weird errors about macro-generated code.
+
+if let Ok(snippet) = sess.source_map().span_to_snippet(sp) {
+    // Use the snippet to generate a suggested fix
+    err.span_suggestion(suggestion_sp, fluent::example::try_qux_suggestion, format!("qux {}", snippet));
+} else {
+    // If we weren't able to generate a snippet, then emit a "help" message
+    // instead of a concrete "suggestion". In practice this is unlikely to be
+    // reached.
+    err.span_help(suggestion_sp, fluent::example::qux_suggestion);
+}
+
+// emit the error
+err.emit();
+
example-example-error = oh no! this is an error!
+  .try-qux-suggestion = try using a qux here
+  .qux-suggestion = you could use a qux here instead
+
+

Suggestions

+

In addition to telling the user exactly why their code is wrong, it's +oftentimes furthermore possible to tell them how to fix it. To this end, +Diag offers a structured suggestions API, which formats code +suggestions pleasingly in the terminal, or (when the --error-format json flag +is passed) as JSON for consumption by tools like rustfix.

+

Not all suggestions should be applied mechanically, they have a degree of +confidence in the suggested code, from high +(Applicability::MachineApplicable) to low (Applicability::MaybeIncorrect). +Be conservative when choosing the level. Use the +span_suggestion method of Diag to +make a suggestion. The last argument provides a hint to tools whether +the suggestion is mechanically applicable or not.

+

Suggestions point to one or more spans with corresponding code that will +replace their current content.

+

The message that accompanies them should be understandable in the following +contexts:

+
    +
  • shown as an independent sub-diagnostic (this is the default output)
  • +
  • shown as a label pointing at the affected span (this is done automatically if +some heuristics for verbosity are met)
  • +
  • shown as a help sub-diagnostic with no content (used for cases where the +suggestion is obvious from the text, but we still want to let tools to apply +them)
  • +
  • not shown (used for very obvious cases, but we still want to allow tools to +apply them)
  • +
+

For example, to make our qux suggestion machine-applicable, we would do:

+
let mut err = sess.dcx.struct_span_err(sp, fluent::example::message);
+
+if let Ok(snippet) = sess.source_map().span_to_snippet(sp) {
+    err.span_suggestion(
+        suggestion_sp,
+        fluent::example::try_qux_suggestion,
+        format!("qux {}", snippet),
+        Applicability::MachineApplicable,
+    );
+} else {
+    err.span_help(suggestion_sp, fluent::example::qux_suggestion);
+}
+
+err.emit();
+

This might emit an error like

+
$ rustc mycode.rs
+error[E0999]: oh no! this is an error!
+ --> mycode.rs:3:5
+  |
+3 |     sad()
+  |     ^ help: try using a qux here: `qux sad()`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0999`.
+
+

In some cases, like when the suggestion spans multiple lines or when there are +multiple suggestions, the suggestions are displayed on their own:

+
error[E0999]: oh no! this is an error!
+ --> mycode.rs:3:5
+  |
+3 |     sad()
+  |     ^
+help: try using a qux here:
+  |
+3 |     qux sad()
+  |     ^^^
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0999`.
+
+

The possible values of Applicability are:

+
    +
  • MachineApplicable: Can be applied mechanically.
  • +
  • HasPlaceholders: Cannot be applied mechanically because it has placeholder +text in the suggestions. For example: try adding a type: `let x: <type>` .
  • +
  • MaybeIncorrect: Cannot be applied mechanically because the suggestion may +or may not be a good one.
  • +
  • Unspecified: Cannot be applied mechanically because we don't know which +of the above cases it falls into.
  • +
+

Suggestion Style Guide

+
    +
  • +

    Suggestions should not be a question. In particular, language like "did you +mean" should be avoided. Sometimes, it's unclear why a particular suggestion +is being made. In these cases, it's better to be upfront about what the +suggestion is.

    +

    Compare "did you mean: Foo" vs. "there is a struct with a similar name: Foo".

    +
  • +
  • +

    The message should not contain any phrases like "the following", "as shown", +etc. Use the span to convey what is being talked about.

    +
  • +
  • +

    The message may contain further instruction such as "to do xyz, use" or "to do +xyz, use abc".

    +
  • +
  • +

    The message may contain a name of a function, variable, or type, but avoid +whole expressions.

    +
  • +
+

Lints

+

The compiler linting infrastructure is defined in the rustc_middle::lint +module.

+

When do lints run?

+

Different lints will run at different times based on what information the lint +needs to do its job. Some lints get grouped into passes where the lints +within a pass are processed together via a single visitor. Some of the passes +are:

+
    +
  • +

    Pre-expansion pass: Works on AST nodes before macro expansion. This +should generally be avoided.

    +
      +
    • Example: keyword_idents checks for identifiers that will become +keywords in future editions, but is sensitive to identifiers used in +macros.
    • +
    +
  • +
  • +

    Early lint pass: Works on AST nodes after macro expansion and name +resolution, just before AST lowering. These lints are for purely +syntactical lints.

    +
      +
    • Example: The unused_parens lint checks for parenthesized-expressions +in situations where they are not needed, like an if condition.
    • +
    +
  • +
  • +

    Late lint pass: Works on HIR nodes, towards the end of analysis (after +borrow checking, etc.). These lints have full type information available. +Most lints are late.

    +
      +
    • Example: The invalid_value lint (which checks for obviously invalid +uninitialized values) is a late lint because it needs type information to +figure out whether a type allows being left uninitialized.
    • +
    +
  • +
  • +

    MIR pass: Works on MIR nodes. This isn't quite the same as other passes; +lints that work on MIR nodes have their own methods for running.

    +
      +
    • Example: The arithmetic_overflow lint is emitted when it detects a +constant value that may overflow.
    • +
    +
  • +
+

Most lints work well via the pass systems, and they have a fairly +straightforward interface and easy way to integrate (mostly just implementing +a specific check function). However, some lints are easier to write when +they live on a specific code path anywhere in the compiler. For example, the +unused_mut lint is implemented in the borrow checker as it requires some +information and state in the borrow checker.

+

Some of these inline lints fire before the linting system is ready. Those +lints will be buffered where they are held until later phases of the +compiler when the linting system is ready. See Linting early in the +compiler.

+

Lint definition terms

+

Lints are managed via the LintStore and get registered in +various ways. The following terms refer to the different classes of lints +generally based on how they are registered.

+
    +
  • Built-in lints are defined inside the compiler source.
  • +
  • Driver-registered lints are registered when the compiler driver is created +by an external driver. This is the mechanism used by Clippy, for example.
  • +
  • Tool lints are lints with a path prefix like clippy:: or rustdoc::.
  • +
  • Internal lints are the rustc:: scoped tool lints that only run on the +rustc source tree itself and are defined in the compiler source like a +regular built-in lint.
  • +
+

More information about lint registration can be found in the LintStore +chapter.

+

Declaring a lint

+

The built-in compiler lints are defined in the rustc_lint +crate. Lints that need to be implemented in other crates are defined in +rustc_lint_defs. You should prefer to place lints in rustc_lint if +possible. One benefit is that it is close to the dependency root, so it can be +much faster to work on.

+

Every lint is implemented via a struct that implements the LintPass trait +(you can also implement one of the more specific lint pass traits, either +EarlyLintPass or LateLintPass depending on when is best for your lint to run). +The trait implementation allows you to check certain syntactic constructs +as the linter walks the AST. You can then choose to emit lints in a +very similar way to compile errors.

+

You also declare the metadata of a particular lint via the declare_lint! +macro. This macro includes the name, the default level, a short description, and some +more details.

+

Note that the lint and the lint pass must be registered with the compiler.

+

For example, the following lint checks for uses +of while true { ... } and suggests using loop { ... } instead.

+
// Declare a lint called `WHILE_TRUE`
+declare_lint! {
+    WHILE_TRUE,
+
+    // warn-by-default
+    Warn,
+
+    // This string is the lint description
+    "suggest using `loop { }` instead of `while true { }`"
+}
+
+// This declares a struct and a lint pass, providing a list of associated lints. The
+// compiler currently doesn't use the associated lints directly (e.g., to not
+// run the pass or otherwise check that the pass emits the appropriate set of
+// lints). However, it's good to be accurate here as it's possible that we're
+// going to register the lints via the get_lints method on our lint pass (that
+// this macro generates).
+declare_lint_pass!(WhileTrue => [WHILE_TRUE]);
+
+// Helper function for `WhileTrue` lint.
+// Traverse through any amount of parenthesis and return the first non-parens expression.
+fn pierce_parens(mut expr: &ast::Expr) -> &ast::Expr {
+    while let ast::ExprKind::Paren(sub) = &expr.kind {
+        expr = sub;
+    }
+    expr
+}
+
+// `EarlyLintPass` has lots of methods. We only override the definition of
+// `check_expr` for this lint because that's all we need, but you could
+// override other methods for your own lint. See the rustc docs for a full
+// list of methods.
+impl EarlyLintPass for WhileTrue {
+    fn check_expr(&mut self, cx: &EarlyContext<'_>, e: &ast::Expr) {
+        if let ast::ExprKind::While(cond, ..) = &e.kind
+            && let ast::ExprKind::Lit(ref lit) = pierce_parens(cond).kind
+            && let ast::LitKind::Bool(true) = lit.kind
+            && !lit.span.from_expansion()
+        {
+            let condition_span = cx.sess.source_map().guess_head_span(e.span);
+            cx.struct_span_lint(WHILE_TRUE, condition_span, |lint| {
+                lint.build(fluent::example::use_loop)
+                    .span_suggestion_short(
+                        condition_span,
+                        fluent::example::suggestion,
+                        "loop".to_owned(),
+                        Applicability::MachineApplicable,
+                    )
+                    .emit();
+            })
+        }
+    }
+}
+
example-use-loop = denote infinite loops with `loop {"{"} ... {"}"}`
+  .suggestion = use `loop`
+
+

Edition-gated lints

+

Sometimes we want to change the behavior of a lint in a new edition. To do this, +we just add the transition to our invocation of declare_lint!:

+
declare_lint! {
+    pub ANONYMOUS_PARAMETERS,
+    Allow,
+    "detects anonymous parameters",
+    Edition::Edition2018 => Warn,
+}
+

This makes the ANONYMOUS_PARAMETERS lint allow-by-default in the 2015 edition +but warn-by-default in the 2018 edition.

+

See Edition-specific lints for more information.

+

Feature-gated lints

+

Lints belonging to a feature should only be usable if the feature is enabled in the +crate. To support this, lint declarations can contain a feature gate like so:

+
declare_lint! {
+    pub SOME_LINT_NAME,
+    Warn,
+    "a new and useful, but feature gated lint",
+    @feature_gate = sym::feature_name;
+}
+

Future-incompatible lints

+

The use of the term future-incompatible within the compiler has a slightly +broader meaning than what rustc exposes to users of the compiler.

+

Inside rustc, future-incompatible lints are for signalling to the user that code they have +written may not compile in the future. In general, future-incompatible code +exists for two reasons:

+
    +
  • The user has written unsound code that the compiler mistakenly accepted. While +it is within Rust's backwards compatibility guarantees to fix the soundness hole +(breaking the user's code), the lint is there to warn the user that this will happen +in some upcoming version of rustc regardless of which edition the code uses. This is the +meaning that rustc exclusively exposes to users as "future incompatible".
  • +
  • The user has written code that will either no longer compiler or will change +meaning in an upcoming edition. These are often called "edition lints" and can be +typically seen in the various "edition compatibility" lint groups (e.g., rust_2021_compatibility) +that are used to lint against code that will break if the user updates the crate's edition. +See migration lints for more details.
  • +
+

A future-incompatible lint should be declared with the @future_incompatible +additional "field":

+
declare_lint! {
+    pub ANONYMOUS_PARAMETERS,
+    Allow,
+    "detects anonymous parameters",
+    @future_incompatible = FutureIncompatibleInfo {
+        reference: "issue #41686 <https://github.com/rust-lang/rust/issues/41686>",
+        reason: FutureIncompatibilityReason::EditionError(Edition::Edition2018),
+    };
+}
+

Notice the reason field which describes why the future incompatible change is happening. +This will change the diagnostic message the user receives as well as determine which +lint groups the lint is added to. In the example above, the lint is an "edition lint" +(since its "reason" is EditionError), signifying to the user that the use of anonymous +parameters will no longer compile in Rust 2018 and beyond.

+

Inside LintStore::register_lints, lints with future_incompatible +fields get placed into either edition-based lint groups (if their reason is tied to +an edition) or into the future_incompatibility lint group.

+

If you need a combination of options that's not supported by the +declare_lint! macro, you can always change the declare_lint! macro +to support this.

+

Renaming or removing a lint

+

If it is determined that a lint is either improperly named or no longer needed, +the lint must be registered for renaming or removal, which will trigger a warning if a user tries +to use the old lint name. To declare a rename/remove, add a line with +store.register_renamed or store.register_removed to the code of the +rustc_lint::register_builtins function.

+
store.register_renamed("single_use_lifetime", "single_use_lifetimes");
+

Lint groups

+

Lints can be turned on in groups. These groups are declared in the +register_builtins function in rustc_lint::lib. The +add_lint_group! macro is used to declare a new group.

+

For example,

+
add_lint_group!(sess,
+    "nonstandard_style",
+    NON_CAMEL_CASE_TYPES,
+    NON_SNAKE_CASE,
+    NON_UPPER_CASE_GLOBALS);
+

This defines the nonstandard_style group which turns on the listed lints. A +user can turn on these lints with a !#[warn(nonstandard_style)] attribute in +the source code, or by passing -W nonstandard-style on the command line.

+

Some lint groups are created automatically in LintStore::register_lints. For instance, +any lint declared with FutureIncompatibleInfo where the reason is +FutureIncompatibilityReason::FutureReleaseError (the default when +@future_incompatible is used in declare_lint!), will be added to +the future_incompatible lint group. Editions also have their own lint groups +(e.g., rust_2021_compatibility) automatically generated for any lints signaling +future-incompatible code that will break in the specified edition.

+

Linting early in the compiler

+

On occasion, you may need to define a lint that runs before the linting system +has been initialized (e.g. during parsing or macro expansion). This is +problematic because we need to have computed lint levels to know whether we +should emit a warning or an error or nothing at all.

+

To solve this problem, we buffer the lints until the linting system is +processed. Session and ParseSess both have +buffer_lint methods that allow you to buffer a lint for later. The linting +system automatically takes care of handling buffered lints later.

+

Thus, to define a lint that runs early in the compilation, one defines a lint +like normal but invokes the lint with buffer_lint.

+

Linting even earlier in the compiler

+

The parser (rustc_ast) is interesting in that it cannot have dependencies on +any of the other rustc* crates. In particular, it cannot depend on +rustc_middle::lint or rustc_lint, where all of the compiler linting +infrastructure is defined. That's troublesome!

+

To solve this, rustc_ast defines its own buffered lint type, which +ParseSess::buffer_lint uses. After macro expansion, these buffered lints are +then dumped into the Session::buffered_lints used by the rest of the compiler.

+

JSON diagnostic output

+

The compiler accepts an --error-format json flag to output +diagnostics as JSON objects (for the benefit of tools such as cargo fix). It looks like this:

+
$ rustc json_error_demo.rs --error-format json
+{"message":"cannot add `&str` to `{integer}`","code":{"code":"E0277","explanation":"\nYou tried to use a type which doesn't implement some trait in a place which\nexpected that trait. Erroneous code example:\n\n```compile_fail,E0277\n// here we declare the Foo trait with a bar method\ntrait Foo {\n    fn bar(&self);\n}\n\n// we now declare a function which takes an object implementing the Foo trait\nfn some_func<T: Foo>(foo: T) {\n    foo.bar();\n}\n\nfn main() {\n    // we now call the method with the i32 type, which doesn't implement\n    // the Foo trait\n    some_func(5i32); // error: the trait bound `i32 : Foo` is not satisfied\n}\n```\n\nIn order to fix this error, verify that the type you're using does implement\nthe trait. Example:\n\n```\ntrait Foo {\n    fn bar(&self);\n}\n\nfn some_func<T: Foo>(foo: T) {\n    foo.bar(); // we can now use this method since i32 implements the\n               // Foo trait\n}\n\n// we implement the trait on the i32 type\nimpl Foo for i32 {\n    fn bar(&self) {}\n}\n\nfn main() {\n    some_func(5i32); // ok!\n}\n```\n\nOr in a generic context, an erroneous code example would look like:\n\n```compile_fail,E0277\nfn some_func<T>(foo: T) {\n    println!(\"{:?}\", foo); // error: the trait `core::fmt::Debug` is not\n                           //        implemented for the type `T`\n}\n\nfn main() {\n    // We now call the method with the i32 type,\n    // which *does* implement the Debug trait.\n    some_func(5i32);\n}\n```\n\nNote that the error here is in the definition of the generic function: Although\nwe only call it with a parameter that does implement `Debug`, the compiler\nstill rejects the function: It must work with all possible input types. In\norder to make this example compile, we need to restrict the generic type we're\naccepting:\n\n```\nuse std::fmt;\n\n// Restrict the input type to types that implement Debug.\nfn some_func<T: fmt::Debug>(foo: T) {\n    println!(\"{:?}\", foo);\n}\n\nfn main() {\n    // Calling the method is still fine, as i32 implements Debug.\n    some_func(5i32);\n\n    // This would fail to compile now:\n    // struct WithoutDebug;\n    // some_func(WithoutDebug);\n}\n```\n\nRust only looks at the signature of the called function, as such it must\nalready specify all requirements that will be used for every type parameter.\n"},"level":"error","spans":[{"file_name":"json_error_demo.rs","byte_start":50,"byte_end":51,"line_start":4,"line_end":4,"column_start":7,"column_end":8,"is_primary":true,"text":[{"text":"    a + b","highlight_start":7,"highlight_end":8}],"label":"no implementation for `{integer} + &str`","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"the trait `std::ops::Add<&str>` is not implemented for `{integer}`","code":null,"level":"help","spans":[],"children":[],"rendered":null}],"rendered":"error[E0277]: cannot add `&str` to `{integer}`\n --> json_error_demo.rs:4:7\n  |\n4 |     a + b\n  |       ^ no implementation for `{integer} + &str`\n  |\n  = help: the trait `std::ops::Add<&str>` is not implemented for `{integer}`\n\n"}
+{"message":"aborting due to previous error","code":null,"level":"error","spans":[],"children":[],"rendered":"error: aborting due to previous error\n\n"}
+{"message":"For more information about this error, try `rustc --explain E0277`.","code":null,"level":"","spans":[],"children":[],"rendered":"For more information about this error, try `rustc --explain E0277`.\n"}
+
+

Note that the output is a series of lines, each of which is a JSON +object, but the series of lines taken together is, unfortunately, not +valid JSON, thwarting tools and tricks (such as piping to python3 -m json.tool) +that require such. (One speculates that this was intentional for LSP +performance purposes, so that each line/object can be sent as +it is flushed?)

+

Also note the "rendered" field, which contains the "human" output as a +string; this was introduced so that UI tests could both make use of +the structured JSON and see the "human" output (well, sans colors) +without having to compile everything twice.

+

The "human" readable and the json format emitter can be found under +rustc_errors, both were moved from the rustc_ast crate to the +rustc_errors crate.

+

The JSON emitter defines its own Diagnostic +struct +(and sub-structs) for the JSON serialization. Don't confuse this with +errors::Diag!

+

#[rustc_on_unimplemented]

+

This attribute allows trait definitions to modify error messages when an implementation was +expected but not found. The string literals in the attribute are format strings and can be +formatted with named parameters. See the Formatting +section below for what parameters are permitted.

+
#[rustc_on_unimplemented(message = "an iterator over \
+    elements of type `{A}` cannot be built from a \
+    collection of type `{Self}`")]
+trait MyIterator<A> {
+    fn next(&mut self) -> A;
+}
+
+fn iterate_chars<I: MyIterator<char>>(i: I) {
+    // ...
+}
+
+fn main() {
+    iterate_chars(&[1, 2, 3][..]);
+}
+

When the user compiles this, they will see the following;

+
error[E0277]: an iterator over elements of type `char` cannot be built from a collection of type `&[{integer}]`
+  --> src/main.rs:13:19
+   |
+13 |     iterate_chars(&[1, 2, 3][..]);
+   |     ------------- ^^^^^^^^^^^^^^ the trait `MyIterator<char>` is not implemented for `&[{integer}]`
+   |     |
+   |     required by a bound introduced by this call
+   |
+note: required by a bound in `iterate_chars`
+
+

You can modify the contents of:

+
    +
  • the main error message (message)
  • +
  • the label (label)
  • +
  • the note(s) (note)
  • +
+

For example, the following attribute

+
#[rustc_on_unimplemented(message = "message", label = "label", note = "note")]
+trait MyIterator<A> {
+    fn next(&mut self) -> A;
+}
+

Would generate the following output:

+
error[E0277]: message
+  --> <file>:10:19
+   |
+10 |     iterate_chars(&[1, 2, 3][..]);
+   |     ------------- ^^^^^^^^^^^^^^ label
+   |     |
+   |     required by a bound introduced by this call
+   |
+   = help: the trait `MyIterator<char>` is not implemented for `&[{integer}]`
+   = note: note
+note: required by a bound in `iterate_chars`
+
+

The functionality discussed so far is also available with +#[diagnostic::on_unimplemented]. +If you can, you should use that instead.

+

Filtering

+

To allow more targeted error messages, it is possible to filter the +application of these fields with on.

+

You can filter on the following boolean flags:

+
    +
  • crate_local: whether the code causing the trait bound to not be +fulfilled is part of the user's crate. This is used to avoid suggesting +code changes that would require modifying a dependency.
  • +
  • direct: whether this is an user-specified rather than derived obligation.
  • +
  • from_desugaring: whether we are in some kind of desugaring, like ? +or a try block for example. This flag can also be matched on, see below.
  • +
+

You can match on the following names and values, using name = "value":

+
    +
  • cause: Match against one variant of the ObligationCauseCode +enum. Only "MainFunctionType" is supported.
  • +
  • from_desugaring: Match against a particular variant of the DesugaringKind +enum. The desugaring is identified by its variant name, for example +"QuestionMark" for ? desugaring or "TryBlock" for try blocks.
  • +
  • Self and any generic arguments of the trait, like Self = "alloc::string::String" +or Rhs="i32".
  • +
+

The compiler can provide several values to match on, for example:

+
    +
  • the self_ty, pretty printed with and without type arguments resolved.
  • +
  • "{integral}", if self_ty is an integral of which the type is known.
  • +
  • "[]", "[{ty}]", "[{ty}; _]", "[{ty}; $N]" when applicable.
  • +
  • references to said slices and arrays.
  • +
  • "fn", "unsafe fn" or "#[target_feature] fn" when self is a function.
  • +
  • "{integer}" and "{float}" if the type is a number but we haven't inferred it yet.
  • +
  • combinations of the above, like "[{integral}; _]".
  • +
+

For example, the Iterator trait can be filtered in the following way:

+
#[rustc_on_unimplemented(
+    on(Self = "&str", note = "call `.chars()` or `.as_bytes()` on `{Self}`"),
+    message = "`{Self}` is not an iterator",
+    label = "`{Self}` is not an iterator",
+    note = "maybe try calling `.iter()` or a similar method"
+)]
+pub trait Iterator {}
+

Which would produce the following outputs:

+
error[E0277]: `Foo` is not an iterator
+ --> src/main.rs:4:16
+  |
+4 |     for foo in Foo {}
+  |                ^^^ `Foo` is not an iterator
+  |
+  = note: maybe try calling `.iter()` or a similar method
+  = help: the trait `std::iter::Iterator` is not implemented for `Foo`
+  = note: required by `std::iter::IntoIterator::into_iter`
+
+error[E0277]: `&str` is not an iterator
+ --> src/main.rs:5:16
+  |
+5 |     for foo in "" {}
+  |                ^^ `&str` is not an iterator
+  |
+  = note: call `.chars()` or `.bytes() on `&str`
+  = help: the trait `std::iter::Iterator` is not implemented for `&str`
+  = note: required by `std::iter::IntoIterator::into_iter`
+
+

The on filter accepts all, any and not predicates similar to the cfg attribute:

+
#[rustc_on_unimplemented(on(
+    all(Self = "&str", T = "alloc::string::String"),
+    note = "you can coerce a `{T}` into a `{Self}` by writing `&*variable`"
+))]
+pub trait From<T>: Sized {
+    /* ... */
+}
+

Formatting

+

The string literals are format strings that accept parameters wrapped in braces +but positional and listed parameters and format specifiers are not accepted. +The following parameter names are valid:

+
    +
  • Self and all generic parameters of the trait.
  • +
  • This: the name of the trait the attribute is on, without generics.
  • +
  • Trait: the name of the "sugared" trait. See TraitRefPrintSugared.
  • +
  • ItemContext: the kind of hir::Node we're in, things like "an async block", +"a function", "an async function", etc.
  • +
+

Something like:

+
#![feature(rustc_attrs)]
+
+#[rustc_on_unimplemented(message = "Self = `{Self}`, \
+    T = `{T}`, this = `{This}`, trait = `{Trait}`, \
+    context = `{ItemContext}`")]
+pub trait From<T>: Sized {
+    fn from(x: T) -> Self;
+}
+
+fn main() {
+    let x: i8 = From::from(42_i32);
+}
+

Will format the message into

+
"Self = `i8`, T = `i32`, this = `From`, trait = `From<i32>`, context = `a function`"
+
+
+
  1. +

    This rule of thumb was suggested by @estebank here.

    +
  2. +
+
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/diagnostics/diagnostic-codes.html b/diagnostics/diagnostic-codes.html new file mode 100644 index 000000000..e88b39153 --- /dev/null +++ b/diagnostics/diagnostic-codes.html @@ -0,0 +1,12 @@ + + + + + Redirecting... + + + + +

Redirecting to... error-codes.html.

+ + diff --git a/diagnostics/diagnostic-items.html b/diagnostics/diagnostic-items.html new file mode 100644 index 000000000..be163793c --- /dev/null +++ b/diagnostics/diagnostic-items.html @@ -0,0 +1,352 @@ + + + + + + Diagnostic items - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Diagnostic Items

+

While writing lints it's common to check for specific types, traits and +functions. This raises the question on how to check for these. Types can be +checked by their complete type path. However, this requires hard coding paths +and can lead to misclassifications in some edge cases. To counteract this, +rustc has introduced diagnostic items that are used to identify types via +Symbols.

+

Finding diagnostic items

+

Diagnostic items are added to items inside rustc/std/core/alloc with the +rustc_diagnostic_item attribute. The item for a specific type can be found by +opening the source code in the documentation and looking for this attribute. +Note that it's often added with the cfg_attr attribute to avoid compilation +errors during tests. A definition often looks like this:

+
// This is the diagnostic item for this type   vvvvvvv
+#[cfg_attr(not(test), rustc_diagnostic_item = "Penguin")]
+struct Penguin;
+
+

Diagnostic items are usually only added to traits, +types, +and standalone functions. +If the goal is to check for an associated type or method, +please use the diagnostic item of the item and reference +Using Diagnostic Items.

+

Adding diagnostic items

+

A new diagnostic item can be added with these two steps:

+
    +
  1. +

    Find the target item inside the Rust repo. Now add the diagnostic item as a +string via the rustc_diagnostic_item attribute. This can sometimes cause +compilation errors while running tests. These errors can be avoided by using +the cfg_attr attribute with the not(test) condition (it's fine adding +then for all rustc_diagnostic_item attributes as a preventive manner). At +the end, it should look like this:

    +
    // This will be the new diagnostic item        vvv
    +#[cfg_attr(not(test), rustc_diagnostic_item = "Cat")]
    +struct Cat;
    +
    +

    For the naming conventions of diagnostic items, please refer to +Naming Conventions.

    +
  2. +
  3. +

    Diagnostic items in code are accessed via symbols in +rustc_span::symbol::sym. +To add your newly-created diagnostic item, +simply open the module file, +and add the name (In this case Cat) at the correct point in the list.

    +
  4. +
+

Now you can create a pull request with your changes. :tada:

+
+

NOTE: +When using diagnostic items in other projects like Clippy, +it might take some time until the repos get synchronized.

+
+

Naming conventions

+

Diagnostic items don't have a naming convention yet. +Following are some guidelines that should be used in future, +but might differ from existing names:

+
    +
  • Types, traits, and enums are named using UpperCamelCase +(Examples: Iterator and HashMap)
  • +
  • For type names that are used multiple times, +like Writer, +it's good to choose a more precise name, +maybe by adding the module to it +(Example: IoWriter)
  • +
  • Associated items should not get their own diagnostic items, +but instead be accessed indirectly by the diagnostic item +of the type they're originating from.
  • +
  • Freestanding functions like std::mem::swap() should be named using +snake_case with one important (export) module as a prefix +(Examples: mem_swap and cmp_max)
  • +
  • Modules should usually not have a diagnostic item attached to them. +Diagnostic items were added to avoid the usage of paths, +and using them on modules would therefore most likely be counterproductive.
  • +
+

Using diagnostic items

+

In rustc, diagnostic items are looked up via Symbols from inside the +rustc_span::symbol::sym module. These can then be mapped to DefIds +using TyCtxt::get_diagnostic_item() or checked if they match a DefId +using TyCtxt::is_diagnostic_item(). When mapping from a diagnostic item to +a DefId, the method will return a Option<DefId>. This can be None if +either the symbol isn't a diagnostic item or the type is not registered, for +instance when compiling with #[no_std]. +All the following examples are based on DefIds and their usage.

+

Example: Checking for a type

+
#![allow(unused)]
+fn main() {
+use rustc_span::symbol::sym;
+
+/// This example checks if the given type (`ty`) has the type `HashMap` using
+/// `TyCtxt::is_diagnostic_item()`
+fn example_1(cx: &LateContext<'_>, ty: Ty<'_>) -> bool {
+    match ty.kind() {
+        ty::Adt(adt, _) => cx.tcx.is_diagnostic_item(sym::HashMap, adt.did()),
+        _ => false,
+    }
+}
+}
+

Example: Checking for a trait implementation

+
#![allow(unused)]
+fn main() {
+/// This example checks if a given [`DefId`] from a method is part of a trait
+/// implementation defined by a diagnostic item.
+fn is_diag_trait_item(
+    cx: &LateContext<'_>,
+    def_id: DefId,
+    diag_item: Symbol
+) -> bool {
+    if let Some(trait_did) = cx.tcx.trait_of_item(def_id) {
+        return cx.tcx.is_diagnostic_item(diag_item, trait_did);
+    }
+    false
+}
+}
+

Associated Types

+

Associated types of diagnostic items can be accessed indirectly by first +getting the DefId of the trait and then calling +TyCtxt::associated_items(). This returns an AssocItems object which can +be used for further checks. Checkout +clippy_utils::ty::get_iterator_item_ty() for an example usage of this.

+

Usage in Clippy

+

Clippy tries to use diagnostic items where possible and has developed some +wrapper and utility functions. Please also refer to its documentation when +using diagnostic items in Clippy. (See Common tools for writing +lints.)

+ +

These are probably only interesting to people +who really want to take a deep dive into the topic :)

+
    +
  • rust#60966: The Rust PR that introduced diagnostic items
  • +
  • rust-clippy#5393: Clippy's tracking issue for moving away from hard coded paths to +diagnostic item
  • +
+ + +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/diagnostics/diagnostic-structs.html b/diagnostics/diagnostic-structs.html new file mode 100644 index 000000000..fa2ca81b4 --- /dev/null +++ b/diagnostics/diagnostic-structs.html @@ -0,0 +1,664 @@ + + + + + + Diagnostic and subdiagnostic structs - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Diagnostic and subdiagnostic structs

+

rustc has three diagnostic traits that can be used to create diagnostics: +Diagnostic, LintDiagnostic, and Subdiagnostic. For simple diagnostics, +instead of using the Diag API to create and emit diagnostics, +derived impls can be used. They are only suitable for simple diagnostics that +don't require much logic in deciding whether or not to add additional +subdiagnostics.

+

Such diagnostic can be translated into +different languages and each has a slug that uniquely identifies the +diagnostic.

+

#[derive(Diagnostic)] and #[derive(LintDiagnostic)]

+

Consider the definition of the "field already declared" diagnostic +shown below:

+
#[derive(Diagnostic)]
+#[diag(hir_analysis_field_already_declared, code = E0124)]
+pub struct FieldAlreadyDeclared {
+    pub field_name: Ident,
+    #[primary_span]
+    #[label]
+    pub span: Span,
+    #[label(previous_decl_label)]
+    pub prev_span: Span,
+}
+

Diagnostic can only be derived on structs and enums. +Attributes that are placed on the type for structs are placed on each +variants for enums (or vice versa). Each Diagnostic has to have one +attribute, #[diag(...)], applied to the struct or each enum variant.

+

If an error has an error code (e.g. "E0624"), then that can be specified using +the code sub-attribute. Specifying a code isn't mandatory, but if you are +porting a diagnostic that uses Diag to use Diagnostic +then you should keep the code if there was one.

+

#[diag(..)] must provide a slug as the first positional argument (a path to an +item in rustc_errors::fluent::*). A slug uniquely identifies the diagnostic +and is also how the compiler knows what error message to emit (in the default +locale of the compiler, or in the locale requested by the user). See +translation documentation to learn more about how +translatable error messages are written and how slug items are generated.

+

In our example, the Fluent message for the "field already declared" diagnostic +looks like this:

+
hir_analysis_field_already_declared =
+    field `{$field_name}` is already declared
+    .label = field already declared
+    .previous_decl_label = `{$field_name}` first declared here
+
+

hir_analysis_field_already_declared is the slug from our example and is followed +by the diagnostic message.

+

Every field of the Diagnostic which does not have an annotation is +available in Fluent messages as a variable, like field_name in the example +above. Fields can be annotated #[skip_arg] if this is undesired.

+

Using the #[primary_span] attribute on a field (that has type Span) +indicates the primary span of the diagnostic which will have the main message +of the diagnostic.

+

Diagnostics are more than just their primary message, they often include +labels, notes, help messages and suggestions, all of which can also be +specified on a Diagnostic.

+

#[label], #[help], #[warning] and #[note] can all be applied to fields which have the +type Span. Applying any of these attributes will create the corresponding +subdiagnostic with that Span. These attributes will look for their +diagnostic message in a Fluent attribute attached to the primary Fluent +message. In our example, #[label] will look for +hir_analysis_field_already_declared.label (which has the message "field already +declared"). If there is more than one subdiagnostic of the same type, then +these attributes can also take a value that is the attribute name to look for +(e.g. previous_decl_label in our example).

+

Other types have special behavior when used in a Diagnostic derive:

+
    +
  • Any attribute applied to an Option<T> will only emit a +subdiagnostic if the option is Some(..).
  • +
  • Any attribute applied to a Vec<T> will be repeated for each element of the +vector.
  • +
+

#[help], #[warning] and #[note] can also be applied to the struct itself, in which case +they work exactly like when applied to fields except the subdiagnostic won't +have a Span. These attributes can also be applied to fields of type () for +the same effect, which when combined with the Option type can be used to +represent optional #[note]/#[help]/#[warning] subdiagnostics.

+

Suggestions can be emitted using one of four field attributes:

+
    +
  • #[suggestion(slug, code = "...", applicability = "...")]
  • +
  • #[suggestion_hidden(slug, code = "...", applicability = "...")]
  • +
  • #[suggestion_short(slug, code = "...", applicability = "...")]
  • +
  • #[suggestion_verbose(slug, code = "...", applicability = "...")]
  • +
+

Suggestions must be applied on either a Span field or a (Span, MachineApplicability) field. Similarly to other field attributes, the slug +specifies the Fluent attribute with the message and defaults to the equivalent +of .suggestion. code specifies the code that should be suggested as a +replacement and is a format string (e.g. {field_name} would be replaced by +the value of the field_name field of the struct), not a Fluent identifier. +applicability can be used to specify the applicability in the attribute, it +cannot be used when the field's type contains an Applicability.

+

In the end, the Diagnostic derive will generate an implementation of +Diagnostic that looks like the following:

+
impl<'a, G: EmissionGuarantee> Diagnostic<'a> for FieldAlreadyDeclared {
+    fn into_diag(self, dcx: &'a DiagCtxt, level: Level) -> Diag<'a, G> {
+        let mut diag = Diag::new(dcx, level, fluent::hir_analysis_field_already_declared);
+        diag.set_span(self.span);
+        diag.span_label(
+            self.span,
+            fluent::hir_analysis_label
+        );
+        diag.span_label(
+            self.prev_span,
+            fluent::hir_analysis_previous_decl_label
+        );
+        diag
+    }
+}
+

Now that we've defined our diagnostic, how do we use it? It's quite +straightforward, just create an instance of the struct and pass it to +emit_err (or emit_warning):

+
tcx.dcx().emit_err(FieldAlreadyDeclared {
+    field_name: f.ident,
+    span: f.span,
+    prev_span,
+});
+

Reference

+

#[derive(Diagnostic)] and #[derive(LintDiagnostic)] support the +following attributes:

+
    +
  • #[diag(slug, code = "...")] +
      +
    • Applied to struct or enum variant.
    • +
    • Mandatory
    • +
    • Defines the text and error code to be associated with the diagnostic.
    • +
    • Slug (Mandatory) +
        +
      • Uniquely identifies the diagnostic and corresponds to its Fluent message, +mandatory.
      • +
      • A path to an item in rustc_errors::fluent, e.g. +rustc_errors::fluent::hir_analysis_field_already_declared +(rustc_errors::fluent is implicit in the attribute, so just +hir_analysis_field_already_declared).
      • +
      • See translation documentation.
      • +
      +
    • +
    • code = "..." (Optional) +
        +
      • Specifies the error code.
      • +
      +
    • +
    +
  • +
  • #[note] or #[note(slug)] (Optional) +
      +
    • Applied to struct or struct fields of type Span, Option<()> or ().
    • +
    • Adds a note subdiagnostic.
    • +
    • Value is a path to an item in rustc_errors::fluent for the note's +message. +
        +
      • Defaults to equivalent of .note.
      • +
      +
    • +
    • If applied to a Span field, creates a spanned note.
    • +
    +
  • +
  • #[help] or #[help(slug)] (Optional) +
      +
    • Applied to struct or struct fields of type Span, Option<()> or ().
    • +
    • Adds a help subdiagnostic.
    • +
    • Value is a path to an item in rustc_errors::fluent for the note's +message. +
        +
      • Defaults to equivalent of .help.
      • +
      +
    • +
    • If applied to a Span field, creates a spanned help.
    • +
    +
  • +
  • #[label] or #[label(slug)] (Optional) +
      +
    • Applied to Span fields.
    • +
    • Adds a label subdiagnostic.
    • +
    • Value is a path to an item in rustc_errors::fluent for the note's +message. +
        +
      • Defaults to equivalent of .label.
      • +
      +
    • +
    +
  • +
  • #[warning] or #[warning(slug)] (Optional) +
      +
    • Applied to struct or struct fields of type Span, Option<()> or ().
    • +
    • Adds a warning subdiagnostic.
    • +
    • Value is a path to an item in rustc_errors::fluent for the note's +message. +
        +
      • Defaults to equivalent of .warn.
      • +
      +
    • +
    +
  • +
  • #[suggestion{,_hidden,_short,_verbose}(slug, code = "...", applicability = "...")] +(Optional) +
      +
    • Applied to (Span, MachineApplicability) or Span fields.
    • +
    • Adds a suggestion subdiagnostic.
    • +
    • Slug (Mandatory) +
        +
      • A path to an item in rustc_errors::fluent, e.g. +rustc_errors::fluent::hir_analysis_field_already_declared +(rustc_errors::fluent is implicit in the attribute, so just +hir_analysis_field_already_declared). Fluent attributes for all messages +exist as top-level items in that module (so hir_analysis_message.attr is just +attr).
      • +
      • See translation documentation.
      • +
      • Defaults to rustc_errors::fluent::_subdiag::suggestion (or
      • +
      • .suggestion in Fluent).
      • +
      +
    • +
    • code = "..."/code("...", ...) (Mandatory) +
        +
      • One or multiple format strings indicating the code to be suggested as a +replacement. Multiple values signify multiple possible replacements.
      • +
      +
    • +
    • applicability = "..." (Optional) +
        +
      • String which must be one of machine-applicable, maybe-incorrect, +has-placeholders or unspecified.
      • +
      +
    • +
    +
  • +
  • #[subdiagnostic] +
      +
    • Applied to a type that implements Subdiagnostic (from +#[derive(Subdiagnostic)]).
    • +
    • Adds the subdiagnostic represented by the subdiagnostic struct.
    • +
    +
  • +
  • #[primary_span] (Optional) +
      +
    • Applied to Span fields on Subdiagnostics. Not used for LintDiagnostics.
    • +
    • Indicates the primary span of the diagnostic.
    • +
    +
  • +
  • #[skip_arg] (Optional) +
      +
    • Applied to any field.
    • +
    • Prevents the field from being provided as a diagnostic argument.
    • +
    +
  • +
+

#[derive(Subdiagnostic)]

+

It is common in the compiler to write a function that conditionally adds a +specific subdiagnostic to an error if it is applicable. Oftentimes these +subdiagnostics could be represented using a diagnostic struct even if the +overall diagnostic could not. In this circumstance, the Subdiagnostic +derive can be used to represent a partial diagnostic (e.g a note, label, help or +suggestion) as a struct.

+

Consider the definition of the "expected return type" label +shown below:

+
#![allow(unused)]
+fn main() {
+#[derive(Subdiagnostic)]
+pub enum ExpectedReturnTypeLabel<'tcx> {
+    #[label(hir_analysis_expected_default_return_type)]
+    Unit {
+        #[primary_span]
+        span: Span,
+    },
+    #[label(hir_analysis_expected_return_type)]
+    Other {
+        #[primary_span]
+        span: Span,
+        expected: Ty<'tcx>,
+    },
+}
+}
+

Like Diagnostic, Subdiagnostic can be derived for structs or +enums. Attributes that are placed on the type for structs are placed on each +variants for enums (or vice versa). Each Subdiagnostic should have one +attribute applied to the struct or each variant, one of:

+
    +
  • #[label(..)] for defining a label
  • +
  • #[note(..)] for defining a note
  • +
  • #[help(..)] for defining a help
  • +
  • #[warning(..)] for defining a warning
  • +
  • #[suggestion{,_hidden,_short,_verbose}(..)] for defining a suggestion
  • +
+

All of the above must provide a slug as the first positional argument (a path +to an item in rustc_errors::fluent::*). A slug uniquely identifies the +diagnostic and is also how the compiler knows what error message to emit (in +the default locale of the compiler, or in the locale requested by the user). +See translation documentation to learn more about how +translatable error messages are written and how slug items are generated.

+

In our example, the Fluent message for the "expected return type" label +looks like this:

+
hir_analysis_expected_default_return_type = expected `()` because of default return type
+
+hir_analysis_expected_return_type = expected `{$expected}` because of return type
+
+

Using the #[primary_span] attribute on a field (with type Span) will denote +the primary span of the subdiagnostic. A primary span is only necessary for a +label or suggestion, which can not be spanless.

+

Every field of the type/variant which does not have an annotation is available +in Fluent messages as a variable. Fields can be annotated #[skip_arg] if this +is undesired.

+

Like Diagnostic, Subdiagnostic supports Option<T> and +Vec<T> fields.

+

Suggestions can be emitted using one of four attributes on the type/variant:

+
    +
  • #[suggestion(..., code = "...", applicability = "...")]
  • +
  • #[suggestion_hidden(..., code = "...", applicability = "...")]
  • +
  • #[suggestion_short(..., code = "...", applicability = "...")]
  • +
  • #[suggestion_verbose(..., code = "...", applicability = "...")]
  • +
+

Suggestions require #[primary_span] be set on a field and can have the +following sub-attributes:

+
    +
  • The first positional argument specifies the path to a item in +rustc_errors::fluent corresponding to the Fluent attribute with the message +and defaults to the equivalent of .suggestion.
  • +
  • code specifies the code that should be suggested as a replacement and is a +format string (e.g. {field_name} would be replaced by the value of the +field_name field of the struct), not a Fluent identifier.
  • +
  • applicability can be used to specify the applicability in the attribute, it +cannot be used when the field's type contains an Applicability.
  • +
+

Applicabilities can also be specified as a field (of type Applicability) +using the #[applicability] attribute.

+

In the end, the Subdiagnostic derive will generate an implementation +of Subdiagnostic that looks like the following:

+
#![allow(unused)]
+fn main() {
+impl<'tcx> Subdiagnostic for ExpectedReturnTypeLabel<'tcx> {
+    fn add_to_diag(self, diag: &mut rustc_errors::Diagnostic) {
+        use rustc_errors::{Applicability, IntoDiagArg};
+        match self {
+            ExpectedReturnTypeLabel::Unit { span } => {
+                diag.span_label(span, rustc_errors::fluent::hir_analysis_expected_default_return_type)
+            }
+            ExpectedReturnTypeLabel::Other { span, expected } => {
+                diag.set_arg("expected", expected);
+                diag.span_label(span, rustc_errors::fluent::hir_analysis_expected_return_type)
+            }
+        }
+    }
+}
+}
+

Once defined, a subdiagnostic can be used by passing it to the subdiagnostic +function (example and example) on a +diagnostic or by assigning it to a #[subdiagnostic]-annotated field of a +diagnostic struct.

+

Reference

+

#[derive(Subdiagnostic)] supports the following attributes:

+
    +
  • #[label(slug)], #[help(slug)], #[warning(slug)] or #[note(slug)] +
      +
    • Applied to struct or enum variant. Mutually exclusive with struct/enum variant attributes.
    • +
    • Mandatory
    • +
    • Defines the type to be representing a label, help or note.
    • +
    • Slug (Mandatory) +
        +
      • Uniquely identifies the diagnostic and corresponds to its Fluent message, +mandatory.
      • +
      • A path to an item in rustc_errors::fluent, e.g. +rustc_errors::fluent::hir_analysis_field_already_declared +(rustc_errors::fluent is implicit in the attribute, so just +hir_analysis_field_already_declared).
      • +
      • See translation documentation.
      • +
      +
    • +
    +
  • +
  • #[suggestion{,_hidden,_short,_verbose}(slug, code = "...", applicability = "...")] +
      +
    • Applied to struct or enum variant. Mutually exclusive with struct/enum variant attributes.
    • +
    • Mandatory
    • +
    • Defines the type to be representing a suggestion.
    • +
    • Slug (Mandatory) +
        +
      • A path to an item in rustc_errors::fluent, e.g. +rustc_errors::fluent::hir_analysis_field_already_declared +(rustc_errors::fluent is implicit in the attribute, so just +hir_analysis::field_already_declared). Fluent attributes for all messages +exist as top-level items in that module (so hir_analysis_message.attr is just +hir_analysis::attr).
      • +
      • See translation documentation.
      • +
      • Defaults to rustc_errors::fluent::_subdiag::suggestion (or
      • +
      • .suggestion in Fluent).
      • +
      +
    • +
    • code = "..."/code("...", ...) (Mandatory) +
        +
      • One or multiple format strings indicating the code to be suggested as a +replacement. Multiple values signify multiple possible replacements.
      • +
      +
    • +
    • applicability = "..." (Optional) +
        +
      • Mutually exclusive with #[applicability] on a field.
      • +
      • Value is the applicability of the suggestion.
      • +
      • String which must be one of: +
          +
        • machine-applicable
        • +
        • maybe-incorrect
        • +
        • has-placeholders
        • +
        • unspecified
        • +
        +
      • +
      +
    • +
    +
  • +
  • #[multipart_suggestion{,_hidden,_short,_verbose}(slug, applicability = "...")] +
      +
    • Applied to struct or enum variant. Mutually exclusive with struct/enum variant attributes.
    • +
    • Mandatory
    • +
    • Defines the type to be representing a multipart suggestion.
    • +
    • Slug (Mandatory): see #[suggestion]
    • +
    • applicability = "..." (Optional): see #[suggestion]
    • +
    +
  • +
  • #[primary_span] (Mandatory for labels and suggestions; optional otherwise; not applicable +to multipart suggestions) +
      +
    • Applied to Span fields.
    • +
    • Indicates the primary span of the subdiagnostic.
    • +
    +
  • +
  • #[suggestion_part(code = "...")] (Mandatory; only applicable to multipart suggestions) +
      +
    • Applied to Span fields.
    • +
    • Indicates the span to be one part of the multipart suggestion.
    • +
    • code = "..." (Mandatory) +
        +
      • Value is a format string indicating the code to be suggested as a +replacement.
      • +
      +
    • +
    +
  • +
  • #[applicability] (Optional; only applicable to (simple and multipart) suggestions) +
      +
    • Applied to Applicability fields.
    • +
    • Indicates the applicability of the suggestion.
    • +
    +
  • +
  • #[skip_arg] (Optional) +
      +
    • Applied to any field.
    • +
    • Prevents the field from being provided as a diagnostic argument.
    • +
    +
  • +
+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/diagnostics/error-codes.html b/diagnostics/error-codes.html new file mode 100644 index 000000000..93cb4274a --- /dev/null +++ b/diagnostics/error-codes.html @@ -0,0 +1,296 @@ + + + + + + Error codes - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Error codes

+

We generally try to assign each error message a unique code like E0123. These +codes are defined in the compiler in the diagnostics.rs files found in each +crate, which basically consist of macros. All error codes have an associated +explanation: new error codes must include them. Note that not all historical +(no longer emitted) error codes have explanations.

+

Error explanations

+

The explanations are written in Markdown (see the CommonMark Spec for +specifics around syntax), and all of them are linked in the rustc_error_codes +crate. Please read RFC 1567 for details on how to format and write long error +codes. As of February 2023, there is an +effort1 to replace this largely outdated RFC with a new more +flexible standard.

+

Error explanations should expand on the error message and provide details about +why the error occurs. It is not helpful for users to copy-paste a quick fix; +explanations should help users understand why their code cannot be accepted by +the compiler. Rust prides itself on helpful error messages and long-form +explanations are no exception. However, before error explanations are +overhauled1 it is a bit open as to how exactly they should be +written, as always: ask your reviewer or ask around on the Rust Discord or Zulip.

+

Allocating a fresh code

+

Error codes are stored in compiler/rustc_error_codes.

+

To create a new error, you first need to find the next available +code. You can find it with tidy:

+
./x test tidy
+
+

This will invoke the tidy script, which generally checks that your code obeys +our coding conventions. Some of these jobs check error codes and ensure that +there aren't duplicates, etc (the tidy check is defined in +src/tools/tidy/src/error_codes.rs). Once it is finished with that, tidy will +print out the highest used error code:

+
...
+tidy check
+Found 505 error codes
+Highest error code: `E0591`
+...
+
+

Here we see the highest error code in use is E0591, so we probably want +E0592. To be sure, run rg E0592 and check, you should see no references.

+

You will have to write an extended description for your error, +which will go in rustc_error_codes/src/error_codes/E0592.md. +To register the error, open rustc_error_codes/src/error_codes.rs and add the +code (in its proper numerical order) into register_diagnostics! macro, like +this:

+
#![allow(unused)]
+fn main() {
+register_diagnostics! {
+    ...
+    E0592: include_str!("./error_codes/E0592.md"),
+}
+}
+

To actually issue the error, you can use the struct_span_code_err! macro:

+
#![allow(unused)]
+fn main() {
+struct_span_code_err!(self.dcx(), // some path to the `DiagCtxt` here
+                 span, // whatever span in the source you want
+                 E0592, // your new error code
+                 fluent::example::an_error_message)
+    .emit() // actually issue the error
+}
+

If you want to add notes or other snippets, you can invoke methods before you +call .emit():

+
#![allow(unused)]
+fn main() {
+struct_span_code_err!(...)
+    .span_label(another_span, fluent::example::example_label)
+    .span_note(another_span, fluent::example::separate_note)
+    .emit()
+}
+

For an example of a PR adding an error code, see #76143.

+

Running error code doctests

+

To test the examples added in rustc_error_codes/src/error_codes, run the +error index generator using:

+
./x test ./src/tools/error_index_generator
+
+
+
  1. +

    See the draft RFC here. ↩2

    +
  2. +
+
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/diagnostics/error-guaranteed.html b/diagnostics/error-guaranteed.html new file mode 100644 index 000000000..d67744bf2 --- /dev/null +++ b/diagnostics/error-guaranteed.html @@ -0,0 +1,244 @@ + + + + + + ErrorGuaranteed - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

ErrorGuaranteed

+

The previous sections have been about the error message that a user of the +compiler sees. But emitting an error can also have a second important side +effect within the compiler source code: it generates an +ErrorGuaranteed.

+

ErrorGuaranteed is a zero-sized type that is unconstructable outside of the +rustc_errors crate. It is generated whenever an error is reported +to the user, so that if your compiler code ever encounters a value of type +ErrorGuaranteed, the compilation is statically guaranteed to fail. This is +useful for avoiding unsoundness bugs because you can statically check that an +error code path leads to a failure.

+

There are some important considerations about the usage of ErrorGuaranteed:

+
    +
  • It does not convey information about the kind of error. For example, the +error may be due (indirectly) to a delayed bug or other compiler error. +Thus, you should not rely on +ErrorGuaranteed when deciding whether to emit an error, or what kind of error +to emit.
  • +
  • ErrorGuaranteed should not be used to indicate that a compilation will +emit an error in the future. It should be used to indicate that an error +has already been emitted -- that is, the emit() function has +already been called. For example, if we detect that a future part of the +compiler will error, we cannot use ErrorGuaranteed unless we first emit +an error or delayed bug ourselves.
  • +
+

Thankfully, in most cases, it should be statically impossible to abuse +ErrorGuaranteed.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/diagnostics/lintstore.html b/diagnostics/lintstore.html new file mode 100644 index 000000000..b087d9906 --- /dev/null +++ b/diagnostics/lintstore.html @@ -0,0 +1,302 @@ + + + + + + LintStore - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Lints

+

This page documents some of the machinery around lint registration and how we +run lints in the compiler.

+

The LintStore is the central piece of infrastructure, around which +everything rotates. The LintStore is held as part of the Session, and it +gets populated with the list of lints shortly after the Session is created.

+

Lints vs. lint passes

+

There are two parts to the linting mechanism within the compiler: lints and +lint passes. Unfortunately, a lot of the documentation we have refers to both +of these as just "lints."

+

First, we have the lint declarations themselves, +and this is where the name and default lint level and other metadata come from. +These are normally defined by way of the declare_lint! macro, +which boils down to a static with type &rustc_lint_defs::Lint +(although this may change in the future, +as the macro is somewhat unwieldy to add new fields to, +like all macros).

+

As of Aug 2022, +we lint against direct declarations without the use of the macro.

+

Lint declarations don't carry any "state" - they are merely global identifiers +and descriptions of lints. We assert at runtime that they are not registered +twice (by lint name).

+

Lint passes are the meat of any lint. Notably, there is not a one-to-one +relationship between lints and lint passes; a lint might not have any lint pass +that emits it, it could have many, or just one -- the compiler doesn't track +whether a pass is in any way associated with a particular lint, and frequently +lints are emitted as part of other work (e.g., type checking, etc.).

+

Registration

+

High-level overview

+

In rustc_interface::run_compiler, +the LintStore is created, +and all lints are registered.

+

There are three 'sources' of lints:

+
    +
  • internal lints: lints only used by the rustc codebase
  • +
  • builtin lints: lints built into the compiler and not provided by some outside +source
  • +
  • rustc_interface::Configregister_lints: lints passed into the compiler +during construction
  • +
+

Lints are registered via the LintStore::register_lint function. This should +happen just once for any lint, or an ICE will occur.

+

Once the registration is complete, we "freeze" the lint store by placing it in +an Arc.

+

Lint passes are registered separately into one of the categories +(pre-expansion, early, late, late module). Passes are registered as a closure +-- i.e., impl Fn() -> Box<dyn X>, where dyn X is either an early or late +lint pass trait object. When we run the lint passes, we run the closure and +then invoke the lint pass methods. The lint pass methods take &mut self so +they can keep track of state internally.

+

Internal lints

+

These are lints used just by the compiler or drivers like clippy. They can be +found in rustc_lint::internal.

+

An example of such a lint is the check that lint passes are implemented using +the declare_lint_pass! macro and not by hand. This is accomplished with the +LINT_PASS_IMPL_WITHOUT_MACRO lint.

+

Registration of these lints happens in the rustc_lint::register_internals +function which is called when constructing a new lint store inside +rustc_lint::new_lint_store.

+

Builtin Lints

+

These are primarily described in two places, +rustc_lint_defs::builtin and rustc_lint::builtin. +Often the first provides the definitions for the lints themselves, +and the latter provides the lint pass definitions (and implementations), +but this is not always true.

+

The builtin lint registration happens in +the rustc_lint::register_builtins function. +Just like with internal lints, +this happens inside of rustc_lint::new_lint_store.

+

Driver lints

+

These are the lints provided by drivers via the rustc_interface::Config +register_lints field, which is a callback. Drivers should, if finding it +already set, call the function currently set within the callback they add. The +best way for drivers to get access to this is by overriding the +Callbacks::config function which gives them direct access to the Config +structure.

+

Compiler lint passes are combined into one pass

+

Within the compiler, for performance reasons, we usually do not register dozens +of lint passes. Instead, we have a single lint pass of each variety (e.g., +BuiltinCombinedModuleLateLintPass) which will internally call all of the +individual lint passes; this is because then we get the benefits of static over +dynamic dispatch for each of the (often empty) trait methods.

+

Ideally, we'd not have to do this, since it adds to the complexity of +understanding the code. However, with the current type-erased lint store +approach, it is beneficial to do so for performance reasons.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/diagnostics/sessiondiagnostic.html b/diagnostics/sessiondiagnostic.html new file mode 100644 index 000000000..7fc9a4b29 --- /dev/null +++ b/diagnostics/sessiondiagnostic.html @@ -0,0 +1,12 @@ + + + + + Redirecting... + + + + +

Redirecting to... diagnostic-structs.html.

+ + diff --git a/diagnostics/translation.html b/diagnostics/translation.html new file mode 100644 index 000000000..c1f2093fb --- /dev/null +++ b/diagnostics/translation.html @@ -0,0 +1,390 @@ + + + + + + Translation - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Translation

+
+rustc's current diagnostics translation infrastructure (as of + October 2024 +) unfortunately causes some friction for compiler contributors, and the current +infrastructure is mostly pending a redesign that better addresses needs of both +compiler contributors and translation teams. Note that there is no current +active redesign proposals (as of + October 2024 +)! +

Please see the tracking issue https://github.com/rust-lang/rust/issues/132181 +for status updates.

+

We have downgraded the internal lints untranslatable_diagnostic and +diagnostic_outside_of_impl. Those internal lints previously required new code +to use the current translation infrastructure. However, because the translation +infra is waiting for a yet-to-be-proposed redesign and thus rework, we are not +mandating usage of current translation infra. Use the infra if you want to or +otherwise makes the code cleaner, but otherwise sidestep the translation infra +if you need more flexibility.

+
+

rustc's diagnostic infrastructure supports translatable diagnostics using +Fluent.

+

Writing translatable diagnostics

+

There are two ways of writing translatable diagnostics:

+
    +
  1. For simple diagnostics, using a diagnostic (or subdiagnostic) derive. +("Simple" diagnostics being those that don't require a lot of logic in +deciding to emit subdiagnostics and can therefore be represented as +diagnostic structs). See the diagnostic and subdiagnostic structs +documentation.
  2. +
  3. Using typed identifiers with Diag APIs (in +Diagnostic or Subdiagnostic or LintDiagnostic implementations).
  4. +
+

When adding or changing a translatable diagnostic, +you don't need to worry about the translations. +Only updating the original English message is required. +Currently, +each crate which defines translatable diagnostics has its own Fluent resource, +which is a file named messages.ftl, +located in the root of the crate +(such ascompiler/rustc_expand/messages.ftl).

+

Fluent

+

Fluent is built around the idea of "asymmetric localization", which aims to +decouple the expressiveness of translations from the grammar of the source +language (English in rustc's case). Prior to translation, rustc's diagnostics +relied heavily on interpolation to build the messages shown to the users. +Interpolated strings are hard to translate because writing a natural-sounding +translation might require more, less, or just different interpolation than the +English string, all of which would require changes to the compiler's source +code to support.

+

Diagnostic messages are defined in Fluent resources. A combined set of Fluent +resources for a given locale (e.g. en-US) is known as Fluent bundle.

+
typeck_address_of_temporary_taken = cannot take address of a temporary
+
+

In the above example, typeck_address_of_temporary_taken is the identifier for +a Fluent message and corresponds to the diagnostic message in English. Other +Fluent resources can be written which would correspond to a message in another +language. Each diagnostic therefore has at least one Fluent message.

+
typeck_address_of_temporary_taken = cannot take address of a temporary
+    .label = temporary value
+
+

By convention, diagnostic messages for subdiagnostics are specified as +"attributes" on Fluent messages (additional related messages, denoted by the +.<attribute-name> syntax). In the above example, label is an attribute of +typeck_address_of_temporary_taken which corresponds to the message for the +label added to this diagnostic.

+

Diagnostic messages often interpolate additional context into the message shown +to the user, such as the name of a type or of a variable. Additional context to +Fluent messages is provided as an "argument" to the diagnostic.

+
typeck_struct_expr_non_exhaustive =
+    cannot create non-exhaustive {$what} using struct expression
+
+

In the above example, the Fluent message refers to an argument named what +which is expected to exist (how arguments are provided to diagnostics is +discussed in detail later).

+

You can consult the Fluent documentation for other usage examples of Fluent +and its syntax.

+

Guideline for message naming

+

Usually, fluent uses - for separating words inside a message name. However, +_ is accepted by fluent as well. As _ fits Rust's use cases better, due to +the identifiers on the Rust side using _ as well, inside rustc, - is not +allowed for separating words, and instead _ is recommended. The only exception +is for leading -s, for message names like -passes_see_issue.

+

Guidelines for writing translatable messages

+

For a message to be translatable into different languages, all of the +information required by any language must be provided to the diagnostic as an +argument (not just the information required in the English message).

+

As the compiler team gain more experience writing diagnostics that have all of +the information necessary to be translated into different languages, this page +will be updated with more guidance. For now, the Fluent documentation has +excellent examples of translating messages into different locales and the +information that needs to be provided by the code to do so.

+

Compile-time validation and typed identifiers

+

rustc's fluent_messages macro performs compile-time validation of Fluent +resources and generates code to make it easier to refer to Fluent messages in +diagnostics.

+

Compile-time validation of Fluent resources will emit any parsing errors +from Fluent resources while building the compiler, preventing invalid Fluent +resources from causing panics in the compiler. Compile-time validation also +emits an error if multiple Fluent messages have the same identifier.

+

Internals

+

Various parts of rustc's diagnostic internals are modified in order to support +translation.

+

Messages

+

All of rustc's traditional diagnostic APIs (e.g. struct_span_err or note) +take any message that can be converted into a DiagMessage (or +SubdiagMessage).

+

rustc_error_messages::DiagMessage can represent legacy non-translatable +diagnostic messages and translatable messages. Non-translatable messages are +just Strings. Translatable messages are just a &'static str with the +identifier of the Fluent message (sometimes with an additional &'static str +with an attribute).

+

DiagMessage never needs to be interacted with directly: +DiagMessage constants are created for each diagnostic message in a +Fluent resource (described in more detail below), or DiagMessages will +either be created in the macro-generated code of a diagnostic derive.

+

rustc_error_messages::SubdiagMessage is similar, it can correspond to a +legacy non-translatable diagnostic message or the name of an attribute to a +Fluent message. Translatable SubdiagMessages must be combined with a +DiagMessage (using DiagMessage::with_subdiagnostic_message) to +be emitted (an attribute name on its own is meaningless without a corresponding +message identifier, which is what DiagMessage provides).

+

Both DiagMessage and SubdiagMessage implement Into for any +type that can be converted into a string, and converts these into +non-translatable diagnostics - this keeps all existing diagnostic calls +working.

+

Arguments

+

Additional context for Fluent messages which are interpolated into message +contents needs to be provided to translatable diagnostics.

+

Diagnostics have a set_arg function that can be used to provide this +additional context to a diagnostic.

+

Arguments have both a name (e.g. "what" in the earlier example) and a value. +Argument values are represented using the DiagArgValue type, which is +just a string or a number. rustc types can implement IntoDiagArg with +conversion into a string or a number, and common types like Ty<'tcx> already +have such implementations.

+

set_arg calls are handled transparently by diagnostic derives but need to be +added manually when using diagnostic builder APIs.

+

Loading

+

rustc makes a distinction between the "fallback bundle" for en-US that is used +by default and when another locale is missing a message; and the primary fluent +bundle which is requested by the user.

+

Diagnostic emitters implement the Emitter trait which has two functions for +accessing the fallback and primary fluent bundles (fallback_fluent_bundle and +fluent_bundle respectively).

+

Emitter also has member functions with default implementations for performing +translation of a DiagMessage using the results of +fallback_fluent_bundle and fluent_bundle.

+

All of the emitters in rustc load the fallback Fluent bundle lazily, only +reading Fluent resources and parsing them when an error message is first being +translated (for performance reasons - it doesn't make sense to do this if no +error is being emitted). rustc_error_messages::fallback_fluent_bundle returns +a std::lazy::Lazy<FluentBundle> which is provided to emitters and evaluated +in the first call to Emitter::fallback_fluent_bundle.

+

The primary Fluent bundle (for the user's desired locale) is expected to be +returned by Emitter::fluent_bundle. This bundle is used preferentially when +translating messages, the fallback bundle is only used if the primary bundle is +missing a message or not provided.

+

There are no locale bundles distributed with the compiler, +but mechanisms are implemented for loading them.

+
    +
  • -Ztranslate-additional-ftl can be used to load a specific resource as the +primary bundle for testing purposes.
  • +
  • -Ztranslate-lang can be provided a language identifier (something like +en-US) and will load any Fluent resources found in +$sysroot/share/locale/$locale/ directory (both the user provided +sysroot and any sysroot candidates).
  • +
+

Primary bundles are not currently loaded lazily and if requested will be loaded +at the start of compilation regardless of whether an error occurs. Lazily +loading primary bundles is possible if it can be assumed that loading a bundle +won't fail. Bundle loading can fail if a requested locale is missing, Fluent +files are malformed, or a message is duplicated in multiple resources.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/early_late_parameters.html b/early_late_parameters.html new file mode 100644 index 000000000..0118f5406 --- /dev/null +++ b/early_late_parameters.html @@ -0,0 +1,609 @@ + + + + + + Early vs Late bound parameters - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Early vs Late bound parameters

+ +
+

NOTE: This chapter largely talks about early/late bound as being solely relevant when discussing function item types/function definitions. This is potentially not completely true, async blocks and closures should likely be discussed somewhat in this chapter.

+
+

What does it mean to be "early" bound or "late" bound

+

Every function definition has a corresponding ZST that implements the Fn* traits known as a function item type. This part of the chapter will talk a little bit about the "desugaring" of function item types as it is useful context for explaining the difference between early bound and late bound generic parameters.

+

Let's start with a very trivial example involving no generic parameters:

+
#![allow(unused)]
+fn main() {
+fn foo(a: String) -> u8 {
+    1
+    /* snip */
+}
+}
+

If we explicitly wrote out the definitions for the function item type corresponding to foo and its associated Fn impl it would look something like this:

+
struct FooFnItem;
+
+impl Fn<(String,)> for FooFnItem {
+    type Output = u8;
+    /* fn call(&self, ...) -> ... { ... } */
+}
+

The builtin impls for the FnMut/FnOnce traits as well as the impls for Copy and Clone were omitted for brevity reasons (although these traits are implemented for function item types).

+

A slightly more complicated example would involve introducing generic parameters to the function:

+
#![allow(unused)]
+fn main() {
+fn foo<T: Sized>(a: T) -> T { 
+    a
+    /* snip */
+}
+}
+

Writing out the definitions would look something like this:

+
struct FooFnItem<T: Sized>(PhantomData<fn(T) -> T>);
+
+impl<T: Sized> Fn<(T,)> for FooFnItem<T> {
+    type Output = T;
+    /* fn call(&self, ...) -> ... { ... } */
+}
+

Note that the function item type FooFnItem is generic over some type parameter T as defined on the function foo. However, not all generic parameters defined on functions are also defined on the function item type as demonstrated here:

+
#![allow(unused)]
+fn main() {
+fn foo<'a, T: Sized>(a: &'a T) -> &'a T {
+    a
+    /* snip */
+}
+}
+

With its "desugared" form looking like so:

+
struct FooFnItem<T: Sized>(PhantomData<for<'a> fn(&'a T) -> &'a T>);
+
+impl<'a, T: Sized> Fn<(&'a T,)> for FooFnItem<T> {
+    type Output = &'a T;
+    /* fn call(&self, ...) -> ... { ... } */
+}
+

The lifetime parameter 'a from the function foo is not present on the function item type FooFnItem and is instead introduced on the builtin impl solely for use in representing the argument types.

+

Generic parameters not all being defined on the function item type means that there are two steps where generic arguments are provided when calling a function.

+
    +
  1. Naming the function (e.g. let a = foo;) the arguments for FooFnItem are provided.
  2. +
  3. Calling the function (e.g. a(&10);) any parameters defined on the builtin impl are provided.
  4. +
+

This two-step system is where the early vs late naming scheme comes from, early bound parameters are provided in the earliest step (naming the function), whereas late bound parameters are provided in the latest step (calling the function).

+

Looking at the desugaring from the previous example we can tell that T is an early bound type parameter and 'a is a late bound lifetime parameter as T is present on the function item type but 'a is not. See this example of calling foo annotated with where each generic parameter has an argument provided:

+
#![allow(unused)]
+fn main() {
+fn foo<'a, T: Sized>(a: &'a T) -> &'a T {
+    a
+    /* snip */
+}
+
+// Here we provide a type argument `String` to the
+// type parameter `T` on the function item type
+let my_func = foo::<String>;
+
+// Here (implicitly) a lifetime argument is provided
+// to the lifetime parameter `'a` on the builtin impl.
+my_func(&String::new());
+}
+

Differences between early and late bound parameters

+

Higher ranked function pointers and trait bounds

+

A generic parameter being late bound allows for more flexible usage of the function item. For example if we have some function foo with an early bound lifetime parameter and some function bar with a late bound lifetime parameter 'a we would have the following builtin Fn impls:

+
impl<'a> Fn<(&'a String,)> for FooFnItem<'a> { /* ... */ }
+impl<'a> Fn<(&'a String,)> for BarFnItem { /* ... */ }
+

The bar function has a strictly more flexible signature as the function item type can be called with a borrow with any lifetime, whereas the foo function item type would only be callable with a borrow with the same lifetime on the function item type. We can show this by simply trying to call foo's function item type multiple times with different lifetimes:

+
#![allow(unused)]
+fn main() {
+// The `'a: 'a` bound forces this lifetime to be early bound.
+fn foo<'a: 'a>(b: &'a String) -> &'a String { b }
+fn bar<'a>(b: &'a String) -> &'a String { b }
+
+// Early bound generic parameters are instantiated here when naming
+// the function `foo`. As `'a` is early bound an argument is provided.
+let f = foo::<'_>;
+
+// Both function arguments are required to have the same lifetime as
+// the lifetime parameter being early bound means that `f` is only
+// callable for one specific lifetime.
+//
+// As we call this with borrows of different lifetimes, the borrow checker
+// will error here.
+f(&String::new());
+f(&String::new());
+}
+

In this example we call foo's function item type twice, each time with a borrow of a temporary. These two borrows could not possible have lifetimes that overlap as the temporaries are only alive during the function call, not after. The lifetime parameter on foo being early bound requires all callers of f to provide a borrow with the same lifetime, as this is not possible the borrow checker errors.

+

If the lifetime parameter on foo was late bound this would be able to compile as each caller could provide a different lifetime argument for its borrow. See the following example which demonstrates this using the bar function defined above:

+
#![allow(unused)]
+fn main() {
+fn foo<'a: 'a>(b: &'a String) -> &'a String { b }
+fn bar<'a>(b: &'a String) -> &'a String { b }
+
+// Early bound parameters are instantiated here, however as `'a` is
+// late bound it is not provided here.
+let b = bar;
+
+// Late bound parameters are instantiated separately at each call site
+// allowing different lifetimes to be used by each caller.
+b(&String::new());
+b(&String::new());
+}
+

This is reflected in the ability to coerce function item types to higher ranked function pointers and prove higher ranked Fn trait bounds. We can demonstrate this with the following example:

+
#![allow(unused)]
+fn main() {
+// The `'a: 'a` bound forces this lifetime to be early bound.
+fn foo<'a: 'a>(b: &'a String) -> &'a String { b }
+fn bar<'a>(b: &'a String) -> &'a String { b }
+
+fn accepts_hr_fn(_: impl for<'a> Fn(&'a String) -> &'a String) {}
+
+fn higher_ranked_trait_bound() {
+    let bar_fn_item = bar;
+    accepts_hr_fn(bar_fn_item);
+
+    let foo_fn_item = foo::<'_>;
+    // errors
+    accepts_hr_fn(foo_fn_item);
+}
+
+fn higher_ranked_fn_ptr() {
+    let bar_fn_item = bar;
+    let fn_ptr: for<'a> fn(&'a String) -> &'a String = bar_fn_item;
+    
+    let foo_fn_item = foo::<'_>;
+    // errors
+    let fn_ptr: for<'a> fn(&'a String) -> &'a String = foo_fn_item;
+}
+}
+

In both of these cases the borrow checker errors as it does not consider foo_fn_item to be callable with a borrow of any lifetime. This is due to the fact that the lifetime parameter on foo is early bound, causing foo_fn_item to have a type of FooFnItem<'_> which (as demonstrated by the desugared Fn impl) is only callable with a borrow of the same lifetime '_.

+

Turbofishing in the presence of late bound parameters

+

As mentioned previously, the distinction between early and late bound parameters means that there are two places where generic parameters are instantiated:

+
    +
  • When naming a function (early)
  • +
  • When calling a function (late)
  • +
+

There is currently no syntax for explicitly specifying generic arguments for late bound parameters during the call step; generic arguments can only be specified for early bound parameters when naming a function. +The syntax foo::<'static>();, despite being part of a function call, behaves as (foo::<'static>)(); and instantiates the early bound generic parameters on the function item type.

+

See the following example:

+
#![allow(unused)]
+fn main() {
+fn foo<'a>(b: &'a u32) -> &'a u32 { b }
+
+let f /* : FooFnItem<????> */ = foo::<'static>;
+}
+

The above example errors as the lifetime parameter 'a is late bound and so cannot be instantiated as part of the "naming a function" step. If we make the lifetime parameter early bound we will see this code start to compile:

+
#![allow(unused)]
+fn main() {
+fn foo<'a: 'a>(b: &'a u32) -> &'a u32 { b }
+
+let f /* : FooFnItem<'static> */ = foo::<'static>;
+}
+

What the current implementation of the compiler aims to do is error when specifying lifetime arguments to a function that has both early and late bound lifetime parameters. In practice, due to excessive breakage, some cases are actually only future compatibility warnings (#42868):

+
    +
  • When the amount of lifetime arguments is the same as the number of early bound lifetime parameters a FCW is emitted instead of an error
  • +
  • An error is always downgraded to a FCW when using method call syntax
  • +
+

To demonstrate this we can write out the different kinds of functions and give them both a late and early bound lifetime:

+
fn free_function<'a: 'a, 'b>(_: &'a (), _: &'b ()) {}
+
+struct Foo;
+
+trait Trait: Sized {
+    fn trait_method<'a: 'a, 'b>(self, _: &'a (), _: &'b ());
+    fn trait_function<'a: 'a, 'b>(_: &'a (), _: &'b ());
+}
+
+impl Trait for Foo {
+    fn trait_method<'a: 'a, 'b>(self, _: &'a (), _: &'b ()) {}
+    fn trait_function<'a: 'a, 'b>(_: &'a (), _: &'b ()) {}
+}
+
+impl Foo {
+    fn inherent_method<'a: 'a, 'b>(self, _: &'a (), _: &'b ()) {}
+    fn inherent_function<'a: 'a, 'b>(_: &'a (), _: &'b ()) {}
+}
+

Then, for the first case, we can call each function with a single lifetime argument (corresponding to the one early bound lifetime parameter) and note that it only results in a FCW rather than a hard error.

+
#![allow(unused)]
+#![deny(late_bound_lifetime_arguments)]
+
+fn main() {
+fn free_function<'a: 'a, 'b>(_: &'a (), _: &'b ()) {}
+
+struct Foo;
+
+trait Trait: Sized {
+    fn trait_method<'a: 'a, 'b>(self, _: &'a (), _: &'b ());
+    fn trait_function<'a: 'a, 'b>(_: &'a (), _: &'b ());
+}
+
+impl Trait for Foo {
+    fn trait_method<'a: 'a, 'b>(self, _: &'a (), _: &'b ()) {}
+    fn trait_function<'a: 'a, 'b>(_: &'a (), _: &'b ()) {}
+}
+
+impl Foo {
+    fn inherent_method<'a: 'a, 'b>(self, _: &'a (), _: &'b ()) {}
+    fn inherent_function<'a: 'a, 'b>(_: &'a (), _: &'b ()) {}
+}
+
+// Specifying as many arguments as there are early
+// bound parameters is always a future compat warning
+Foo.trait_method::<'static>(&(), &());
+Foo::trait_method::<'static>(Foo, &(), &());
+Foo::trait_function::<'static>(&(), &());
+Foo.inherent_method::<'static>(&(), &());
+Foo::inherent_function::<'static>(&(), &());
+free_function::<'static>(&(), &());
+}
+

For the second case we call each function with more lifetime arguments than there are lifetime parameters (be it early or late bound) and note that method calls result in a FCW as opposed to the free/associated functions which result in a hard error:

+
#![allow(unused)]
+fn main() {
+fn free_function<'a: 'a, 'b>(_: &'a (), _: &'b ()) {}
+
+struct Foo;
+
+trait Trait: Sized {
+    fn trait_method<'a: 'a, 'b>(self, _: &'a (), _: &'b ());
+    fn trait_function<'a: 'a, 'b>(_: &'a (), _: &'b ());
+}
+
+impl Trait for Foo {
+    fn trait_method<'a: 'a, 'b>(self, _: &'a (), _: &'b ()) {}
+    fn trait_function<'a: 'a, 'b>(_: &'a (), _: &'b ()) {}
+}
+
+impl Foo {
+    fn inherent_method<'a: 'a, 'b>(self, _: &'a (), _: &'b ()) {}
+    fn inherent_function<'a: 'a, 'b>(_: &'a (), _: &'b ()) {}
+}
+
+// Specifying more arguments than there are early
+// bound parameters is a future compat warning when
+// using method call syntax.
+Foo.trait_method::<'static, 'static, 'static>(&(), &());
+Foo.inherent_method::<'static, 'static, 'static>(&(), &());
+// However, it is a hard error when not using method call syntax.
+Foo::trait_method::<'static, 'static, 'static>(Foo, &(), &());
+Foo::trait_function::<'static, 'static, 'static>(&(), &());
+Foo::inherent_function::<'static, 'static, 'static>(&(), &());
+free_function::<'static, 'static, 'static>(&(), &());
+}
+

Even when specifying enough lifetime arguments for both the late and early bound lifetime parameter, these arguments are not actually used to annotate the lifetime provided to late bound parameters. We can demonstrate this by turbofishing 'static to a function while providing a non-static borrow:

+
#![allow(unused)]
+fn main() {
+struct Foo;
+
+impl Foo {
+    fn inherent_method<'a: 'a, 'b>(self, _: &'a (), _: &'b String ) {}
+}
+
+Foo.inherent_method::<'static, 'static>(&(), &String::new());
+}
+

This compiles even though the &String::new() function argument does not have a 'static lifetime, this is because "extra" lifetime arguments are discarded rather than taken into account for late bound parameters when actually calling the function.

+

Liveness of types with late bound parameters

+

When checking type outlives bounds involving function item types we take into account early bound parameters. For example:

+
#![allow(unused)]
+fn main() {
+fn foo<T>(_: T) {}
+
+fn requires_static<T: 'static>(_: T) {}
+
+fn bar<T>() {
+    let f /* : FooFnItem<T> */ = foo::<T>;
+    requires_static(f);
+}
+}
+

As the type parameter T is early bound, the desugaring of the function item type for foo would look something like struct FooFnItem<T>. Then in order for FooFnItem<T>: 'static to hold we must also require T: 'static to hold as otherwise we would wind up with soundness bugs.

+

Unfortunately, due to bugs in the compiler, we do not take into account early bound lifetimes, which is the cause of the open soundness bug #84366. This means that it's impossible to demonstrate a "difference" between early/late bound parameters for liveness/type outlives bounds as the only kind of generic parameters that are able to be late bound are lifetimes which are handled incorrectly.

+

Regardless, in theory the code example below should demonstrate such a difference once #84366 is fixed:

+
#![allow(unused)]
+fn main() {
+fn early_bound<'a: 'a>(_: &'a String) {}
+fn late_bound<'a>(_: &'a String) {}
+
+fn requires_static<T: 'static>(_: T) {}
+
+fn bar<'b>() {
+    let e = early_bound::<'b>;
+    // this *should* error but does not
+    requires_static(e);
+
+    let l = late_bound;
+    // this correctly does not error
+    requires_static(l);
+}
+}
+

Requirements for a parameter to be late bound

+

Must be a lifetime parameter

+

Type and Const parameters are not able to be late bound as we do not have a way to support types such as dyn for<T> Fn(Box<T>) or for<T> fn(Box<T>). Calling such types requires being able to monomorphize the underlying function which is not possible with indirection through dynamic dispatch.

+

Must not be used in a where clause

+

Currently when a generic parameter is used in a where clause it must be early bound. For example:

+
#![allow(unused)]
+fn main() {
+trait Trait<'a> {}
+fn foo<'a, T: Trait<'a>>(_: &'a String, _: T) {}
+}
+

In this example the lifetime parameter 'a is considered to be early bound as it appears in the where clause T: Trait<'a>. This is true even for "trivial" where clauses such as 'a: 'a or those implied by wellformedness of function arguments, for example:

+
#![allow(unused)]
+fn main() {
+fn foo<'a: 'a>(_: &'a String) {}
+fn bar<'a, T: 'a>(_: &'a T) {}
+}
+

In both of these functions the lifetime parameter 'a would be considered to be early bound even though the where clauses they are used in arguably do not actually impose any constraints on the caller.

+

The reason for this restriction is a combination of two things:

+
    +
  • We cannot prove bounds on late bound parameters until they have been instantiated
  • +
  • Function pointers and trait objects do not have a way to represent yet to be proven where clauses from the underlying function
  • +
+

Take the following example:

+
#![allow(unused)]
+fn main() {
+trait Trait<'a> {}
+fn foo<'a, T: Trait<'a>>(_: &'a T) {}
+
+let f = foo::<String>;
+let f = f as for<'a> fn(&'a String);
+f(&String::new());
+}
+

At some point during type checking an error should be emitted for this code as String does not implement Trait for any lifetime.

+

If the lifetime 'a were late bound then this becomes difficult to check. When naming foo we do not know what lifetime should be used as part of the T: Trait<'a> trait bound as it has not yet been instantiated. When coercing the function item type to a function pointer we have no way of tracking the String: Trait<'a> trait bound that must be proven when calling the function.

+

If the lifetime 'a is early bound (which it is in the current implementation in rustc), then the trait bound can be checked when naming the function foo. Requiring parameters used in where clauses to be early bound gives a natural place to check where clauses defined on the function.

+

Finally, we do not require lifetimes to be early bound if they are used in implied bounds, for example:

+
#![allow(unused)]
+fn main() {
+fn foo<'a, T>(_: &'a T) {}
+
+let f = foo;
+f(&String::new());
+f(&String::new());
+}
+

This code compiles, demonstrating that the lifetime parameter is late bound, even though 'a is used in the type &'a T which implicitly requires T: 'a to hold. Implied bounds can be treated specially as any types introducing implied bounds are in the signature of the function pointer type, which means that when calling the function we know to prove T: 'a.

+

Must be constrained by argument types

+

It is important that builtin impls on function item types do not wind up with unconstrained generic parameters as this can lead to unsoundness. This is the same kind of restriction as applies to user written impls, for example the following code results in an error:

+
#![allow(unused)]
+fn main() {
+trait Trait {
+    type Assoc;
+}
+
+impl<'a> Trait for u8 {
+    type Assoc = &'a String;
+}
+}
+

The analogous example for builtin impls on function items would be the following:

+
fn foo<'a>() -> &'a String { /* ... */ }
+

If the lifetime parameter 'a were to be late bound we would wind up with a builtin impl with an unconstrained lifetime, we can manually write out the desugaring for the function item type and its impls with 'a being late bound to demonstrate this:

+
// NOTE: this is just for demonstration, in practice `'a` is early bound
+struct FooFnItem;
+
+impl<'a> Fn<()> for FooFnItem {
+    type Output = &'a String;
+    /* fn call(...) -> ... { ... } */
+}
+

In order to avoid such a situation we consider 'a to be early bound which causes the lifetime on the impl to be constrained by the self type:

+
struct FooFnItem<'a>(PhantomData<fn() -> &'a String>);
+
+impl<'a> Fn<()> for FooFnItem<'a> {
+    type Output = &'a String;
+    /* fn call(...) -> ... { ... } */
+}
+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/effects.html b/effects.html new file mode 100644 index 000000000..2dac8ec8d --- /dev/null +++ b/effects.html @@ -0,0 +1,339 @@ + + + + + + Const condition checking - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Effects and const condition checking

+

The HostEffect predicate

+

HostEffectPredicates are a kind of predicate from ~const Tr or const Tr +bounds. It has a trait reference, and a constness which could be Maybe or +Const depending on the bound. Because ~const Tr, or rather Maybe bounds +apply differently based on whichever contexts they are in, they have different +behavior than normal bounds. Where normal trait bounds on a function such as +T: Tr are collected within the predicates_of query to be proven when a +function is called and to be assumed within the function, bounds such as +T: ~const Tr will behave as a normal trait bound and add T: Tr to the result +from predicates_of, but also adds a HostEffectPredicate to the +const_conditions query.

+

On the other hand, T: const Tr bounds do not change meaning across contexts, +therefore they will result in HostEffect(T: Tr, const) being added to +predicates_of, and not const_conditions.

+

The const_conditions query

+

predicates_of represents a set of predicates that need to be proven to use an +item. For example, to use foo in the example below:

+
#![allow(unused)]
+fn main() {
+fn foo<T>() where T: Default {}
+}
+

We must be able to prove that T implements Default. In a similar vein, +const_conditions represents a set of predicates that need to be proven to use +an item in const contexts. If we adjust the example above to use const trait +bounds:

+
#![allow(unused)]
+fn main() {
+const fn foo<T>() where T: ~const Default {}
+}
+

Then foo would get a HostEffect(T: Default, maybe) in the const_conditions +query, suggesting that in order to call foo from const contexts, one must +prove that T has a const implementation of Default.

+

Enforcement of const_conditions

+

const_conditions are currently checked in various places.

+

Every call in HIR from a const context (which includes const fn and const +items) will check that const_conditions of the function we are calling hold. +This is done in FnCtxt::enforce_context_effects. Note that we don't check +if the function is only referred to but not called, as the following code needs +to compile:

+
#![allow(unused)]
+fn main() {
+const fn hi<T: ~const Default>() -> T {
+    T::default()
+}
+const X: fn() -> u32 = hi::<u32>;
+}
+

For a trait impl to be well-formed, we must be able to prove the +const_conditions of the trait from the impl's environment. This is checked +in wfcheck::check_impl.

+

Here's an example:

+
#![allow(unused)]
+fn main() {
+#[const_trait]
+trait Bar {}
+#[const_trait]
+trait Foo: ~const Bar {}
+// `const_conditions` contains `HostEffect(Self: Bar, maybe)`
+
+impl const Bar for () {}
+impl const Foo for () {}
+// ^ here we check `const_conditions` for the impl to be well-formed
+}
+

Methods of trait impls must not have stricter bounds than the method of the +trait that they are implementing. To check that the methods are compatible, a +hybrid environment is constructed with the predicates of the impl plus the +predicates of the trait method, and we attempt to prove the predicates of the +impl method. We do the same for const_conditions:

+
#![allow(unused)]
+fn main() {
+#[const_trait]
+trait Foo {
+    fn hi<T: ~const Default>();
+}
+
+impl<T: ~const Clone> Foo for Vec<T> {
+    fn hi<T: ~const PartialEq>();
+    // ^ we can't prove `T: ~const PartialEq` given `T: ~const Clone` and
+    // `T: ~const Default`, therefore we know that the method on the impl
+    // is stricter than the method on the trait.
+}
+}
+

These checks are done in compare_method_predicate_entailment. A similar +function that does the same check for associated types is called +compare_type_predicate_entailment. Both of these need to consider +const_conditions when in const contexts.

+

In MIR, as part of const checking, const_conditions of items that are called +are revalidated again in Checker::revalidate_conditional_constness.

+

explicit_implied_const_bounds on associated types and traits

+

Bounds on associated types, opaque types, and supertraits such as

+
#![allow(unused)]
+fn main() {
+trait Foo: ~const PartialEq {
+    type X: ~const PartialEq;
+}
+
+fn foo() -> impl ~const PartialEq {
+    // ^ unimplemented syntax
+}
+}
+

Have their bounds represented differently. Unlike const_conditions which need +to be proved for callers, and can be assumed inside the definition (e.g. trait +bounds on functions), these bounds need to be proved at definition (at the impl, +or when returning the opaque) but can be assumed for callers. The non-const +equivalent of these bounds are called explicit_item_bounds.

+

These bounds are checked in compare_impl_item::check_type_bounds for HIR +typeck, evaluate_host_effect_from_item_bounds in the old solver and +consider_additional_alias_assumptions in the new solver.

+

Proving HostEffectPredicates

+

HostEffectPredicates are implemented both in the old solver and the new +trait solver. In general, we can prove a HostEffect predicate when either of +these conditions are met:

+
    +
  • The predicate can be assumed from caller bounds;
  • +
  • The type has a const impl for the trait, and that const conditions on +the impl holds, and that the explicit_implied_const_bounds on the trait +holds; or
  • +
  • The type has a built-in implementation for the trait in const contexts. For +example, Fn may be implemented by function items if their const conditions +are satisfied, or Destruct is implemented in const contexts if the type can +be dropped at compile time.
  • +
+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/elasticlunr.min.js b/elasticlunr.min.js new file mode 100644 index 000000000..94b20dd2e --- /dev/null +++ b/elasticlunr.min.js @@ -0,0 +1,10 @@ +/** + * elasticlunr - http://weixsong.github.io + * Lightweight full-text search engine in Javascript for browser search and offline search. - 0.9.5 + * + * Copyright (C) 2017 Oliver Nightingale + * Copyright (C) 2017 Wei Song + * MIT Licensed + * @license + */ +!function(){function e(e){if(null===e||"object"!=typeof e)return e;var t=e.constructor();for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}var t=function(e){var n=new t.Index;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),e&&e.call(n,n),n};t.version="0.9.5",lunr=t,t.utils={},t.utils.warn=function(e){return function(t){e.console&&console.warn&&console.warn(t)}}(this),t.utils.toString=function(e){return void 0===e||null===e?"":e.toString()},t.EventEmitter=function(){this.events={}},t.EventEmitter.prototype.addListener=function(){var e=Array.prototype.slice.call(arguments),t=e.pop(),n=e;if("function"!=typeof t)throw new TypeError("last argument must be a function");n.forEach(function(e){this.hasHandler(e)||(this.events[e]=[]),this.events[e].push(t)},this)},t.EventEmitter.prototype.removeListener=function(e,t){if(this.hasHandler(e)){var n=this.events[e].indexOf(t);-1!==n&&(this.events[e].splice(n,1),0==this.events[e].length&&delete this.events[e])}},t.EventEmitter.prototype.emit=function(e){if(this.hasHandler(e)){var t=Array.prototype.slice.call(arguments,1);this.events[e].forEach(function(e){e.apply(void 0,t)},this)}},t.EventEmitter.prototype.hasHandler=function(e){return e in this.events},t.tokenizer=function(e){if(!arguments.length||null===e||void 0===e)return[];if(Array.isArray(e)){var n=e.filter(function(e){return null===e||void 0===e?!1:!0});n=n.map(function(e){return t.utils.toString(e).toLowerCase()});var i=[];return n.forEach(function(e){var n=e.split(t.tokenizer.seperator);i=i.concat(n)},this),i}return e.toString().trim().toLowerCase().split(t.tokenizer.seperator)},t.tokenizer.defaultSeperator=/[\s\-]+/,t.tokenizer.seperator=t.tokenizer.defaultSeperator,t.tokenizer.setSeperator=function(e){null!==e&&void 0!==e&&"object"==typeof e&&(t.tokenizer.seperator=e)},t.tokenizer.resetSeperator=function(){t.tokenizer.seperator=t.tokenizer.defaultSeperator},t.tokenizer.getSeperator=function(){return t.tokenizer.seperator},t.Pipeline=function(){this._queue=[]},t.Pipeline.registeredFunctions={},t.Pipeline.registerFunction=function(e,n){n in t.Pipeline.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[n]=e},t.Pipeline.getRegisteredFunction=function(e){return e in t.Pipeline.registeredFunctions!=!0?null:t.Pipeline.registeredFunctions[e]},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(e){var i=t.Pipeline.getRegisteredFunction(e);if(!i)throw new Error("Cannot load un-registered function: "+e);n.add(i)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(e){t.Pipeline.warnIfFunctionNotRegistered(e),this._queue.push(e)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._queue.indexOf(e);if(-1===i)throw new Error("Cannot find existingFn");this._queue.splice(i+1,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._queue.indexOf(e);if(-1===i)throw new Error("Cannot find existingFn");this._queue.splice(i,0,n)},t.Pipeline.prototype.remove=function(e){var t=this._queue.indexOf(e);-1!==t&&this._queue.splice(t,1)},t.Pipeline.prototype.run=function(e){for(var t=[],n=e.length,i=this._queue.length,o=0;n>o;o++){for(var r=e[o],s=0;i>s&&(r=this._queue[s](r,o,e),void 0!==r&&null!==r);s++);void 0!==r&&null!==r&&t.push(r)}return t},t.Pipeline.prototype.reset=function(){this._queue=[]},t.Pipeline.prototype.get=function(){return this._queue},t.Pipeline.prototype.toJSON=function(){return this._queue.map(function(e){return t.Pipeline.warnIfFunctionNotRegistered(e),e.label})},t.Index=function(){this._fields=[],this._ref="id",this.pipeline=new t.Pipeline,this.documentStore=new t.DocumentStore,this.index={},this.eventEmitter=new t.EventEmitter,this._idfCache={},this.on("add","remove","update",function(){this._idfCache={}}.bind(this))},t.Index.prototype.on=function(){var e=Array.prototype.slice.call(arguments);return this.eventEmitter.addListener.apply(this.eventEmitter,e)},t.Index.prototype.off=function(e,t){return this.eventEmitter.removeListener(e,t)},t.Index.load=function(e){e.version!==t.version&&t.utils.warn("version mismatch: current "+t.version+" importing "+e.version);var n=new this;n._fields=e.fields,n._ref=e.ref,n.documentStore=t.DocumentStore.load(e.documentStore),n.pipeline=t.Pipeline.load(e.pipeline),n.index={};for(var i in e.index)n.index[i]=t.InvertedIndex.load(e.index[i]);return n},t.Index.prototype.addField=function(e){return this._fields.push(e),this.index[e]=new t.InvertedIndex,this},t.Index.prototype.setRef=function(e){return this._ref=e,this},t.Index.prototype.saveDocument=function(e){return this.documentStore=new t.DocumentStore(e),this},t.Index.prototype.addDoc=function(e,n){if(e){var n=void 0===n?!0:n,i=e[this._ref];this.documentStore.addDoc(i,e),this._fields.forEach(function(n){var o=this.pipeline.run(t.tokenizer(e[n]));this.documentStore.addFieldLength(i,n,o.length);var r={};o.forEach(function(e){e in r?r[e]+=1:r[e]=1},this);for(var s in r){var u=r[s];u=Math.sqrt(u),this.index[n].addToken(s,{ref:i,tf:u})}},this),n&&this.eventEmitter.emit("add",e,this)}},t.Index.prototype.removeDocByRef=function(e){if(e&&this.documentStore.isDocStored()!==!1&&this.documentStore.hasDoc(e)){var t=this.documentStore.getDoc(e);this.removeDoc(t,!1)}},t.Index.prototype.removeDoc=function(e,n){if(e){var n=void 0===n?!0:n,i=e[this._ref];this.documentStore.hasDoc(i)&&(this.documentStore.removeDoc(i),this._fields.forEach(function(n){var o=this.pipeline.run(t.tokenizer(e[n]));o.forEach(function(e){this.index[n].removeToken(e,i)},this)},this),n&&this.eventEmitter.emit("remove",e,this))}},t.Index.prototype.updateDoc=function(e,t){var t=void 0===t?!0:t;this.removeDocByRef(e[this._ref],!1),this.addDoc(e,!1),t&&this.eventEmitter.emit("update",e,this)},t.Index.prototype.idf=function(e,t){var n="@"+t+"/"+e;if(Object.prototype.hasOwnProperty.call(this._idfCache,n))return this._idfCache[n];var i=this.index[t].getDocFreq(e),o=1+Math.log(this.documentStore.length/(i+1));return this._idfCache[n]=o,o},t.Index.prototype.getFields=function(){return this._fields.slice()},t.Index.prototype.search=function(e,n){if(!e)return[];e="string"==typeof e?{any:e}:JSON.parse(JSON.stringify(e));var i=null;null!=n&&(i=JSON.stringify(n));for(var o=new t.Configuration(i,this.getFields()).get(),r={},s=Object.keys(e),u=0;u0&&t.push(e);for(var i in n)"docs"!==i&&"df"!==i&&this.expandToken(e+i,t,n[i]);return t},t.InvertedIndex.prototype.toJSON=function(){return{root:this.root}},t.Configuration=function(e,n){var e=e||"";if(void 0==n||null==n)throw new Error("fields should not be null");this.config={};var i;try{i=JSON.parse(e),this.buildUserConfig(i,n)}catch(o){t.utils.warn("user configuration parse failed, will use default configuration"),this.buildDefaultConfig(n)}},t.Configuration.prototype.buildDefaultConfig=function(e){this.reset(),e.forEach(function(e){this.config[e]={boost:1,bool:"OR",expand:!1}},this)},t.Configuration.prototype.buildUserConfig=function(e,n){var i="OR",o=!1;if(this.reset(),"bool"in e&&(i=e.bool||i),"expand"in e&&(o=e.expand||o),"fields"in e)for(var r in e.fields)if(n.indexOf(r)>-1){var s=e.fields[r],u=o;void 0!=s.expand&&(u=s.expand),this.config[r]={boost:s.boost||0===s.boost?s.boost:1,bool:s.bool||i,expand:u}}else t.utils.warn("field name in user configuration not found in index instance fields");else this.addAllFields2UserConfig(i,o,n)},t.Configuration.prototype.addAllFields2UserConfig=function(e,t,n){n.forEach(function(n){this.config[n]={boost:1,bool:e,expand:t}},this)},t.Configuration.prototype.get=function(){return this.config},t.Configuration.prototype.reset=function(){this.config={}},lunr.SortedSet=function(){this.length=0,this.elements=[]},lunr.SortedSet.load=function(e){var t=new this;return t.elements=e,t.length=e.length,t},lunr.SortedSet.prototype.add=function(){var e,t;for(e=0;e1;){if(r===e)return o;e>r&&(t=o),r>e&&(n=o),i=n-t,o=t+Math.floor(i/2),r=this.elements[o]}return r===e?o:-1},lunr.SortedSet.prototype.locationFor=function(e){for(var t=0,n=this.elements.length,i=n-t,o=t+Math.floor(i/2),r=this.elements[o];i>1;)e>r&&(t=o),r>e&&(n=o),i=n-t,o=t+Math.floor(i/2),r=this.elements[o];return r>e?o:e>r?o+1:void 0},lunr.SortedSet.prototype.intersect=function(e){for(var t=new lunr.SortedSet,n=0,i=0,o=this.length,r=e.length,s=this.elements,u=e.elements;;){if(n>o-1||i>r-1)break;s[n]!==u[i]?s[n]u[i]&&i++:(t.add(s[n]),n++,i++)}return t},lunr.SortedSet.prototype.clone=function(){var e=new lunr.SortedSet;return e.elements=this.toArray(),e.length=e.elements.length,e},lunr.SortedSet.prototype.union=function(e){var t,n,i;this.length>=e.length?(t=this,n=e):(t=e,n=this),i=t.clone();for(var o=0,r=n.toArray();o + + + + + Using external repositories - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Using External Repositories

+

The rust-lang/rust git repository depends on several other repos in the rust-lang organization. +There are three main ways we use dependencies:

+
    +
  1. As a Cargo dependency through crates.io (e.g. rustc-rayon)
  2. +
  3. As a git (e.g. clippy) or a josh (e.g. miri) subtree
  4. +
  5. As a git submodule (e.g. cargo)
  6. +
+

As a general rule:

+
    +
  • Use crates.io for libraries that could be useful for others in the ecosystem
  • +
  • Use subtrees for tools that depend on compiler internals and need to be updated if there are breaking +changes
  • +
  • Use submodules for tools that are independent of the compiler
  • +
+

External Dependencies (subtrees)

+

The following external projects are managed using some form of a subtree:

+ +

In contrast to submodule dependencies +(see below for those), the subtree dependencies are just regular files and directories which can +be updated in tree. However, if possible, enhancements, bug fixes, etc. specific +to these tools should be filed against the tools directly in their respective +upstream repositories. The exception is that when rustc changes are required to +implement a new tool feature or test, that should happen in one collective rustc PR.

+

subtree dependencies are currently managed by two distinct approaches:

+ +

The josh tool is an alternative to git subtrees, which manages git history in a different way and scales better to larger repositories. Specific tooling is required to work with josh, you can check out the miri or rust-analyzer scripts linked above for inspiration. If you want to migrate a repository dependency from git subtree or git submodule to josh, you can check out this guide.

+

Below you can find a guide on how to perform push and pull synchronization with the main rustc repo using git subtree, although these instructions might differ repo from repo.

+

Synchronizing a subtree

+

Periodically the changes made to subtree based dependencies need to be synchronized between this +repository and the upstream tool repositories.

+

Subtree synchronizations are typically handled by the respective tool maintainers. Other users +are welcome to submit synchronization PRs, however, in order to do so you will need to modify +your local git installation and follow a very precise set of instructions. +These instructions are documented, along with several useful tips and tricks, in the +syncing subtree changes section in Clippy's Contributing guide. +The instructions are applicable for use with any subtree based tool, just be sure to +use the correct corresponding subtree directory and remote repository.

+

The synchronization process goes in two directions: subtree push and subtree pull.

+

A subtree push takes all the changes that happened to the copy in this repo and creates commits +on the remote repo that match the local changes. Every local +commit that touched the subtree causes a commit on the remote repo, but +is modified to move the files from the specified directory to the tool repo root.

+

A subtree pull takes all changes since the last subtree pull +from the tool repo and adds these commits to the rustc repo along with a merge commit that moves +the tool changes into the specified directory in the Rust repository.

+

It is recommended that you always do a push first and get that merged to the tool master branch. +Then, when you do a pull, the merge works without conflicts. +While it's definitely possible to resolve conflicts during a pull, you may have to redo the conflict +resolution if your PR doesn't get merged fast enough and there are new conflicts. Do not try to +rebase the result of a git subtree pull, rebasing merge commits is a bad idea in general.

+

You always need to specify the -P prefix to the subtree directory and the corresponding remote +repository. If you specify the wrong directory or repository +you'll get very fun merges that try to push the wrong directory to the wrong remote repository. +Luckily you can just abort this without any consequences by throwing away either the pulled commits +in rustc or the pushed branch on the remote and try again. It is usually fairly obvious +that this is happening because you suddenly get thousands of commits that want to be synchronized.

+

Creating a new subtree dependency

+

If you want to create a new subtree dependency from an existing repository, call (from this +repository's root directory!)

+
git subtree add -P src/tools/clippy https://github.com/rust-lang/rust-clippy.git master
+
+

This will create a new commit, which you may not rebase under any circumstances! Delete the commit +and redo the operation if you need to rebase.

+

Now you're done, the src/tools/clippy directory behaves as if Clippy were +part of the rustc monorepo, so no one but you (or others that synchronize +subtrees) actually needs to use git subtree.

+

External Dependencies (submodules)

+

Building Rust will also use external git repositories tracked using git +submodules. The complete list may be found in the .gitmodules file. Some +of these projects are required (like stdarch for the standard library) and +some of them are optional (like src/doc/book).

+

Usage of submodules is discussed more in the Using Git chapter.

+

Some of the submodules are allowed to be in a "broken" state where they +either don't build or their tests don't pass, e.g. the documentation books +like The Rust Reference. Maintainers of these projects will be notified +when the project is in a broken state, and they should fix them as soon +as possible. The current status is tracked on the toolstate website. +More information may be found on the Forge Toolstate chapter. +In practice, it is very rare for documentation to have broken toolstate.

+

Breakage is not allowed in the beta and stable channels, and must be addressed +before the PR is merged. They are also not allowed to be broken on master in +the week leading up to the beta cut.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/favicon.png b/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..a5b1aa16c4dcb6c872cb5af799bfc9b5552c7b9e GIT binary patch literal 5679 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 A;{X5v literal 0 HcmV?d00001 diff --git a/favicon.svg b/favicon.svg new file mode 100644 index 000000000..90e0ea58b --- /dev/null +++ b/favicon.svg @@ -0,0 +1,22 @@ + + + + + diff --git a/feature-gate-ck.html b/feature-gate-ck.html new file mode 100644 index 000000000..fa89a2d72 --- /dev/null +++ b/feature-gate-ck.html @@ -0,0 +1,219 @@ + + + + + + Feature gate checking - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Feature Gate Checking

+

TODO: this chapter #1158

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/feature-gates.html b/feature-gates.html new file mode 100644 index 000000000..6e257fb7d --- /dev/null +++ b/feature-gates.html @@ -0,0 +1,271 @@ + + + + + + Feature Gates - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Feature gates

+

This chapter is intended to provide basic help for adding, removing, and +modifying feature gates.

+

Note that this is specific to language feature gates; library feature gates use a different +mechanism.

+

Adding a feature gate

+

See "Stability in code" in the "Implementing new features" section for instructions.

+

Removing a feature gate

+

To remove a feature gate, follow these steps:

+
    +
  1. +

    Remove the feature gate declaration in rustc_feature/src/unstable.rs. +It will look like this:

    +
    /// description of feature
    +(unstable, $feature_name, "$version", Some($tracking_issue_number))
    +
  2. +
  3. +

    Add a modified version of the feature gate declaration that you just +removed to rustc_feature/src/removed.rs:

    +
    /// description of feature
    +(removed, $old_feature_name, "$version", Some($tracking_issue_number),
    + Some("$why_it_was_removed"))
    +
  4. +
+

Renaming a feature gate

+

To rename a feature gate, follow these steps (the first two are the same steps +to follow when removing a feature gate):

+
    +
  1. +

    Remove the old feature gate declaration in rustc_feature/src/unstable.rs. +It will look like this:

    +
    /// description of feature
    +(unstable, $old_feature_name, "$version", Some($tracking_issue_number))
    +
  2. +
  3. +

    Add a modified version of the old feature gate declaration that you just +removed to rustc_feature/src/removed.rs:

    +
    /// description of feature
    +/// Renamed to `$new_feature_name`
    +(removed, $old_feature_name, "$version", Some($tracking_issue_number),
    + Some("renamed to `$new_feature_name`"))
    +
  4. +
  5. +

    Add a feature gate declaration with the new name to +rustc_feature/src/unstable.rs. It should look very similar to the old +declaration:

    +
    /// description of feature
    +(unstable, $new_feature_name, "$version", Some($tracking_issue_number))
    +
  6. +
+

Stabilizing a feature

+

See "Updating the feature-gate listing" in the "Stabilizing Features" chapter +for instructions. There are additional steps you will need to take beyond just +updating the declaration!

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/fonts/OPEN-SANS-LICENSE.txt b/fonts/OPEN-SANS-LICENSE.txt new file mode 100644 index 000000000..d64569567 --- /dev/null +++ b/fonts/OPEN-SANS-LICENSE.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/fonts/SOURCE-CODE-PRO-LICENSE.txt b/fonts/SOURCE-CODE-PRO-LICENSE.txt new file mode 100644 index 000000000..366206f54 --- /dev/null +++ b/fonts/SOURCE-CODE-PRO-LICENSE.txt @@ -0,0 +1,93 @@ +Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries. + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/fonts/fonts.css b/fonts/fonts.css new file mode 100644 index 000000000..698e1e19e --- /dev/null +++ b/fonts/fonts.css @@ -0,0 +1,100 @@ +/* Open Sans is licensed under the Apache License, Version 2.0. See http://www.apache.org/licenses/LICENSE-2.0 */ +/* Source Code Pro is under the Open Font License. See https://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=OFL */ + +/* open-sans-300 - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 300; + src: local('Open Sans Light'), local('OpenSans-Light'), + url('../fonts/open-sans-v17-all-charsets-300.woff2') format('woff2'); +} + +/* open-sans-300italic - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 300; + src: local('Open Sans Light Italic'), local('OpenSans-LightItalic'), + url('../fonts/open-sans-v17-all-charsets-300italic.woff2') format('woff2'); +} + +/* open-sans-regular - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 400; + src: local('Open Sans Regular'), local('OpenSans-Regular'), + url('../fonts/open-sans-v17-all-charsets-regular.woff2') format('woff2'); +} + +/* open-sans-italic - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 400; + src: local('Open Sans Italic'), local('OpenSans-Italic'), + url('../fonts/open-sans-v17-all-charsets-italic.woff2') format('woff2'); +} + +/* open-sans-600 - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 600; + src: local('Open Sans SemiBold'), local('OpenSans-SemiBold'), + url('../fonts/open-sans-v17-all-charsets-600.woff2') format('woff2'); +} + +/* open-sans-600italic - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 600; + src: local('Open Sans SemiBold Italic'), local('OpenSans-SemiBoldItalic'), + url('../fonts/open-sans-v17-all-charsets-600italic.woff2') format('woff2'); +} + +/* open-sans-700 - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 700; + src: local('Open Sans Bold'), local('OpenSans-Bold'), + url('../fonts/open-sans-v17-all-charsets-700.woff2') format('woff2'); +} + +/* open-sans-700italic - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 700; + src: local('Open Sans Bold Italic'), local('OpenSans-BoldItalic'), + url('../fonts/open-sans-v17-all-charsets-700italic.woff2') format('woff2'); +} + +/* open-sans-800 - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 800; + src: local('Open Sans ExtraBold'), local('OpenSans-ExtraBold'), + url('../fonts/open-sans-v17-all-charsets-800.woff2') format('woff2'); +} + +/* open-sans-800italic - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 800; + src: local('Open Sans ExtraBold Italic'), local('OpenSans-ExtraBoldItalic'), + url('../fonts/open-sans-v17-all-charsets-800italic.woff2') format('woff2'); +} + +/* source-code-pro-500 - latin_vietnamese_latin-ext_greek_cyrillic-ext_cyrillic */ +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 500; + src: url('../fonts/source-code-pro-v11-all-charsets-500.woff2') format('woff2'); +} diff --git a/fonts/open-sans-v17-all-charsets-300.woff2 b/fonts/open-sans-v17-all-charsets-300.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..9f51be370fa913ce6de2922b580c262c4822b337 GIT binary patch literal 44352 zcmV(;K-<4}Pew8T0RR910Ifg(5dZ)H0f7hr0Ib{q0RR9100000000000000000000 z0000QE*lUWfmQ}!0EY+&fhq})G!YOAg!yQMtSAeP3IG8%0we>R0t6rhgFFYi4Ge-h zTM$x_K;*{m=TyO<(oF`$dr#+gT@uRz<@OP72f1way{Ld4djxa`IG0*=K;{4c|Nq>i zF~-^s+Z{rPn$}0zLzV=G*ddk#MfRZCOSo7Svxg)@O1QTM(GtC{-8am>TkfXJ&}5JO zXokZnNWAaG&x#r1r&DFc3k@sfl$|@RDaX?kWW{EN@TZnHp}gCDd}u9PW@H>gZ142z+QEhtr+J1&#|>KAj6Y2`)3tZkBe+ebjmTS6=W*;+$iHPBB3Un)Qo?6q*dE(P3T9y565vHowfyevYxI9K2P(y z$<_L{@8?J5hBF;TxvX%vUMY{MW;AQOFw;MRE?UNs>(i)Pw#F30SO&%}gA&nV#5ynh z%lr4w|41^EwI78NR7X_&MdMPeXq|gj4oJ6}tzd{4Fvwwq1Zjy_sfS1l0YYgJLOuSa zG~qZt#{MG5VL1;uY?c0qywYwhjn*_`$CiZFZCFDFz-?kG;zz}gkK?(Z;(4Ip0|Y@p zL`0q-DhfWlFW)O~_Uv1l(z*7n%=kiif-51?{(S1>dTz;-%RXz{zW_NG4POWVdSfQ{H?gb&VPWmSuI@as@lXQ zCML+EVq_sv+K31qR)E!rHdbOZcI*#x`rpX1-FQZd2?w2J5+HD^d^xN_9WLUu;R1_>$Sl2l1j{i_PqRoxBKXmEfAv5RRCG~gHz zoRPqp)jl)`>4DtY_ee=+oD0vBlrtv1+}R|)Aj>WYFNl--dsEGJL13vB!x?g=A&fDlOONKn#&pyZ<<^Gt#Y5O9+B{||V8CFK!GIY^G7 ziird-fZ=XPfYkAzOvx!^1&5rvR8_9Zlqy%TZCti4x_G(NsHD}UoUD}Q&&1ywU=hnR zK_eK;d!w1V-89?ZEBgl|7bFMOFTBI&;bU#pwZ9KM5d*ckoOlTrnn@#e=0bxf_LKF$ zd-0Mi4MXYT*CGx?Tq%ZXXdY`yIWWVJf|?K(5DNrL%GP_mZs@nw-vBb}Rw0W;wB!)N z5TjzUSNZXIA7943^nXK*r#Dw9|Mtf&ksu-=h_`Yp9V;Dkh;8<4psUZVb-$?#qp%T! ziAdB1b$5t5hjOzR8iD$*)2$e71R6>Zt8%DEY$Sg2KWN&b4Cqr8h>8`6#((@8#L}XktLaTS zryU~vMx03nNxOB%uQY)H>VL7pz)zP2nhY%8WH@)-0RsdY-07d0c5ee-ah{%=QSM%u z*8so2)#K3GU!m!|?O$6+?&yD~(Fj>ZOxK05BApxGi zJr7YET6WG{j1#TYt(MkW%SPIA4dOUU&zsN+<{}nS6r*LQrr)v8tl?2R`* z6w<>(odO>Dg>%+<`=H~%Re+D2bI267Gb@WPo}vT*tKEȮck{9tEK*~BMoW% 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 literal 0 HcmV?d00001 diff --git a/fonts/open-sans-v17-all-charsets-300italic.woff2 b/fonts/open-sans-v17-all-charsets-300italic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..2f545448418cba6668a2e7d49e9616e8c69dfd15 GIT binary patch literal 40656 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 bQBM5)6s%p?oy_T)fR3IrepgG2|qH4K6n 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

D& zKmG7e67!kl#@t`?2092GluuaI?(wqHGc$CxbhOu&-QklBs;yusvX`9XbS$sFoH+FwvSs*$VNBEt-3}x$RNG$?<{E4Ybo(b3OQlfghskNz z9}K5Z3VQ3758HkG0jW@{RIXI$g7RShkH;@~Tu&=BS_r#d@9~%{hig#_2T@|P9H)w? z=gh}5S>q^Cq)p*cpk@GaSXq4sH<14^6;np5c+t|$J9x&lS&Se9UXJl& z`)tC!CGF^PM{9Gle70PoNpUr~Y%X6Z!}+OG>@qySno#@WZs|(!*Vl)pnmp&Xm-VKQ zd#My=>7WO!yH+kA!}m@QP$?RL){Bk$Qv*y2cO;BUYachhU4q|dA!Mv|yd}&v+!gE% z{DqB_ousX_y~Gbfu*tQR**BQz*PQqTVG6mV8#<{f+pRkMaZ3L)vy(`szQ9`Qf3L->DdXY}1dMc^^Csk2NTKs7&QcmZsc@0=Q*+*}0+ubaVYp z?_|MQ3hbnc(VG!jcF*kMaE)V8EC4oZFthXNL(^I^9lZlOJ$lJAO5=PrN|Oa{fGt+^ z86n<5N4dk4So5{kLjS&dhC18h8m3KH)**}vqTFD5^iMTKEbcl&5* zW^QC_D;06l5fzsu|eN0BcF>w|9d0O=b_CFVJ+E}_9y>Lu<@sRBZRB_KQXt_6*y+3*^M zE`8Gx-~2b)<#e>sMPht9=HdY`yV6x{- z64g$bGMR7NOT#uSC|2C5PQzyT^d!Zjg}qSQ?g6h$P4ccGk1(o5QhVy0CTs#8Vc)~9 zOq7?zT_f$!BRru4nCKiVUdJbNGaH|)2T8r+vx5vQZAuho$o6xH5)jXZGCov~fcRfT z&bKQLJ3z=#;>0N62R2Ai419Sb^WkaElLsFHLI;>$2KQ0{9@j2ZT<&_5+_Qnn+unjA znR%4OQ<~yW{LJ??8#ND;4y+f5FkhH;oGaMu*V%`Yil((-`_{i*wzrFu0@>r@;Q!@9 ztG-5C$|o66q0!cO8N3oR-ZuJgm%HhR9u|9gr72nkgf z`o9%BG~SIbmXx=T6}XWG!96o?82ddt~la{g9g5aRjJlk4d!jyanU_J7pF% z77h|AA4MVw=oD5BKVh$ZqKjco|ES*^`7lni8w`M~OOWG;!0pS{gxy|=mLhl`j&hO$ zyh#a7>{8aWnp$JtTk9*E)-=y}7@o8Aa4GKMcm(?Dkj`*yw&d^BbmmXdiwG6W=0S!H zhPH0Do+Bm19r|tQO1}!sqQwXgXJt)nTYP{voU&oA`&wBCy5wXMu+q{aM~Pnu^`Xm% z>~wKZWVqL`FH-T@4e}yAN80yR(3BfT^Ox^K6v1kT9mt8Me)EpvvO~*=Dzl0TbRG>Y z021OhH){SbYUb?JJhVvyjO_=O!9SzJSr7p`)%p3ee#i#M@JWL}?M@`DqCi*ZE@Tjp F{|Bsk2y6fV literal 0 HcmV?d00001 diff --git a/fonts/open-sans-v17-all-charsets-600italic.woff2 b/fonts/open-sans-v17-all-charsets-600italic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..c99aabe80340fd88a6aeb5729251e76c9a6f35ec GIT binary patch literal 42120 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 E9}-z&tN;K2 literal 0 HcmV?d00001 diff --git a/fonts/open-sans-v17-all-charsets-700.woff2 b/fonts/open-sans-v17-all-charsets-700.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..421a1ab25fa88105ab776552d7201205f7899841 GIT binary patch literal 44988 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 literal 0 HcmV?d00001 diff --git a/fonts/open-sans-v17-all-charsets-700italic.woff2 b/fonts/open-sans-v17-all-charsets-700italic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..12ce3d20d1ce2288206e8b4f31c20f76452efe37 GIT binary patch literal 40800 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%0DER>;wf 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%0Deo9y(?}8?riQx3p&>dOY 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

33OR1_N*!%ylDDa|3D1;gP8brBkv%FrMeyX$5% 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�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 literal 0 HcmV?d00001 diff --git a/fonts/open-sans-v17-all-charsets-italic.woff2 b/fonts/open-sans-v17-all-charsets-italic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..398b68a0853fbf6368758deb1da49d347e3e7d89 GIT binary patch literal 41076 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

  • ~`;p}3;==ZtNy# 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 literal 0 HcmV?d00001 diff --git a/fonts/open-sans-v17-all-charsets-regular.woff2 b/fonts/open-sans-v17-all-charsets-regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..8383e94c65478622baf43553262e0e31b8725e2b GIT binary patch literal 43236 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⪚aqC6F-jh=?`}zBG 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 + + + + + Fuzzing - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/generic_parameters_summary.html b/generic_parameters_summary.html new file mode 100644 index 000000000..7adc2fa25 --- /dev/null +++ b/generic_parameters_summary.html @@ -0,0 +1,229 @@ + + + + + + Generic parameter definitions - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    Generic parameter definitions

    +

    This chapter will discuss how rustc tracks what generic parameters are introduced. For example given some struct Foo<T> how does rustc track that Foo defines some type parameter T (and no other generic parameters).

    +

    This will not cover how we track generic parameters introduced via for<'a> syntax (e.g. in where clauses or fn types), which is covered elsewhere in the chapter on Binders .

    +

    ty::Generics

    +

    The generic parameters introduced by an item are tracked by the ty::Generics struct. Sometimes items allow usage of generics defined on parent items, this is accomplished via the ty::Generics struct having an optional field to specify a parent item to inherit generic parameters of. For example given the following code:

    +
    trait Trait<T> {
    +    fn foo<U>(&self);
    +}
    +

    The ty::Generics used for foo would contain [U] and a parent of Some(Trait). Trait would have a ty::Generics containing [Self, T] with a parent of None.

    +

    The GenericParamDef struct is used to represent each individual generic parameter in a ty::Generics listing. The GenericParamDef struct contains information about the generic parameter, for example its name, defid, what kind of parameter it is (i.e. type, const, lifetime).

    +

    GenericParamDef also contains a u32 index representing what position the parameter is (starting from the outermost parent), this is the value used to represent usages of generic parameters (more on this in the chapter on representing types).

    +

    Interestingly, ty::Generics does not currently contain every generic parameter defined on an item. In the case of functions it only contains the early bound parameters.

    + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + + diff --git a/getting-started.html b/getting-started.html new file mode 100644 index 000000000..8614a102d --- /dev/null +++ b/getting-started.html @@ -0,0 +1,350 @@ + + + + + + Getting Started - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    Getting Started

    +

    Thank you for your interest in contributing to Rust! There are many ways to +contribute, and we appreciate all of them.

    + +

    If this is your first time contributing, the walkthrough chapter can give you a good example of +how a typical contribution would go.

    +

    This documentation is not intended to be comprehensive; it is meant to be a +quick guide for the most useful things. For more information, see this +chapter on how to build and run the compiler.

    +

    Asking Questions

    +

    If you have questions, please make a post on the Rust Zulip server or +internals.rust-lang.org. If you are contributing to Rustup, be aware they are not on +Zulip - you can ask questions in #wg-rustup on Discord. +See the list of teams and working groups and the Community page on the +official website for more resources.

    +

    As a reminder, all contributors are expected to follow our Code of Conduct.

    +

    The compiler team (or t-compiler) usually hangs out in Zulip in this +"stream"; it will be easiest to get questions answered there.

    +

    Please ask questions! A lot of people report feeling that they are "wasting +expert time", but nobody on t-compiler feels this way. Contributors are +important to us.

    +

    Also, if you feel comfortable, prefer public topics, as this means others can +see the questions and answers, and perhaps even integrate them back into this +guide :)

    +

    Experts

    +

    Not all t-compiler members are experts on all parts of rustc; it's a +pretty large project. To find out who could have some expertise on +different parts of the compiler, consult triagebot assign groups. +The sections that start with [assign* in triagebot.toml file. +But also, feel free to ask questions even if you can't figure out who to ping.

    +

    Another way to find experts for a given part of the compiler is to see who has made recent commits. +For example, to find people who have recently worked on name resolution since the 1.68.2 release, +you could run git shortlog -n 1.68.2.. compiler/rustc_resolve/. Ignore any commits starting with +"Rollup merge" or commits by @bors (see CI contribution procedures for +more information about these commits).

    +

    Etiquette

    +

    We do ask that you be mindful to include as much useful information as you can +in your question, but we recognize this can be hard if you are unfamiliar with +contributing to Rust.

    +

    Just pinging someone without providing any context can be a bit annoying and +just create noise, so we ask that you be mindful of the fact that the +t-compiler folks get a lot of pings in a day.

    +

    What should I work on?

    +

    The Rust project is quite large and it can be difficult to know which parts of the project need +help, or are a good starting place for beginners. Here are some suggested starting places.

    +

    Easy or mentored issues

    +

    If you're looking for somewhere to start, check out the following issue +search. See the Triage for an explanation of these labels. You can also try +filtering the search to areas you're interested in. For example:

    +
      +
    • repo:rust-lang/rust-clippy will only show clippy issues
    • +
    • label:T-compiler will only show issues related to the compiler
    • +
    • label:A-diagnostics will only show diagnostic issues
    • +
    +

    Not all important or beginner work has issue labels. +See below for how to find work that isn't labelled.

    +

    Recurring work

    +

    Some work is too large to be done by a single person. In this case, it's common to have "Tracking +issues" to co-ordinate the work between contributors. Here are some example tracking issues where +it's easy to pick up work without a large time commitment:

    + +

    If you find more recurring work, please feel free to add it here!

    +

    Clippy issues

    +

    The Clippy project has spent a long time making its contribution process as friendly to newcomers +as possible. Consider working on it first to get familiar with the process and the compiler +internals.

    +

    See the Clippy contribution guide for instructions on getting started.

    +

    Diagnostic issues

    +

    Many diagnostic issues are self-contained and don't need detailed background knowledge of the +compiler. You can see a list of diagnostic issues here.

    +

    Picking up abandoned pull requests

    +

    Sometimes, contributors send a pull request, but later find out that they don't have enough +time to work on it, or they simply are not interested in it anymore. Such PRs are often +eventually closed and they receive the S-inactive label. You could try to examine some of +these PRs and pick up the work. You can find the list of such PRs here.

    +

    If the PR has been implemented in some other way in the meantime, the S-inactive label +should be removed from it. If not, and it seems that there is still interest in the change, +you can try to rebase the pull request on top of the latest master branch and send a new +pull request, continuing the work on the feature.

    +

    Writing tests

    +

    Issues that have been resolved but do not have a regression test are marked with the E-needs-test label. Writing unit tests is a low-risk, lower-priority task that offers new contributors a great opportunity to familiarize themselves with the testing infrastructure and contribution workflow.

    +

    Contributing to std (standard library)

    +

    See std-dev-guide.

    +

    Contributing code to other Rust projects

    +

    There are a bunch of other projects that you can contribute to outside of the +rust-lang/rust repo, including cargo, miri, rustup, and many others.

    +

    These repos might have their own contributing guidelines and procedures. Many +of them are owned by working groups. For more info, see the documentation in those repos' READMEs.

    +

    Other ways to contribute

    +

    There are a bunch of other ways you can contribute, especially if you don't +feel comfortable jumping straight into the large rust-lang/rust codebase.

    +

    The following tasks are doable without much background knowledge but are +incredibly helpful:

    + +

    Cloning and Building

    +

    See "How to build and run the compiler".

    +

    Contributor Procedures

    +

    This section has moved to the "Contribution Procedures" chapter.

    +

    Other Resources

    +

    This section has moved to the "About this guide" chapter.

    + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + + diff --git a/git.html b/git.html new file mode 100644 index 000000000..3fb363add --- /dev/null +++ b/git.html @@ -0,0 +1,720 @@ + + + + + + Using Git - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    Using Git

    + +

    The Rust project uses Git to manage its source code. In order to +contribute, you'll need some familiarity with its features so that your changes +can be incorporated into the compiler.

    +

    The goal of this page is to cover some of the more common questions and +problems new contributors face. Although some Git basics will be covered here, +if you find that this is still a little too fast for you, it might make sense +to first read some introductions to Git, such as the Beginner and Getting +started sections of this tutorial from Atlassian. GitHub also +provides documentation and guides for beginners, or you can consult the +more in depth book from Git.

    +

    This guide is incomplete. If you run into trouble with git that this page doesn't help with, +please open an issue so we can document how to fix it.

    +

    Prerequisites

    +

    We'll assume that you've installed Git, forked rust-lang/rust, and cloned the +forked repo to your PC. We'll use the command line interface to interact +with Git; there are also a number of GUIs and IDE integrations that can +generally do the same things.

    +

    If you've cloned your fork, then you will be able to reference it with origin +in your local repo. It may be helpful to also set up a remote for the official +rust-lang/rust repo via

    +
    git remote add upstream https://github.com/rust-lang/rust.git
    +
    +

    if you're using HTTPS, or

    +
    git remote add upstream git@github.com:rust-lang/rust.git
    +
    +

    if you're using SSH.

    +

    NOTE: This page is dedicated to workflows for rust-lang/rust, but will likely be +useful when contributing to other repositories in the Rust project.

    +

    Standard Process

    +

    Below is the normal procedure that you're likely to use for most minor changes +and PRs:

    +
      +
    1. Ensure that you're making your changes on top of master: +git checkout master.
    2. +
    3. Get the latest changes from the Rust repo: git pull upstream master --ff-only. +(see No-Merge Policy for more info about this).
    4. +
    5. Make a new branch for your change: git checkout -b issue-12345-fix.
    6. +
    7. Make some changes to the repo and test them.
    8. +
    9. Stage your changes via git add src/changed/file.rs src/another/change.rs +and then commit them with git commit. Of course, making intermediate commits +may be a good idea as well. Avoid git add ., as it makes it too easy to +unintentionally commit changes that should not be committed, such as submodule +updates. You can use git status to check if there are any files you forgot +to stage.
    10. +
    11. Push your changes to your fork: git push --set-upstream origin issue-12345-fix +(After adding commits, you can use git push and after rebasing or +pulling-and-rebasing, you can use git push --force-with-lease).
    12. +
    13. Open a PR from your fork to rust-lang/rust's master branch.
    14. +
    +

    If you end up needing to rebase and are hitting conflicts, see Rebasing. +If you want to track upstream while working on long-running feature/issue, see +Keeping things up to date.

    +

    If your reviewer requests changes, the procedure for those changes looks much +the same, with some steps skipped:

    +
      +
    1. Ensure that you're making changes to the most recent version of your code: +git checkout issue-12345-fix.
    2. +
    3. Make, stage, and commit your additional changes just like before.
    4. +
    5. Push those changes to your fork: git push.
    6. +
    +

    Troubleshooting git issues

    +

    You don't need to clone rust-lang/rust from scratch if it's out of date! +Even if you think you've messed it up beyond repair, there are ways to fix +the git state that don't require downloading the whole repository again. +Here are some common issues you might run into:

    +

    I made a merge commit by accident.

    +

    Git has two ways to update your branch with the newest changes: merging and rebasing. +Rust uses rebasing. If you make a merge commit, it's not too hard to fix: +git rebase -i upstream/master.

    +

    See Rebasing for more about rebasing.

    +

    I deleted my fork on GitHub!

    +

    This is not a problem from git's perspective. If you run git remote -v, +it will say something like this:

    +
    $ git remote -v
    +origin  git@github.com:jyn514/rust.git (fetch)
    +origin  git@github.com:jyn514/rust.git (push)
    +upstream        https://github.com/rust-lang/rust (fetch)
    +upstream        https://github.com/rust-lang/rust (fetch)
    +
    +

    If you renamed your fork, you can change the URL like this:

    +
    git remote set-url origin <URL>
    +
    +

    where the <URL> is your new fork.

    +

    I changed a submodule by accident

    +

    Usually people notice this when rustbot posts a comment on github that cargo has been modified:

    +

    rustbot submodule comment

    +

    You might also notice conflicts in the web UI:

    +

    conflict in src/tools/cargo

    +

    The most common cause is that you rebased after a change and ran git add . without first running +x to update the submodules. Alternatively, you might have run cargo fmt instead of x fmt +and modified files in a submodule, then committed the changes.

    +

    To fix it, do the following things (if you changed a submodule other than cargo, +replace src/tools/cargo with the path to that submodule):

    +
      +
    1. See which commit has the accidental changes: git log --stat -n1 src/tools/cargo
    2. +
    3. Revert the changes to that commit: git checkout <my-commit>~ src/tools/cargo. Type ~ +literally but replace <my-commit> with the output from step 1.
    4. +
    5. Tell git to commit the changes: git commit --fixup <my-commit>
    6. +
    7. Repeat steps 1-3 for all the submodules you modified. +
        +
      • If you modified the submodule in several different commits, you will need to repeat steps 1-3 +for each commit you modified. You'll know when to stop when the git log command shows a commit +that's not authored by you.
      • +
      +
    8. +
    9. Squash your changes into the existing commits: git rebase --autosquash -i upstream/master
    10. +
    11. Push your changes.
    12. +
    +

    I see "error: cannot rebase" when I try to rebase

    +

    These are two common errors to see when rebasing:

    +
    error: cannot rebase: Your index contains uncommitted changes.
    +error: Please commit or stash them.
    +
    +
    error: cannot rebase: You have unstaged changes.
    +error: Please commit or stash them.
    +
    +

    (See https://git-scm.com/book/en/v2/Getting-Started-What-is-Git%3F#_the_three_states for the difference between the two.)

    +

    This means you have made changes since the last time you made a commit. To be able to rebase, either +commit your changes, or make a temporary commit called a "stash" to have them still not be committed +when you finish rebasing. You may want to configure git to make this "stash" automatically, which +will prevent the "cannot rebase" error in nearly all cases:

    +
    git config --global rebase.autostash true
    +
    +

    See https://git-scm.com/book/en/v2/Git-Tools-Stashing-and-Cleaning for more info about stashing.

    +

    I see 'Untracked Files: src/stdarch'?

    +

    This is left over from the move to the library/ directory. +Unfortunately, git rebase does not follow renames for submodules, so you +have to delete the directory yourself:

    +
    rm -r src/stdarch
    +
    +

    I see <<< HEAD?

    +

    You were probably in the middle of a rebase or merge conflict. See +Conflicts for how to fix the conflict. If you don't care about the changes +and just want to get a clean copy of the repository back, you can use git reset:

    +
    # WARNING: this throws out any local changes you've made! Consider resolving the conflicts instead.
    +git reset --hard master
    +
    +

    failed to push some refs

    +

    git push will not work properly and say something like this:

    +
     ! [rejected]        issue-xxxxx -> issue-xxxxx (non-fast-forward)
    +error: failed to push some refs to 'https://github.com/username/rust.git'
    +hint: Updates were rejected because the tip of your current branch is behind
    +hint: its remote counterpart. Integrate the remote changes (e.g.
    +hint: 'git pull ...') before pushing again.
    +hint: See the 'Note about fast-forwards' in 'git push --help' for details.
    +
    +

    The advice this gives is incorrect! Because of Rust's +"no-merge" policy the merge commit created by git pull +will not be allowed in the final PR, in addition to defeating the point of the +rebase! Use git push --force-with-lease instead.

    +

    Git is trying to rebase commits I didn't write?

    +

    If you see many commits in your rebase list, or merge commits, or commits by other people that you +didn't write, it likely means you're trying to rebase over the wrong branch. For example, you may +have a rust-lang/rust remote upstream, but ran git rebase origin/master instead of git rebase upstream/master. The fix is to abort the rebase and use the correct branch instead:

    +
    git rebase --abort
    +git rebase -i upstream/master
    +
    +
    Click here to see an example of rebasing over the wrong branch +

    Interactive rebase over the wrong branch

    +
    +

    Quick note about submodules

    +

    When updating your local repository with git pull, you may notice that sometimes +Git says you have modified some files that you have never edited. For example, +running git status gives you something like (note the new commits mention):

    +
    On branch master
    +Your branch is up to date with 'origin/master'.
    +
    +Changes not staged for commit:
    +  (use "git add <file>..." to update what will be committed)
    +  (use "git restore <file>..." to discard changes in working directory)
    +	modified:   src/llvm-project (new commits)
    +	modified:   src/tools/cargo (new commits)
    +
    +no changes added to commit (use "git add" and/or "git commit -a")
    +
    +

    These changes are not changes to files: they are changes to submodules (more on this later). +To get rid of those:

    +
    git submodule update
    +
    +

    Some submodules are not actually needed; for example, src/llvm-project doesn't need to be checked +out if you're using download-ci-llvm. To avoid having to keep fetching its history, you can use +git submodule deinit -f src/llvm-project, which will also avoid it showing as modified again.

    +

    Rebasing and Conflicts

    +

    When you edit your code locally, you are making changes to the version of +rust-lang/rust that existed when you created your feature branch. As such, when +you submit your PR it is possible that some of the changes that have been made +to rust-lang/rust since then are in conflict with the changes you've made. +When this happens, you need to resolve the conflicts before your changes can be +merged. To do that, you need to rebase your work on top of rust-lang/rust.

    +

    Rebasing

    +

    To rebase your feature branch on top of the newest version of the master branch +of rust-lang/rust, checkout your branch, and then run this command:

    +
    git pull --rebase https://github.com/rust-lang/rust.git master
    +
    +
    +

    If you are met with the following error:

    +
    error: cannot pull with rebase: Your index contains uncommitted changes.
    +error: please commit or stash them.
    +
    +

    it means that you have some uncommitted work in your working tree. In that +case, run git stash before rebasing, and then git stash pop after you +have rebased and fixed all conflicts.

    +
    +

    When you rebase a branch on master, all the changes on your branch are +reapplied to the most recent version of master. In other words, Git tries to +pretend that the changes you made to the old version of master were instead +made to the new version of master. During this process, you should expect to +encounter at least one "rebase conflict." This happens when Git's attempt to +reapply the changes fails because your changes conflicted with other changes +that have been made. You can tell that this happened because you'll see +lines in the output that look like

    +
    CONFLICT (content): Merge conflict in file.rs
    +
    +

    When you open these files, you'll see sections of the form

    +
    <<<<<<< HEAD
    +Original code
    +=======
    +Your code
    +>>>>>>> 8fbf656... Commit fixes 12345
    +
    +

    This represents the lines in the file that Git could not figure out how to +rebase. The section between <<<<<<< HEAD and ======= has the code from +master, while the other side has your version of the code. You'll need to +decide how to deal with the conflict. You may want to keep your changes, +keep the changes on master, or combine the two.

    +

    Generally, resolving the conflict consists of two steps: First, fix the +particular conflict. Edit the file to make the changes you want and remove the +<<<<<<<, ======= and >>>>>>> lines in the process. Second, check the +surrounding code. If there was a conflict, its likely there are some logical +errors lying around too! It's a good idea to run x check here to make sure +there are no glaring errors.

    +

    Once you're all done fixing the conflicts, you need to stage the files that had +conflicts in them via git add. Afterwards, run git rebase --continue to let +Git know that you've resolved the conflicts and it should finish the rebase.

    +

    Once the rebase has succeeded, you'll want to update the associated branch on +your fork with git push --force-with-lease.

    +

    Keeping things up to date

    +

    The above section on Rebasing is a specific +guide on rebasing work and dealing with merge conflicts. +Here is some general advice about how to keep your local repo +up-to-date with upstream changes:

    +

    Using git pull upstream master while on your local master branch regularly +will keep it up-to-date. You will also want to rebase your feature branches +up-to-date as well. After pulling, you can checkout the feature branches +and rebase them:

    +
    git checkout master
    +git pull upstream master --ff-only # to make certain there are no merge commits
    +git rebase master feature_branch
    +git push --force-with-lease # (set origin to be the same as local)
    +
    +

    To avoid merges as per the No-Merge Policy, you may want to use +git config pull.ff only (this will apply the config only to the local repo) +to ensure that Git doesn't create merge commits when git pulling, without +needing to pass --ff-only or --rebase every time.

    +

    You can also git push --force-with-lease from master to double-check that your +feature branches are in sync with their state on the Github side.

    +

    Advanced Rebasing

    +

    Squash your commits

    +

    "Squashing" commits into each other causes them to be merged into a single +commit. Both the upside and downside of this is that it simplifies the history. +On the one hand, you lose track of the steps in which changes were made, but +the history becomes easier to work with.

    +

    If there are no conflicts and you are just squashing to clean up the history, +use git rebase --interactive --keep-base master. This keeps the fork point +of your PR the same, making it easier to review the diff of what happened +across your rebases.

    +

    Squashing can also be useful as part of conflict resolution. +If your branch contains multiple consecutive rewrites of the same code, or if +the rebase conflicts are extremely severe, you can use +git rebase --interactive master to gain more control over the process. This +allows you to choose to skip commits, edit the commits that you do not skip, +change the order in which they are applied, or "squash" them into each other.

    +

    Alternatively, you can sacrifice the commit history like this:

    +
    # squash all the changes into one commit so you only have to worry about conflicts once
    +git rebase -i --keep-base master  # and squash all changes along the way
    +git rebase master
    +# fix all merge conflicts
    +git rebase --continue
    +
    +

    You also may want to squash just the last few commits together, possibly +because they only represent "fixups" and not real changes. For example, +git rebase --interactive HEAD~2 will allow you to edit the two commits only.

    +

    git range-diff

    +

    After completing a rebase, and before pushing up your changes, you may want to +review the changes between your old branch and your new one. You can do that +with git range-diff master @{upstream} HEAD.

    +

    The first argument to range-diff, master in this case, is the base revision +that you're comparing your old and new branch against. The second argument is +the old version of your branch; in this case, @upstream means the version that +you've pushed to GitHub, which is the same as what people will see in your pull +request. Finally, the third argument to range-diff is the new version of +your branch; in this case, it is HEAD, which is the commit that is currently +checked-out in your local repo.

    +

    Note that you can also use the equivalent, abbreviated form git range-diff master @{u} HEAD.

    +

    Unlike in regular Git diffs, you'll see a - or + next to another - or + +in the range-diff output. The marker on the left indicates a change between the +old branch and the new branch, and the marker on the right indicates a change +you've committed. So, you can think of a range-diff as a "diff of diffs" since +it shows you the differences between your old diff and your new diff.

    +

    Here's an example of git range-diff output (taken from Git's +docs):

    +
    -:  ------- > 1:  0ddba11 Prepare for the inevitable!
    +1:  c0debee = 2:  cab005e Add a helpful message at the start
    +2:  f00dbal ! 3:  decafe1 Describe a bug
    +    @@ -1,3 +1,3 @@
    +     Author: A U Thor <author@example.com>
    +
    +    -TODO: Describe a bug
    +    +Describe a bug
    +    @@ -324,5 +324,6
    +      This is expected.
    +
    +    -+What is unexpected is that it will also crash.
    +    ++Unexpectedly, it also crashes. This is a bug, and the jury is
    +    ++still out there how to fix it best. See ticket #314 for details.
    +
    +      Contact
    +3:  bedead < -:  ------- TO-UNDO
    +
    +

    (Note that git range-diff output in your terminal will probably be easier to +read than in this example because it will have colors.)

    +

    Another feature of git range-diff is that, unlike git diff, it will also +diff commit messages. This feature can be useful when amending several commit +messages so you can make sure you changed the right parts.

    +

    git range-diff is a very useful command, but note that it can take some time +to get used to its output format. You may also find Git's documentation on the +command useful, especially their "Examples" section.

    +

    No-Merge Policy

    +

    The rust-lang/rust repo uses what is known as a "rebase workflow." This means +that merge commits in PRs are not accepted. As a result, if you are running +git merge locally, chances are good that you should be rebasing instead. Of +course, this is not always true; if your merge will just be a fast-forward, +like the merges that git pull usually performs, then no merge commit is +created and you have nothing to worry about. Running git config merge.ff only +(this will apply the config to the local repo) +once will ensure that all the merges you perform are of this type, so that you +cannot make a mistake.

    +

    There are a number of reasons for this decision and like all others, it is a +tradeoff. The main advantage is the generally linear commit history. This +greatly simplifies bisecting and makes the history and commit log much easier +to follow and understand.

    +

    Tips for reviewing

    +

    NOTE: This section is for reviewing PRs, not authoring them.

    +

    Hiding whitespace

    +

    Github has a button for disabling whitespace changes that may be useful. +You can also use git diff -w origin/master to view changes locally.

    +

    hide whitespace

    +

    Fetching PRs

    +

    To checkout PRs locally, you can use git fetch upstream pull/NNNNN/head && git checkout FETCH_HEAD.

    +

    You can also use github's cli tool. Github shows a button on PRs where you can copy-paste the +command to check it out locally. See https://cli.github.com/ for more info.

    +

    gh suggestion

    +

    Moving large sections of code

    +

    Git and Github's default diff view for large moves within a file is quite poor; it will show each +line as deleted and each line as added, forcing you to compare each line yourself. Git has an option +to show moved lines in a different color:

    +
    git log -p --color-moved=dimmed-zebra --color-moved-ws=allow-indentation-change
    +
    +

    See the docs for --color-moved for more info.

    +

    range-diff

    +

    See the relevant section for PR authors. This can be useful for comparing code +that was force-pushed to make sure there are no unexpected changes.

    +

    Ignoring changes to specific files

    +

    Many large files in the repo are autogenerated. To view a diff that ignores changes to those files, +you can use the following syntax (e.g. Cargo.lock):

    +
    git log -p ':!Cargo.lock'
    +
    +

    Arbitrary patterns are supported (e.g. :!compiler/*). Patterns use the same syntax as +.gitignore, with : prepended to indicate a pattern.

    +

    Git submodules

    +

    NOTE: submodules are a nice thing to know about, but it isn't an absolute +prerequisite to contribute to rustc. If you are using Git for the first time, +you might want to get used to the main concepts of Git before reading this section.

    +

    The rust-lang/rust repository uses Git submodules as a way to use other +Rust projects from within the rust repo. Examples include Rust's fork of +llvm-project, cargo and libraries like stdarch and backtrace.

    +

    Those projects are developed and maintained in an separate Git (and GitHub) +repository, and they have their own Git history/commits, issue tracker and PRs. +Submodules allow us to create some sort of embedded sub-repository inside the +rust repository and use them like they were directories in the rust repository.

    +

    Take llvm-project for example. llvm-project is maintained in the rust-lang/llvm-project +repository, but it is used in rust-lang/rust by the compiler for code generation and +optimization. We bring it in rust as a submodule, in the src/llvm-project folder.

    +

    The contents of submodules are ignored by Git: submodules are in some sense isolated +from the rest of the repository. However, if you try to cd src/llvm-project and then +run git status:

    +
    HEAD detached at 9567f08afc943
    +nothing to commit, working tree clean
    +
    +

    As far as git is concerned, you are no longer in the rust repo, but in the llvm-project repo. +You will notice that we are in "detached HEAD" state, i.e. not on a branch but on a +particular commit.

    +

    This is because, like any dependency, we want to be able to control which version to use. +Submodules allow us to do just that: every submodule is "pinned" to a certain +commit, which doesn't change unless modified manually. If you use git checkout <commit> +in the llvm-project directory and go back to the rust directory, you can stage this +change like any other, e.g. by running git add src/llvm-project. (Note that if +you don't stage the change to commit, then you run the risk that running +x will just undo your change by switching back to the previous commit when +it automatically "updates" the submodules.)

    +

    This version selection is usually done by the maintainers of the project, and +looks like this.

    +

    Git submodules take some time to get used to, so don't worry if it isn't perfectly +clear yet. You will rarely have to use them directly and, again, you don't need +to know everything about submodules to contribute to Rust. Just know that they +exist and that they correspond to some sort of embedded subrepository dependency +that Git can nicely and fairly conveniently handle for us.

    +

    Hard-resetting submodules

    +

    Sometimes you might run into (when you run git status)

    +
    Changes not staged for commit:
    +  (use "git add <file>..." to update what will be committed)
    +  (use "git restore <file>..." to discard changes in working directory)
    +  (commit or discard the untracked or modified content in submodules)
    +        modified:   src/llvm-project (new commits, modified content)
    +
    +

    and when you try to run git submodule update it breaks horribly with errors like

    +
    error: RPC failed; curl 92 HTTP/2 stream 7 was not closed cleanly: CANCEL (err 8)
    +error: 2782 bytes of body are still expected
    +fetch-pack: unexpected disconnect while reading sideband packet
    +fatal: early EOF
    +fatal: fetch-pack: invalid index-pack output
    +fatal: Fetched in submodule path 'src/llvm-project', but it did not contain 5a5152f653959d14d68613a3a8a033fb65eec021. Direct fetching of that commit failed.
    +
    +

    If you see (new commits, modified content) you can run

    +
    git submodule foreach git reset --hard
    +
    +

    and then try git submodule update again.

    +

    Deinit git submodules

    +

    If that doesn't work, you can try to deinit all git submodules...

    +
    git submodule deinit -f --all
    +
    +

    Unfortunately sometimes your local git submodules configuration can become +completely messed up for some reason.

    +

    Overcoming fatal: not a git repository: <submodule>/../../.git/modules/<submodule>

    +

    Sometimes, for some forsaken reason, you might run into

    +
    fatal: not a git repository: src/gcc/../../.git/modules/src/gcc
    +
    +

    In this situation, for the given submodule path, i.e. <submodule_path> = src/gcc in this example, you need to:

    +
      +
    1. rm -rf <submodule_path>/.git
    2. +
    3. rm -rf .git/modules/<submodule_path>/config
    4. +
    5. rm -rf .gitconfig.lock if somehow the .gitconfig lock is orphaned.
    6. +
    +

    Then do something like ./x fmt to have bootstrap manage the submodule +checkouts for you.

    +

    Ignoring commits during git blame

    +

    Some commits contain large reformatting changes that don't otherwise change functionality. They can +be instructed to be ignored by git blame through +.git-blame-ignore-revs:

    +
      +
    1. Configure git blame to use .git-blame-ignore-revs as the list of commits to ignore: git config blame.ignorerevsfile .git-blame-ignore-revs
    2. +
    3. Add suitable commits that you wish to be ignored by git blame.
    4. +
    +

    Please include a comment for the commit that you add to .git-blame-ignore-revs so people can +easily figure out why a commit is ignored.

    + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + + diff --git a/guides/editions.html b/guides/editions.html new file mode 100644 index 000000000..945478abe --- /dev/null +++ b/guides/editions.html @@ -0,0 +1,537 @@ + + + + + + Editions - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    Editions

    + +

    This chapter gives an overview of how Edition support works in rustc. +This assumes that you are familiar with what Editions are (see the Edition Guide).

    +

    Edition definition

    +

    The --edition CLI flag specifies the edition to use for a crate. +This can be accessed from Session::edition. +There are convenience functions like Session::at_least_rust_2021 for checking the crate's +edition, though you should be careful about whether you check the global session or the span, see +Edition hygiene below.

    +

    As an alternative to the at_least_rust_20xx convenience methods, the Edition type also +supports comparisons for doing range checks, such as span.edition() >= Edition::Edition2021.

    +

    Adding a new edition

    +

    Adding a new edition mainly involves adding a variant to the Edition enum and then fixing +everything that is broken. See #94461 for an +example.

    +

    Features and Edition stability

    +

    The Edition enum defines whether or not an edition is stable. +If it is not stable, then the -Zunstable-options CLI option must be passed to enable it.

    +

    When adding a new feature, there are two options you can choose for how to handle stability with a +future edition:

    +
      +
    • Just check the edition of the span like span.at_least_rust_20xx() (see Edition hygiene) or the +Session::edition. This will implicitly depend on the stability of the edition itself to +indicate that your feature is available.
    • +
    • Place your new behavior behind a feature gate.
    • +
    +

    It may be sufficient to only check the current edition for relatively simple changes. +However, for larger language changes, you should consider creating a feature gate. +There are several benefits to using a feature gate:

    +
      +
    • A feature gate makes it easier to work on and experiment with a new feature.
    • +
    • It makes the intent clear when the #![feature(…)] attribute is used that your new feature is +being enabled.
    • +
    • It makes testing of editions easier so that features that are not yet complete do not interfere +with testing of edition-specific features that are complete and ready.
    • +
    • It decouples the feature from an edition, which makes it easier for the team to make a deliberate +decision of whether or not a feature should be added to the next edition when the feature is +ready.
    • +
    +

    When a feature is complete and ready, the feature gate can be removed (and the code should just +check the span or Session edition to determine if it is enabled).

    +

    There are a few different options for doing feature checks:

    +
      +
    • +

      For highly experimental features, that may or may not be involved in an edition, they can +implement regular feature gates like tcx.features().my_feature, and ignore editions for the time +being.

      +
    • +
    • +

      For experimental features that might be involved in an edition, they should implement gates with +tcx.features().my_feature && span.at_least_rust_20xx(). +This requires the user to still specify #![feature(my_feature)], to avoid disrupting testing of +other edition features which are ready and have been accepted within the edition.

      +
    • +
    • +

      For experimental features that have graduated to definitely be part of an edition, +they should implement gates with tcx.features().my_feature || span.at_least_rust_20xx(), +or just remove the feature check altogether and just check span.at_least_rust_20xx().

      +
    • +
    +

    If you need to do the feature gating in multiple places, consider placing the check in a single +function so that there will only be a single place to update. For example:

    +
    // An example from Edition 2021 disjoint closure captures.
    +
    +fn enable_precise_capture(tcx: TyCtxt<'_>, span: Span) -> bool {
    +    tcx.features().capture_disjoint_fields || span.rust_2021()
    +}
    +

    See Lints and stability below for more information about how lints handle +stability.

    +

    Edition parsing

    +

    For the most part, the lexer is edition-agnostic. +Within Lexer, tokens can be modified based on edition-specific behavior. +For example, C-String literals like c"foo" are split into multiple tokens in editions before 2021. +This is also where things like reserved prefixes are handled for the 2021 edition.

    +

    Edition-specific parsing is relatively rare. One example is async fn which checks the span of the +token to determine if it is the 2015 edition, and emits an error in that case. +This can only be done if the syntax was already invalid.

    +

    If you need to do edition checking in the parser, you will normally want to look at the edition of +the token, see Edition hygiene. +In some rare cases you may instead need to check the global edition from ParseSess::edition.

    +

    Most edition-specific parsing behavior is handled with migration lints instead of in the parser. +This is appropriate when there is a change in syntax (as opposed to new syntax). +This allows the old syntax to continue to work on previous editions. +The lint then checks for the change in behavior. +On older editions, the lint pass should emit the migration lint to help with migrating to new +editions. +On newer editions, your code should emit a hard error with emit_err instead. +For example, the deprecated start...end pattern syntax emits the +ellipsis_inclusive_range_patterns lint on editions before 2021, and in 2021 is an hard error via +the emit_err method.

    +

    Keywords

    +

    New keywords can be introduced across an edition boundary. +This is implemented by functions like Symbol::is_used_keyword_conditional, which rely on the +ordering of how the keywords are defined.

    +

    When new keywords are introduced, the keyword_idents lint should be updated so that automatic +migrations can transition code that might be using the keyword as an identifier (see +KeywordIdents). +An alternative to consider is to implement the keyword as a weak keyword if the position it is used +is sufficient to distinguish it.

    +

    An additional option to consider is the k# prefix which was introduced in RFC 3101. +This allows the use of a keyword in editions before the edition where the keyword is introduced. +This is currently not implemented.

    +

    Edition hygiene

    +

    Spans are marked with the edition of the crate that the span came from. +See Macro hygiene in the Edition Guide for a user-centric description of what this means.

    +

    You should normally use the edition from the token span instead of looking at the global Session +edition. +For example, use span.edition().at_least_rust_2021() instead of sess.at_least_rust_2021(). +This helps ensure that macros behave correctly when used across crates.

    +

    Lints

    +

    Lints support a few different options for interacting with editions. +Lints can be future incompatible edition migration lints, which are used to support +migrations to newer editions. +Alternatively, lints can be edition-specific, where they change their +default level starting in a specific edition.

    +

    Migration lints

    +

    Migration lints are used to migrate projects from one edition to the next. +They are implemented with a MachineApplicable suggestion which +will rewrite code so that it will successfully compile in both the previous and the next +edition. +For example, the keyword_idents lint will take identifiers that conflict with a new keyword to +use the raw identifier syntax to avoid the conflict (for example changing async to r#async).

    +

    Migration lints must be declared with the FutureIncompatibilityReason::EditionError or +FutureIncompatibilityReason::EditionSemanticsChange future-incompatible +option in the lint declaration:

    +
    declare_lint! {
    +    pub KEYWORD_IDENTS,
    +    Allow,
    +    "detects edition keywords being used as an identifier",
    +    @future_incompatible = FutureIncompatibleInfo {
    +        reason: FutureIncompatibilityReason::EditionError(Edition::Edition2018),
    +        reference: "issue #49716 <https://github.com/rust-lang/rust/issues/49716>",
    +    };
    +}
    +

    When declared like this, the lint is automatically added to the appropriate +rust-20xx-compatibility lint group. +When a user runs cargo fix --edition, cargo will pass the --force-warn rust-20xx-compatibility +flag to force all of these lints to appear during the edition migration. +Cargo also passes --cap-lints=allow so that no other lints interfere with the edition migration.

    +

    Make sure that the example code sets the correct edition. The example should illustrate the previous edition, and show what the migration warning would look like. For example, this lint for a 2024 migration shows an example in 2021:

    +
    declare_lint! {
    +    /// The `keyword_idents_2024` lint detects ...
    +    ///
    +    /// ### Example
    +    ///
    +    /// ```rust,edition2021
    +    /// #![warn(keyword_idents_2024)]
    +    /// fn gen() {}
    +    /// ```
    +    ///
    +    /// {{produces}}
    +}
    +

    Migration lints can be either Allow or Warn by default. +If it is Allow, users usually won't see this warning unless they are doing an edition migration +manually or there is a problem during the migration. +Most migration lints are Allow.

    +

    If it is Warn by default, users on all editions will see this warning. +Only use Warn if you think it is important for everyone to be aware of the change, and to +encourage people to update their code on all editions. +Beware that new warn-by-default lint that hit many projects can be very disruptive and frustrating +for users. +You may consider switching an Allow to Warn several years after the edition stabilizes. +This will only show up for the relatively small number of stragglers who have not updated to the new +edition.

    +

    Edition-specific lints

    +

    Lints can be marked so that they have a different level starting in a specific edition. +In the lint declaration, use the @edition marker:

    +
    declare_lint! {
    +    pub SOME_LINT_NAME,
    +    Allow,
    +    "my lint description",
    +    @edition Edition2024 => Warn;
    +}
    +

    Here, SOME_LINT_NAME defaults to Allow on all editions before 2024, and then becomes Warn +afterwards.

    +

    This should generally be used sparingly, as there are other options:

    +
      +
    • +

      Small impact stylistic changes unrelated to an edition can just make the lint Warn on all +editions. If you want people to adopt a different way to write things, then go ahead and commit to +having it show up for all projects.

      +

      Beware that if a new warn-by-default lint hits many projects, it can be very disruptive and +frustrating for users.

      +
    • +
    • +

      Change the new style to be a hard error in the new edition, and use a migration lint to +automatically convert projects to the new style. For example, +ellipsis_inclusive_range_patterns is a hard error in 2021, and warns in all previous editions.

      +

      Beware that these cannot be added after the edition stabilizes.

      +
    • +
    • +

      Migration lints can also change over time. +For example, the migration lint can start out as Allow by default. +For people performing the migration, they will automatically get updated to the new code. +Then, after some years, the lint can be made to Warn in previous editions.

      +

      For example anonymous_parameters was a 2018 Edition migration lint (and a hard-error in 2018) +that was Allow by default in previous editions. +Then, three years later, it was changed to Warn for all previous editions, so that all users got +a warning that the style was being phased out. +If this was a warning from the start, it would have impacted many projects and be very disruptive. +By making it part of the edition, most users eventually updated to the new edition and were +handled by the migration. +Switching to Warn only impacted a few stragglers who did not update.

      +
    • +
    +

    Lints and stability

    +

    Lints can be marked as being unstable, which can be helpful when developing a new edition feature, +and you want to test out a migration lint. +The feature gate can be specified in the lint's declaration like this:

    +
    declare_lint! {
    +    pub SOME_LINT_NAME,
    +    Allow,
    +    "my cool lint",
    +    @feature_gate = sym::my_feature_name;
    +}
    +

    Then, the lint will only fire if the user has the appropriate #![feature(my_feature_name)]. +Just beware that when it comes time to do crater runs testing the migration that the feature gate +will need to be removed.

    +

    Alternatively, you can implement an allow-by-default migration lint for an upcoming unstable +edition without a feature gate. +Although users may technically be able to enable the lint before the edition is stabilized, most +will not notice the new lint exists, and it should not disrupt anything or cause any breakage.

    +

    Idiom lints

    +

    In the 2018 edition, there was a concept of "idiom lints" under the rust-2018-idioms lint group. +The concept was to have new idiomatic styles under a different lint group separate from the forced +migrations under the rust-2018-compatibility lint group, giving some flexibility as to how people +opt-in to certain edition changes.

    +

    Overall this approach did not seem to work very well, +and it is unlikely that we will use the idiom groups in the future.

    +

    Standard library changes

    +

    Preludes

    +

    Each edition comes with a specific prelude of the standard library. +These are implemented as regular modules in core::prelude and std::prelude. +New items can be added to the prelude, just beware that this can conflict with user's pre-existing +code. +Usually a migration lint should be used to migrate existing code to avoid the conflict. +For example, rust_2021_prelude_collisions is used to handle the collisions with the new traits +in 2021.

    +

    Customized language behavior

    +

    Usually it is not possible to make breaking changes to the standard library. +In some rare cases, the teams may decide that the behavior change is important enough to break this +rule. +The downside is that this requires special handling in the compiler to be able to distinguish when +the old and new signatures or behaviors should be used.

    +

    One example is the change in method resolution for into_iter() of arrays. +This was implemented with the #[rustc_skip_array_during_method_dispatch] attribute on the +IntoIterator trait which then tells the compiler to consider an alternate trait resolution choice +based on the edition.

    +

    Another example is the panic! macro changes. +This required defining multiple panic macros, and having the built-in panic macro implementation +determine the appropriate way to expand it. +This also included the non_fmt_panics migration lint to adjust old code to the new form, which +required the rustc_diagnostic_item attribute to detect the usage of the panic macro.

    +

    In general it is recommended to avoid these special cases except for very high value situations.

    +

    Migrating the standard library edition

    +

    Updating the edition of the standard library itself roughly involves the following process:

    +
      +
    • Wait until the newly stabilized edition has reached beta and the bootstrap compiler has been updated.
    • +
    • Apply migration lints. This can be an involved process since some code is in external submodules1, and the standard library makes heavy use of conditional compilation. Also, running cargo fix --edition can be impractical on the standard library itself. One approach is to individually add #![warn(...)] at the top of each crate for each lint, run ./x check library, apply the migrations, remove the #![warn(...)] and commit each migration separately. You'll likely need to run ./x check with --target for many different targets to get full coverage (otherwise you'll likely spend days or weeks getting CI to pass)2. See also the advanced migration guide for more tips. +
        +
      • Apply migrations to backtrace-rs. Example for 2024. Note that this doesn't update the edition of the crate itself because that is published independently on crates.io, and that would otherwise restrict the minimum Rust version. Consider adding some #![deny()] attributes to avoid regressions until its edition gets updated.
      • +
      • Apply migrations to stdarch, and update its edition, and formatting. Example for 2024.
      • +
      • Post PRs to update the backtrace and stdarch submodules, and wait for those to land.
      • +
      • Apply migration lints to the standard library crates, and update their edition. I recommend working one crate at a time starting with core. Example for 2024.
      • +
      +
    • +
    +

    Stabilizing an edition

    +

    After the edition team has given the go-ahead, the process for stabilizing an edition is roughly:

    +
      +
    • Update LATEST_STABLE_EDITION.
    • +
    • Update Edition::is_stable.
    • +
    • Hunt and find any document that refers to edition by number, and update it: + +
    • +
    • Clean up any tests that use the //@ edition header to remove the -Zunstable-options flag to ensure they are indeed stable. Note: Ideally this should be automated, see #133582.
    • +
    • Bless any tests that change.
    • +
    • Update lint-docs to default to the new edition.
    • +
    +

    See example for 2024.

    +
    +
    1. +

      This will hopefully change in the future to pull these submodules into rust-lang/rust.

      +
    2. +
    3. +

      You'll also likely need to do a lot of testing for different targets, and this is where docker testing comes in handy.

      +
    4. +
    +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + + diff --git a/highlight.css b/highlight.css new file mode 100644 index 000000000..352c79b96 --- /dev/null +++ b/highlight.css @@ -0,0 +1,83 @@ +/* + * An increased contrast highlighting scheme loosely based on the + * "Base16 Atelier Dune Light" theme by Bram de Haan + * (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/dune) + * Original Base16 color scheme by Chris Kempson + * (https://github.com/chriskempson/base16) + */ + +/* Comment */ +.hljs-comment, +.hljs-quote { + color: #575757; +} + +/* Red */ +.hljs-variable, +.hljs-template-variable, +.hljs-attribute, +.hljs-attr, +.hljs-tag, +.hljs-name, +.hljs-regexp, +.hljs-link, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class { + color: #d70025; +} + +/* Orange */ +.hljs-number, +.hljs-meta, +.hljs-built_in, +.hljs-builtin-name, +.hljs-literal, +.hljs-type, +.hljs-params { + color: #b21e00; +} + +/* Green */ +.hljs-string, +.hljs-symbol, +.hljs-bullet { + color: #008200; +} + +/* Blue */ +.hljs-title, +.hljs-section { + color: #0030f2; +} + +/* Purple */ +.hljs-keyword, +.hljs-selector-tag { + color: #9d00ec; +} + +.hljs { + display: block; + overflow-x: auto; + background: #f6f7f6; + color: #000; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} + +.hljs-addition { + color: #22863a; + background-color: #f0fff4; +} + +.hljs-deletion { + color: #b31d28; + background-color: #ffeef0; +} diff --git a/highlight.js b/highlight.js new file mode 100644 index 000000000..18d24345b --- /dev/null +++ b/highlight.js @@ -0,0 +1,54 @@ +/* + Highlight.js 10.1.1 (93fd0d73) + License: BSD-3-Clause + Copyright (c) 2006-2020, Ivan Sagalaev +*/ +var hljs=function(){"use strict";function e(n){Object.freeze(n);var t="function"==typeof n;return Object.getOwnPropertyNames(n).forEach((function(r){!Object.hasOwnProperty.call(n,r)||null===n[r]||"object"!=typeof n[r]&&"function"!=typeof n[r]||t&&("caller"===r||"callee"===r||"arguments"===r)||Object.isFrozen(n[r])||e(n[r])})),n}class n{constructor(e){void 0===e.data&&(e.data={}),this.data=e.data}ignoreMatch(){this.ignore=!0}}function t(e){return e.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}function r(e,...n){var t={};for(const n in e)t[n]=e[n];return n.forEach((function(e){for(const n in e)t[n]=e[n]})),t}function a(e){return e.nodeName.toLowerCase()}var i=Object.freeze({__proto__:null,escapeHTML:t,inherit:r,nodeStream:function(e){var n=[];return function e(t,r){for(var i=t.firstChild;i;i=i.nextSibling)3===i.nodeType?r+=i.nodeValue.length:1===i.nodeType&&(n.push({event:"start",offset:r,node:i}),r=e(i,r),a(i).match(/br|hr|img|input/)||n.push({event:"stop",offset:r,node:i}));return r}(e,0),n},mergeStreams:function(e,n,r){var i=0,s="",o=[];function l(){return e.length&&n.length?e[0].offset!==n[0].offset?e[0].offset"}function u(e){s+=""}function d(e){("start"===e.event?c:u)(e.node)}for(;e.length||n.length;){var g=l();if(s+=t(r.substring(i,g[0].offset)),i=g[0].offset,g===e){o.reverse().forEach(u);do{d(g.splice(0,1)[0]),g=l()}while(g===e&&g.length&&g[0].offset===i);o.reverse().forEach(c)}else"start"===g[0].event?o.push(g[0].node):o.pop(),d(g.splice(0,1)[0])}return s+t(r.substr(i))}});const s="",o=e=>!!e.kind;class l{constructor(e,n){this.buffer="",this.classPrefix=n.classPrefix,e.walk(this)}addText(e){this.buffer+=t(e)}openNode(e){if(!o(e))return;let n=e.kind;e.sublanguage||(n=`${this.classPrefix}${n}`),this.span(n)}closeNode(e){o(e)&&(this.buffer+=s)}value(){return this.buffer}span(e){this.buffer+=``}}class c{constructor(){this.rootNode={children:[]},this.stack=[this.rootNode]}get top(){return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(e){this.top.children.push(e)}openNode(e){const n={kind:e,children:[]};this.add(n),this.stack.push(n)}closeNode(){if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}walk(e){return this.constructor._walk(e,this.rootNode)}static _walk(e,n){return"string"==typeof n?e.addText(n):n.children&&(e.openNode(n),n.children.forEach(n=>this._walk(e,n)),e.closeNode(n)),e}static _collapse(e){"string"!=typeof e&&e.children&&(e.children.every(e=>"string"==typeof e)?e.children=[e.children.join("")]:e.children.forEach(e=>{c._collapse(e)}))}}class u extends c{constructor(e){super(),this.options=e}addKeyword(e,n){""!==e&&(this.openNode(n),this.addText(e),this.closeNode())}addText(e){""!==e&&this.add(e)}addSublanguage(e,n){const t=e.root;t.kind=n,t.sublanguage=!0,this.add(t)}toHTML(){return new l(this,this.options).value()}finalize(){return!0}}function d(e){return e?"string"==typeof e?e:e.source:null}const g="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",h={begin:"\\\\[\\s\\S]",relevance:0},f={className:"string",begin:"'",end:"'",illegal:"\\n",contains:[h]},p={className:"string",begin:'"',end:'"',illegal:"\\n",contains:[h]},b={begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},m=function(e,n,t={}){var a=r({className:"comment",begin:e,end:n,contains:[]},t);return a.contains.push(b),a.contains.push({className:"doctag",begin:"(?:TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):",relevance:0}),a},v=m("//","$"),x=m("/\\*","\\*/"),E=m("#","$");var _=Object.freeze({__proto__:null,IDENT_RE:"[a-zA-Z]\\w*",UNDERSCORE_IDENT_RE:"[a-zA-Z_]\\w*",NUMBER_RE:"\\b\\d+(\\.\\d+)?",C_NUMBER_RE:g,BINARY_NUMBER_RE:"\\b(0b[01]+)",RE_STARTERS_RE:"!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",SHEBANG:(e={})=>{const n=/^#![ ]*\//;return e.binary&&(e.begin=function(...e){return e.map(e=>d(e)).join("")}(n,/.*\b/,e.binary,/\b.*/)),r({className:"meta",begin:n,end:/$/,relevance:0,"on:begin":(e,n)=>{0!==e.index&&n.ignoreMatch()}},e)},BACKSLASH_ESCAPE:h,APOS_STRING_MODE:f,QUOTE_STRING_MODE:p,PHRASAL_WORDS_MODE:b,COMMENT:m,C_LINE_COMMENT_MODE:v,C_BLOCK_COMMENT_MODE:x,HASH_COMMENT_MODE:E,NUMBER_MODE:{className:"number",begin:"\\b\\d+(\\.\\d+)?",relevance:0},C_NUMBER_MODE:{className:"number",begin:g,relevance:0},BINARY_NUMBER_MODE:{className:"number",begin:"\\b(0b[01]+)",relevance:0},CSS_NUMBER_MODE:{className:"number",begin:"\\b\\d+(\\.\\d+)?(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},REGEXP_MODE:{begin:/(?=\/[^/\n]*\/)/,contains:[{className:"regexp",begin:/\//,end:/\/[gimuy]*/,illegal:/\n/,contains:[h,{begin:/\[/,end:/\]/,relevance:0,contains:[h]}]}]},TITLE_MODE:{className:"title",begin:"[a-zA-Z]\\w*",relevance:0},UNDERSCORE_TITLE_MODE:{className:"title",begin:"[a-zA-Z_]\\w*",relevance:0},METHOD_GUARD:{begin:"\\.\\s*[a-zA-Z_]\\w*",relevance:0},END_SAME_AS_BEGIN:function(e){return Object.assign(e,{"on:begin":(e,n)=>{n.data._beginMatch=e[1]},"on:end":(e,n)=>{n.data._beginMatch!==e[1]&&n.ignoreMatch()}})}}),N="of and for in not or if then".split(" ");function w(e,n){return n?+n:function(e){return N.includes(e.toLowerCase())}(e)?0:1}const R=t,y=r,{nodeStream:k,mergeStreams:O}=i,M=Symbol("nomatch");return function(t){var a=[],i={},s={},o=[],l=!0,c=/(^(<[^>]+>|\t|)+|\n)/gm,g="Could not find the language '{}', did you forget to load/include a language module?";const h={disableAutodetect:!0,name:"Plain text",contains:[]};var f={noHighlightRe:/^(no-?highlight)$/i,languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:null,__emitter:u};function p(e){return f.noHighlightRe.test(e)}function b(e,n,t,r){var a={code:n,language:e};S("before:highlight",a);var i=a.result?a.result:m(a.language,a.code,t,r);return i.code=a.code,S("after:highlight",i),i}function m(e,t,a,s){var o=t;function c(e,n){var t=E.case_insensitive?n[0].toLowerCase():n[0];return Object.prototype.hasOwnProperty.call(e.keywords,t)&&e.keywords[t]}function u(){null!=y.subLanguage?function(){if(""!==A){var e=null;if("string"==typeof y.subLanguage){if(!i[y.subLanguage])return void O.addText(A);e=m(y.subLanguage,A,!0,k[y.subLanguage]),k[y.subLanguage]=e.top}else e=v(A,y.subLanguage.length?y.subLanguage:null);y.relevance>0&&(I+=e.relevance),O.addSublanguage(e.emitter,e.language)}}():function(){if(!y.keywords)return void O.addText(A);let e=0;y.keywordPatternRe.lastIndex=0;let n=y.keywordPatternRe.exec(A),t="";for(;n;){t+=A.substring(e,n.index);const r=c(y,n);if(r){const[e,a]=r;O.addText(t),t="",I+=a,O.addKeyword(n[0],e)}else t+=n[0];e=y.keywordPatternRe.lastIndex,n=y.keywordPatternRe.exec(A)}t+=A.substr(e),O.addText(t)}(),A=""}function h(e){return e.className&&O.openNode(e.className),y=Object.create(e,{parent:{value:y}})}function p(e){return 0===y.matcher.regexIndex?(A+=e[0],1):(L=!0,0)}var b={};function x(t,r){var i=r&&r[0];if(A+=t,null==i)return u(),0;if("begin"===b.type&&"end"===r.type&&b.index===r.index&&""===i){if(A+=o.slice(r.index,r.index+1),!l){const n=Error("0 width match regex");throw n.languageName=e,n.badRule=b.rule,n}return 1}if(b=r,"begin"===r.type)return function(e){var t=e[0],r=e.rule;const a=new n(r),i=[r.__beforeBegin,r["on:begin"]];for(const n of i)if(n&&(n(e,a),a.ignore))return p(t);return r&&r.endSameAsBegin&&(r.endRe=RegExp(t.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&"),"m")),r.skip?A+=t:(r.excludeBegin&&(A+=t),u(),r.returnBegin||r.excludeBegin||(A=t)),h(r),r.returnBegin?0:t.length}(r);if("illegal"===r.type&&!a){const e=Error('Illegal lexeme "'+i+'" for mode "'+(y.className||"")+'"');throw e.mode=y,e}if("end"===r.type){var s=function(e){var t=e[0],r=o.substr(e.index),a=function e(t,r,a){let i=function(e,n){var t=e&&e.exec(n);return t&&0===t.index}(t.endRe,a);if(i){if(t["on:end"]){const e=new n(t);t["on:end"](r,e),e.ignore&&(i=!1)}if(i){for(;t.endsParent&&t.parent;)t=t.parent;return t}}if(t.endsWithParent)return e(t.parent,r,a)}(y,e,r);if(!a)return M;var i=y;i.skip?A+=t:(i.returnEnd||i.excludeEnd||(A+=t),u(),i.excludeEnd&&(A=t));do{y.className&&O.closeNode(),y.skip||y.subLanguage||(I+=y.relevance),y=y.parent}while(y!==a.parent);return a.starts&&(a.endSameAsBegin&&(a.starts.endRe=a.endRe),h(a.starts)),i.returnEnd?0:t.length}(r);if(s!==M)return s}if("illegal"===r.type&&""===i)return 1;if(B>1e5&&B>3*r.index)throw Error("potential infinite loop, way more iterations than matches");return A+=i,i.length}var E=T(e);if(!E)throw console.error(g.replace("{}",e)),Error('Unknown language: "'+e+'"');var _=function(e){function n(n,t){return RegExp(d(n),"m"+(e.case_insensitive?"i":"")+(t?"g":""))}class t{constructor(){this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}addRule(e,n){n.position=this.position++,this.matchIndexes[this.matchAt]=n,this.regexes.push([n,e]),this.matchAt+=function(e){return RegExp(e.toString()+"|").exec("").length-1}(e)+1}compile(){0===this.regexes.length&&(this.exec=()=>null);const e=this.regexes.map(e=>e[1]);this.matcherRe=n(function(e,n="|"){for(var t=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./,r=0,a="",i=0;i0&&(a+=n),a+="(";o.length>0;){var l=t.exec(o);if(null==l){a+=o;break}a+=o.substring(0,l.index),o=o.substring(l.index+l[0].length),"\\"===l[0][0]&&l[1]?a+="\\"+(+l[1]+s):(a+=l[0],"("===l[0]&&r++)}a+=")"}return a}(e),!0),this.lastIndex=0}exec(e){this.matcherRe.lastIndex=this.lastIndex;const n=this.matcherRe.exec(e);if(!n)return null;const t=n.findIndex((e,n)=>n>0&&void 0!==e),r=this.matchIndexes[t];return n.splice(0,t),Object.assign(n,r)}}class a{constructor(){this.rules=[],this.multiRegexes=[],this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(e){if(this.multiRegexes[e])return this.multiRegexes[e];const n=new t;return this.rules.slice(e).forEach(([e,t])=>n.addRule(e,t)),n.compile(),this.multiRegexes[e]=n,n}considerAll(){this.regexIndex=0}addRule(e,n){this.rules.push([e,n]),"begin"===n.type&&this.count++}exec(e){const n=this.getMatcher(this.regexIndex);n.lastIndex=this.lastIndex;const t=n.exec(e);return t&&(this.regexIndex+=t.position+1,this.regexIndex===this.count&&(this.regexIndex=0)),t}}function i(e,n){const t=e.input[e.index-1],r=e.input[e.index+e[0].length];"."!==t&&"."!==r||n.ignoreMatch()}if(e.contains&&e.contains.includes("self"))throw Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.");return function t(s,o){const l=s;if(s.compiled)return l;s.compiled=!0,s.__beforeBegin=null,s.keywords=s.keywords||s.beginKeywords;let c=null;if("object"==typeof s.keywords&&(c=s.keywords.$pattern,delete s.keywords.$pattern),s.keywords&&(s.keywords=function(e,n){var t={};return"string"==typeof e?r("keyword",e):Object.keys(e).forEach((function(n){r(n,e[n])})),t;function r(e,r){n&&(r=r.toLowerCase()),r.split(" ").forEach((function(n){var r=n.split("|");t[r[0]]=[e,w(r[0],r[1])]}))}}(s.keywords,e.case_insensitive)),s.lexemes&&c)throw Error("ERR: Prefer `keywords.$pattern` to `mode.lexemes`, BOTH are not allowed. (see mode reference) ");return l.keywordPatternRe=n(s.lexemes||c||/\w+/,!0),o&&(s.beginKeywords&&(s.begin="\\b("+s.beginKeywords.split(" ").join("|")+")(?=\\b|\\s)",s.__beforeBegin=i),s.begin||(s.begin=/\B|\b/),l.beginRe=n(s.begin),s.endSameAsBegin&&(s.end=s.begin),s.end||s.endsWithParent||(s.end=/\B|\b/),s.end&&(l.endRe=n(s.end)),l.terminator_end=d(s.end)||"",s.endsWithParent&&o.terminator_end&&(l.terminator_end+=(s.end?"|":"")+o.terminator_end)),s.illegal&&(l.illegalRe=n(s.illegal)),void 0===s.relevance&&(s.relevance=1),s.contains||(s.contains=[]),s.contains=[].concat(...s.contains.map((function(e){return function(e){return e.variants&&!e.cached_variants&&(e.cached_variants=e.variants.map((function(n){return r(e,{variants:null},n)}))),e.cached_variants?e.cached_variants:function e(n){return!!n&&(n.endsWithParent||e(n.starts))}(e)?r(e,{starts:e.starts?r(e.starts):null}):Object.isFrozen(e)?r(e):e}("self"===e?s:e)}))),s.contains.forEach((function(e){t(e,l)})),s.starts&&t(s.starts,o),l.matcher=function(e){const n=new a;return e.contains.forEach(e=>n.addRule(e.begin,{rule:e,type:"begin"})),e.terminator_end&&n.addRule(e.terminator_end,{type:"end"}),e.illegal&&n.addRule(e.illegal,{type:"illegal"}),n}(l),l}(e)}(E),N="",y=s||_,k={},O=new f.__emitter(f);!function(){for(var e=[],n=y;n!==E;n=n.parent)n.className&&e.unshift(n.className);e.forEach(e=>O.openNode(e))}();var A="",I=0,S=0,B=0,L=!1;try{for(y.matcher.considerAll();;){B++,L?L=!1:(y.matcher.lastIndex=S,y.matcher.considerAll());const e=y.matcher.exec(o);if(!e)break;const n=x(o.substring(S,e.index),e);S=e.index+n}return x(o.substr(S)),O.closeAllNodes(),O.finalize(),N=O.toHTML(),{relevance:I,value:N,language:e,illegal:!1,emitter:O,top:y}}catch(n){if(n.message&&n.message.includes("Illegal"))return{illegal:!0,illegalBy:{msg:n.message,context:o.slice(S-100,S+100),mode:n.mode},sofar:N,relevance:0,value:R(o),emitter:O};if(l)return{illegal:!1,relevance:0,value:R(o),emitter:O,language:e,top:y,errorRaised:n};throw n}}function v(e,n){n=n||f.languages||Object.keys(i);var t=function(e){const n={relevance:0,emitter:new f.__emitter(f),value:R(e),illegal:!1,top:h};return n.emitter.addText(e),n}(e),r=t;return n.filter(T).filter(I).forEach((function(n){var a=m(n,e,!1);a.language=n,a.relevance>r.relevance&&(r=a),a.relevance>t.relevance&&(r=t,t=a)})),r.language&&(t.second_best=r),t}function x(e){return f.tabReplace||f.useBR?e.replace(c,e=>"\n"===e?f.useBR?"
    ":e:f.tabReplace?e.replace(/\t/g,f.tabReplace):e):e}function E(e){let n=null;const t=function(e){var n=e.className+" ";n+=e.parentNode?e.parentNode.className:"";const t=f.languageDetectRe.exec(n);if(t){var r=T(t[1]);return r||(console.warn(g.replace("{}",t[1])),console.warn("Falling back to no-highlight mode for this block.",e)),r?t[1]:"no-highlight"}return n.split(/\s+/).find(e=>p(e)||T(e))}(e);if(p(t))return;S("before:highlightBlock",{block:e,language:t}),f.useBR?(n=document.createElement("div")).innerHTML=e.innerHTML.replace(/\n/g,"").replace(//g,"\n"):n=e;const r=n.textContent,a=t?b(t,r,!0):v(r),i=k(n);if(i.length){const e=document.createElement("div");e.innerHTML=a.value,a.value=O(i,k(e),r)}a.value=x(a.value),S("after:highlightBlock",{block:e,result:a}),e.innerHTML=a.value,e.className=function(e,n,t){var r=n?s[n]:t,a=[e.trim()];return e.match(/\bhljs\b/)||a.push("hljs"),e.includes(r)||a.push(r),a.join(" ").trim()}(e.className,t,a.language),e.result={language:a.language,re:a.relevance,relavance:a.relevance},a.second_best&&(e.second_best={language:a.second_best.language,re:a.second_best.relevance,relavance:a.second_best.relevance})}const N=()=>{if(!N.called){N.called=!0;var e=document.querySelectorAll("pre code");a.forEach.call(e,E)}};function T(e){return e=(e||"").toLowerCase(),i[e]||i[s[e]]}function A(e,{languageName:n}){"string"==typeof e&&(e=[e]),e.forEach(e=>{s[e]=n})}function I(e){var n=T(e);return n&&!n.disableAutodetect}function S(e,n){var t=e;o.forEach((function(e){e[t]&&e[t](n)}))}Object.assign(t,{highlight:b,highlightAuto:v,fixMarkup:x,highlightBlock:E,configure:function(e){f=y(f,e)},initHighlighting:N,initHighlightingOnLoad:function(){window.addEventListener("DOMContentLoaded",N,!1)},registerLanguage:function(e,n){var r=null;try{r=n(t)}catch(n){if(console.error("Language definition for '{}' could not be registered.".replace("{}",e)),!l)throw n;console.error(n),r=h}r.name||(r.name=e),i[e]=r,r.rawDefinition=n.bind(null,t),r.aliases&&A(r.aliases,{languageName:e})},listLanguages:function(){return Object.keys(i)},getLanguage:T,registerAliases:A,requireLanguage:function(e){var n=T(e);if(n)return n;throw Error("The '{}' language is required, but not loaded.".replace("{}",e))},autoDetection:I,inherit:y,addPlugin:function(e){o.push(e)}}),t.debugMode=function(){l=!1},t.safeMode=function(){l=!0},t.versionString="10.1.1";for(const n in _)"object"==typeof _[n]&&e(_[n]);return Object.assign(t,_),t}({})}();"object"==typeof exports&&"undefined"!=typeof module&&(module.exports=hljs); +hljs.registerLanguage("apache",function(){"use strict";return function(e){var n={className:"number",begin:"\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?"};return{name:"Apache config",aliases:["apacheconf"],case_insensitive:!0,contains:[e.HASH_COMMENT_MODE,{className:"section",begin:"",contains:[n,{className:"number",begin:":\\d{1,5}"},e.inherit(e.QUOTE_STRING_MODE,{relevance:0})]},{className:"attribute",begin:/\w+/,relevance:0,keywords:{nomarkup:"order deny allow setenv rewriterule rewriteengine rewritecond documentroot sethandler errordocument loadmodule options header listen serverroot servername"},starts:{end:/$/,relevance:0,keywords:{literal:"on off all deny allow"},contains:[{className:"meta",begin:"\\s\\[",end:"\\]$"},{className:"variable",begin:"[\\$%]\\{",end:"\\}",contains:["self",{className:"number",begin:"[\\$%]\\d+"}]},n,{className:"number",begin:"\\d+"},e.QUOTE_STRING_MODE]}}],illegal:/\S/}}}()); +hljs.registerLanguage("bash",function(){"use strict";return function(e){const s={};Object.assign(s,{className:"variable",variants:[{begin:/\$[\w\d#@][\w\d_]*/},{begin:/\$\{/,end:/\}/,contains:[{begin:/:-/,contains:[s]}]}]});const t={className:"subst",begin:/\$\(/,end:/\)/,contains:[e.BACKSLASH_ESCAPE]},n={className:"string",begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,s,t]};t.contains.push(n);const a={begin:/\$\(\(/,end:/\)\)/,contains:[{begin:/\d+#[0-9a-f]+/,className:"number"},e.NUMBER_MODE,s]},i=e.SHEBANG({binary:"(fish|bash|zsh|sh|csh|ksh|tcsh|dash|scsh)",relevance:10}),c={className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0,contains:[e.inherit(e.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0};return{name:"Bash",aliases:["sh","zsh"],keywords:{$pattern:/\b-?[a-z\._]+\b/,keyword:"if then else elif fi for while in do done case esac function",literal:"true false",built_in:"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp",_:"-ne -eq -lt -gt -f -d -e -s -l -a"},contains:[i,e.SHEBANG(),c,a,e.HASH_COMMENT_MODE,n,{className:"",begin:/\\"/},{className:"string",begin:/'/,end:/'/},s]}}}()); +hljs.registerLanguage("c-like",function(){"use strict";return function(e){function t(e){return"(?:"+e+")?"}var n="(decltype\\(auto\\)|"+t("[a-zA-Z_]\\w*::")+"[a-zA-Z_]\\w*"+t("<.*?>")+")",r={className:"keyword",begin:"\\b[a-z\\d_]*_t\\b"},a={className:"string",variants:[{begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{begin:"(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)",end:"'",illegal:"."},e.END_SAME_AS_BEGIN({begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},i={className:"number",variants:[{begin:"\\b(0b[01']+)"},{begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],relevance:0},s={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{"meta-keyword":"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include"},contains:[{begin:/\\\n/,relevance:0},e.inherit(a,{className:"meta-string"}),{className:"meta-string",begin:/<.*?>/,end:/$/,illegal:"\\n"},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},o={className:"title",begin:t("[a-zA-Z_]\\w*::")+e.IDENT_RE,relevance:0},c=t("[a-zA-Z_]\\w*::")+e.IDENT_RE+"\\s*\\(",l={keyword:"int float while private char char8_t char16_t char32_t catch import module export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using asm case typeid wchar_t short reinterpret_cast|10 default double register explicit signed typename try this switch continue inline delete alignas alignof constexpr consteval constinit decltype concept co_await co_return co_yield requires noexcept static_assert thread_local restrict final override atomic_bool atomic_char atomic_schar atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong atomic_ullong new throw return and and_eq bitand bitor compl not not_eq or or_eq xor xor_eq",built_in:"std string wstring cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set pair bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap priority_queue make_pair array shared_ptr abort terminate abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf future isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr _Bool complex _Complex imaginary _Imaginary",literal:"true false nullptr NULL"},d=[r,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,i,a],_={variants:[{begin:/=/,end:/;/},{begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}],keywords:l,contains:d.concat([{begin:/\(/,end:/\)/,keywords:l,contains:d.concat(["self"]),relevance:0}]),relevance:0},u={className:"function",begin:"("+n+"[\\*&\\s]+)+"+c,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:l,illegal:/[^\w\s\*&:<>]/,contains:[{begin:"decltype\\(auto\\)",keywords:l,relevance:0},{begin:c,returnBegin:!0,contains:[o],relevance:0},{className:"params",begin:/\(/,end:/\)/,keywords:l,relevance:0,contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,a,i,r,{begin:/\(/,end:/\)/,keywords:l,relevance:0,contains:["self",e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,a,i,r]}]},r,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,s]};return{aliases:["c","cc","h","c++","h++","hpp","hh","hxx","cxx"],keywords:l,disableAutodetect:!0,illegal:"",keywords:l,contains:["self",r]},{begin:e.IDENT_RE+"::",keywords:l},{className:"class",beginKeywords:"class struct",end:/[{;:]/,contains:[{begin://,contains:["self"]},e.TITLE_MODE]}]),exports:{preprocessor:s,strings:a,keywords:l}}}}()); +hljs.registerLanguage("c",function(){"use strict";return function(e){var n=e.getLanguage("c-like").rawDefinition();return n.name="C",n.aliases=["c","h"],n}}()); +hljs.registerLanguage("coffeescript",function(){"use strict";const e=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"],n=["true","false","null","undefined","NaN","Infinity"],a=[].concat(["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],["arguments","this","super","console","window","document","localStorage","module","global"],["Intl","DataView","Number","Math","Date","String","RegExp","Object","Function","Boolean","Error","Symbol","Set","Map","WeakSet","WeakMap","Proxy","Reflect","JSON","Promise","Float64Array","Int16Array","Int32Array","Int8Array","Uint16Array","Uint32Array","Float32Array","Array","Uint8Array","Uint8ClampedArray","ArrayBuffer"],["EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"]);return function(r){var t={keyword:e.concat(["then","unless","until","loop","by","when","and","or","is","isnt","not"]).filter((e=>n=>!e.includes(n))(["var","const","let","function","static"])).join(" "),literal:n.concat(["yes","no","on","off"]).join(" "),built_in:a.concat(["npm","print"]).join(" ")},i="[A-Za-z$_][0-9A-Za-z$_]*",s={className:"subst",begin:/#\{/,end:/}/,keywords:t},o=[r.BINARY_NUMBER_MODE,r.inherit(r.C_NUMBER_MODE,{starts:{end:"(\\s*/)?",relevance:0}}),{className:"string",variants:[{begin:/'''/,end:/'''/,contains:[r.BACKSLASH_ESCAPE]},{begin:/'/,end:/'/,contains:[r.BACKSLASH_ESCAPE]},{begin:/"""/,end:/"""/,contains:[r.BACKSLASH_ESCAPE,s]},{begin:/"/,end:/"/,contains:[r.BACKSLASH_ESCAPE,s]}]},{className:"regexp",variants:[{begin:"///",end:"///",contains:[s,r.HASH_COMMENT_MODE]},{begin:"//[gim]{0,3}(?=\\W)",relevance:0},{begin:/\/(?![ *]).*?(?![\\]).\/[gim]{0,3}(?=\W)/}]},{begin:"@"+i},{subLanguage:"javascript",excludeBegin:!0,excludeEnd:!0,variants:[{begin:"```",end:"```"},{begin:"`",end:"`"}]}];s.contains=o;var c=r.inherit(r.TITLE_MODE,{begin:i}),l={className:"params",begin:"\\([^\\(]",returnBegin:!0,contains:[{begin:/\(/,end:/\)/,keywords:t,contains:["self"].concat(o)}]};return{name:"CoffeeScript",aliases:["coffee","cson","iced"],keywords:t,illegal:/\/\*/,contains:o.concat([r.COMMENT("###","###"),r.HASH_COMMENT_MODE,{className:"function",begin:"^\\s*"+i+"\\s*=\\s*(\\(.*\\))?\\s*\\B[-=]>",end:"[-=]>",returnBegin:!0,contains:[c,l]},{begin:/[:\(,=]\s*/,relevance:0,contains:[{className:"function",begin:"(\\(.*\\))?\\s*\\B[-=]>",end:"[-=]>",returnBegin:!0,contains:[l]}]},{className:"class",beginKeywords:"class",end:"$",illegal:/[:="\[\]]/,contains:[{beginKeywords:"extends",endsWithParent:!0,illegal:/[:="\[\]]/,contains:[c]},c]},{begin:i+":",end:":",returnBegin:!0,returnEnd:!0,relevance:0}])}}}()); +hljs.registerLanguage("cpp",function(){"use strict";return function(e){var t=e.getLanguage("c-like").rawDefinition();return t.disableAutodetect=!1,t.name="C++",t.aliases=["cc","c++","h++","hpp","hh","hxx","cxx"],t}}()); +hljs.registerLanguage("csharp",function(){"use strict";return function(e){var n={keyword:"abstract as base bool break byte case catch char checked const continue decimal default delegate do double enum event explicit extern finally fixed float for foreach goto if implicit in int interface internal is lock long object operator out override params private protected public readonly ref sbyte sealed short sizeof stackalloc static string struct switch this try typeof uint ulong unchecked unsafe ushort using virtual void volatile while add alias ascending async await by descending dynamic equals from get global group into join let nameof on orderby partial remove select set value var when where yield",literal:"null false true"},i=e.inherit(e.TITLE_MODE,{begin:"[a-zA-Z](\\.?\\w)*"}),a={className:"number",variants:[{begin:"\\b(0b[01']+)"},{begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],relevance:0},s={className:"string",begin:'@"',end:'"',contains:[{begin:'""'}]},t=e.inherit(s,{illegal:/\n/}),l={className:"subst",begin:"{",end:"}",keywords:n},r=e.inherit(l,{illegal:/\n/}),c={className:"string",begin:/\$"/,end:'"',illegal:/\n/,contains:[{begin:"{{"},{begin:"}}"},e.BACKSLASH_ESCAPE,r]},o={className:"string",begin:/\$@"/,end:'"',contains:[{begin:"{{"},{begin:"}}"},{begin:'""'},l]},g=e.inherit(o,{illegal:/\n/,contains:[{begin:"{{"},{begin:"}}"},{begin:'""'},r]});l.contains=[o,c,s,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,a,e.C_BLOCK_COMMENT_MODE],r.contains=[g,c,t,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,a,e.inherit(e.C_BLOCK_COMMENT_MODE,{illegal:/\n/})];var d={variants:[o,c,s,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},E={begin:"<",end:">",contains:[{beginKeywords:"in out"},i]},_=e.IDENT_RE+"(<"+e.IDENT_RE+"(\\s*,\\s*"+e.IDENT_RE+")*>)?(\\[\\])?",b={begin:"@"+e.IDENT_RE,relevance:0};return{name:"C#",aliases:["cs","c#"],keywords:n,illegal:/::/,contains:[e.COMMENT("///","$",{returnBegin:!0,contains:[{className:"doctag",variants:[{begin:"///",relevance:0},{begin:"\x3c!--|--\x3e"},{begin:""}]}]}),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"meta",begin:"#",end:"$",keywords:{"meta-keyword":"if else elif endif define undef warning error line region endregion pragma checksum"}},d,a,{beginKeywords:"class interface",end:/[{;=]/,illegal:/[^\s:,]/,contains:[{beginKeywords:"where class"},i,E,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{beginKeywords:"namespace",end:/[{;=]/,illegal:/[^\s:]/,contains:[i,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"meta",begin:"^\\s*\\[",excludeBegin:!0,end:"\\]",excludeEnd:!0,contains:[{className:"meta-string",begin:/"/,end:/"/}]},{beginKeywords:"new return throw await else",relevance:0},{className:"function",begin:"("+_+"\\s+)+"+e.IDENT_RE+"\\s*(\\<.+\\>)?\\s*\\(",returnBegin:!0,end:/\s*[{;=]/,excludeEnd:!0,keywords:n,contains:[{begin:e.IDENT_RE+"\\s*(\\<.+\\>)?\\s*\\(",returnBegin:!0,contains:[e.TITLE_MODE,E],relevance:0},{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:n,relevance:0,contains:[d,a,e.C_BLOCK_COMMENT_MODE]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},b]}}}()); +hljs.registerLanguage("css",function(){"use strict";return function(e){var n={begin:/(?:[A-Z\_\.\-]+|--[a-zA-Z0-9_-]+)\s*:/,returnBegin:!0,end:";",endsWithParent:!0,contains:[{className:"attribute",begin:/\S/,end:":",excludeEnd:!0,starts:{endsWithParent:!0,excludeEnd:!0,contains:[{begin:/[\w-]+\(/,returnBegin:!0,contains:[{className:"built_in",begin:/[\w-]+/},{begin:/\(/,end:/\)/,contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.CSS_NUMBER_MODE]}]},e.CSS_NUMBER_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,e.C_BLOCK_COMMENT_MODE,{className:"number",begin:"#[0-9A-Fa-f]+"},{className:"meta",begin:"!important"}]}}]};return{name:"CSS",case_insensitive:!0,illegal:/[=\/|'\$]/,contains:[e.C_BLOCK_COMMENT_MODE,{className:"selector-id",begin:/#[A-Za-z0-9_-]+/},{className:"selector-class",begin:/\.[A-Za-z0-9_-]+/},{className:"selector-attr",begin:/\[/,end:/\]/,illegal:"$",contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},{className:"selector-pseudo",begin:/:(:)?[a-zA-Z0-9\_\-\+\(\)"'.]+/},{begin:"@(page|font-face)",lexemes:"@[a-z-]+",keywords:"@page @font-face"},{begin:"@",end:"[{;]",illegal:/:/,returnBegin:!0,contains:[{className:"keyword",begin:/@\-?\w[\w]*(\-\w+)*/},{begin:/\s/,endsWithParent:!0,excludeEnd:!0,relevance:0,keywords:"and or not only",contains:[{begin:/[a-z-]+:/,className:"attribute"},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.CSS_NUMBER_MODE]}]},{className:"selector-tag",begin:"[a-zA-Z-][a-zA-Z0-9_-]*",relevance:0},{begin:"{",end:"}",illegal:/\S/,contains:[e.C_BLOCK_COMMENT_MODE,n]}]}}}()); +hljs.registerLanguage("diff",function(){"use strict";return function(e){return{name:"Diff",aliases:["patch"],contains:[{className:"meta",relevance:10,variants:[{begin:/^@@ +\-\d+,\d+ +\+\d+,\d+ +@@$/},{begin:/^\*\*\* +\d+,\d+ +\*\*\*\*$/},{begin:/^\-\-\- +\d+,\d+ +\-\-\-\-$/}]},{className:"comment",variants:[{begin:/Index: /,end:/$/},{begin:/={3,}/,end:/$/},{begin:/^\-{3}/,end:/$/},{begin:/^\*{3} /,end:/$/},{begin:/^\+{3}/,end:/$/},{begin:/^\*{15}$/}]},{className:"addition",begin:"^\\+",end:"$"},{className:"deletion",begin:"^\\-",end:"$"},{className:"addition",begin:"^\\!",end:"$"}]}}}()); +hljs.registerLanguage("go",function(){"use strict";return function(e){var n={keyword:"break default func interface select case map struct chan else goto package switch const fallthrough if range type continue for import return var go defer bool byte complex64 complex128 float32 float64 int8 int16 int32 int64 string uint8 uint16 uint32 uint64 int uint uintptr rune",literal:"true false iota nil",built_in:"append cap close complex copy imag len make new panic print println real recover delete"};return{name:"Go",aliases:["golang"],keywords:n,illegal:"e(n)).join("")}return function(a){var s={className:"number",relevance:0,variants:[{begin:/([\+\-]+)?[\d]+_[\d_]+/},{begin:a.NUMBER_RE}]},i=a.COMMENT();i.variants=[{begin:/;/,end:/$/},{begin:/#/,end:/$/}];var t={className:"variable",variants:[{begin:/\$[\w\d"][\w\d_]*/},{begin:/\$\{(.*?)}/}]},r={className:"literal",begin:/\bon|off|true|false|yes|no\b/},l={className:"string",contains:[a.BACKSLASH_ESCAPE],variants:[{begin:"'''",end:"'''",relevance:10},{begin:'"""',end:'"""',relevance:10},{begin:'"',end:'"'},{begin:"'",end:"'"}]},c={begin:/\[/,end:/\]/,contains:[i,r,t,l,s,"self"],relevance:0},g="("+[/[A-Za-z0-9_-]+/,/"(\\"|[^"])*"/,/'[^']*'/].map(n=>e(n)).join("|")+")";return{name:"TOML, also INI",aliases:["toml"],case_insensitive:!0,illegal:/\S/,contains:[i,{className:"section",begin:/\[+/,end:/\]+/},{begin:n(g,"(\\s*\\.\\s*",g,")*",n("(?=",/\s*=\s*[^#\s]/,")")),className:"attr",starts:{end:/$/,contains:[i,c,r,t,l,s]}}]}}}()); +hljs.registerLanguage("java",function(){"use strict";function e(e){return e?"string"==typeof e?e:e.source:null}function n(e){return a("(",e,")?")}function a(...n){return n.map(n=>e(n)).join("")}function s(...n){return"("+n.map(n=>e(n)).join("|")+")"}return function(e){var t="false synchronized int abstract float private char boolean var static null if const for true while long strictfp finally protected import native final void enum else break transient catch instanceof byte super volatile case assert short package default double public try this switch continue throws protected public private module requires exports do",i={className:"meta",begin:"@[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*",contains:[{begin:/\(/,end:/\)/,contains:["self"]}]},r=e=>a("[",e,"]+([",e,"_]*[",e,"]+)?"),c={className:"number",variants:[{begin:`\\b(0[bB]${r("01")})[lL]?`},{begin:`\\b(0${r("0-7")})[dDfFlL]?`},{begin:a(/\b0[xX]/,s(a(r("a-fA-F0-9"),/\./,r("a-fA-F0-9")),a(r("a-fA-F0-9"),/\.?/),a(/\./,r("a-fA-F0-9"))),/([pP][+-]?(\d+))?/,/[fFdDlL]?/)},{begin:a(/\b/,s(a(/\d*\./,r("\\d")),r("\\d")),/[eE][+-]?[\d]+[dDfF]?/)},{begin:a(/\b/,r(/\d/),n(/\.?/),n(r(/\d/)),/[dDfFlL]?/)}],relevance:0};return{name:"Java",aliases:["jsp"],keywords:t,illegal:/<\/|#/,contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{begin:/\w+@/,relevance:0},{className:"doctag",begin:"@[A-Za-z]+"}]}),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{className:"class",beginKeywords:"class interface",end:/[{;=]/,excludeEnd:!0,keywords:"class interface",illegal:/[:"\[\]]/,contains:[{beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"new throw return else",relevance:0},{className:"function",begin:"([À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*(<[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*(\\s*,\\s*[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*)*>)?\\s+)+"+e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:t,contains:[{begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0,contains:[e.UNDERSCORE_TITLE_MODE]},{className:"params",begin:/\(/,end:/\)/,keywords:t,relevance:0,contains:[i,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},c,i]}}}()); +hljs.registerLanguage("javascript",function(){"use strict";const e=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"],n=["true","false","null","undefined","NaN","Infinity"],a=[].concat(["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],["arguments","this","super","console","window","document","localStorage","module","global"],["Intl","DataView","Number","Math","Date","String","RegExp","Object","Function","Boolean","Error","Symbol","Set","Map","WeakSet","WeakMap","Proxy","Reflect","JSON","Promise","Float64Array","Int16Array","Int32Array","Int8Array","Uint16Array","Uint32Array","Float32Array","Array","Uint8Array","Uint8ClampedArray","ArrayBuffer"],["EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"]);function s(e){return r("(?=",e,")")}function r(...e){return e.map(e=>(function(e){return e?"string"==typeof e?e:e.source:null})(e)).join("")}return function(t){var i="[A-Za-z$_][0-9A-Za-z$_]*",c={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/},o={$pattern:"[A-Za-z$_][0-9A-Za-z$_]*",keyword:e.join(" "),literal:n.join(" "),built_in:a.join(" ")},l={className:"number",variants:[{begin:"\\b(0[bB][01]+)n?"},{begin:"\\b(0[oO][0-7]+)n?"},{begin:t.C_NUMBER_RE+"n?"}],relevance:0},E={className:"subst",begin:"\\$\\{",end:"\\}",keywords:o,contains:[]},d={begin:"html`",end:"",starts:{end:"`",returnEnd:!1,contains:[t.BACKSLASH_ESCAPE,E],subLanguage:"xml"}},g={begin:"css`",end:"",starts:{end:"`",returnEnd:!1,contains:[t.BACKSLASH_ESCAPE,E],subLanguage:"css"}},u={className:"string",begin:"`",end:"`",contains:[t.BACKSLASH_ESCAPE,E]};E.contains=[t.APOS_STRING_MODE,t.QUOTE_STRING_MODE,d,g,u,l,t.REGEXP_MODE];var b=E.contains.concat([{begin:/\(/,end:/\)/,contains:["self"].concat(E.contains,[t.C_BLOCK_COMMENT_MODE,t.C_LINE_COMMENT_MODE])},t.C_BLOCK_COMMENT_MODE,t.C_LINE_COMMENT_MODE]),_={className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,contains:b};return{name:"JavaScript",aliases:["js","jsx","mjs","cjs"],keywords:o,contains:[t.SHEBANG({binary:"node",relevance:5}),{className:"meta",relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},t.APOS_STRING_MODE,t.QUOTE_STRING_MODE,d,g,u,t.C_LINE_COMMENT_MODE,t.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+",contains:[{className:"type",begin:"\\{",end:"\\}",relevance:0},{className:"variable",begin:i+"(?=\\s*(-)|$)",endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]}),t.C_BLOCK_COMMENT_MODE,l,{begin:r(/[{,\n]\s*/,s(r(/(((\/\/.*)|(\/\*(.|\n)*\*\/))\s*)*/,i+"\\s*:"))),relevance:0,contains:[{className:"attr",begin:i+s("\\s*:"),relevance:0}]},{begin:"("+t.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",contains:[t.C_LINE_COMMENT_MODE,t.C_BLOCK_COMMENT_MODE,t.REGEXP_MODE,{className:"function",begin:"(\\([^(]*(\\([^(]*(\\([^(]*\\))?\\))?\\)|"+t.UNDERSCORE_IDENT_RE+")\\s*=>",returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:t.UNDERSCORE_IDENT_RE},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:o,contains:b}]}]},{begin:/,/,relevance:0},{className:"",begin:/\s/,end:/\s*/,skip:!0},{variants:[{begin:"<>",end:""},{begin:c.begin,end:c.end}],subLanguage:"xml",contains:[{begin:c.begin,end:c.end,skip:!0,contains:["self"]}]}],relevance:0},{className:"function",beginKeywords:"function",end:/\{/,excludeEnd:!0,contains:[t.inherit(t.TITLE_MODE,{begin:i}),_],illegal:/\[|%/},{begin:/\$[(.]/},t.METHOD_GUARD,{className:"class",beginKeywords:"class",end:/[{;=]/,excludeEnd:!0,illegal:/[:"\[\]]/,contains:[{beginKeywords:"extends"},t.UNDERSCORE_TITLE_MODE]},{beginKeywords:"constructor",end:/\{/,excludeEnd:!0},{begin:"(get|set)\\s+(?="+i+"\\()",end:/{/,keywords:"get set",contains:[t.inherit(t.TITLE_MODE,{begin:i}),{begin:/\(\)/},_]}],illegal:/#(?!!)/}}}()); +hljs.registerLanguage("json",function(){"use strict";return function(n){var e={literal:"true false null"},i=[n.C_LINE_COMMENT_MODE,n.C_BLOCK_COMMENT_MODE],t=[n.QUOTE_STRING_MODE,n.C_NUMBER_MODE],a={end:",",endsWithParent:!0,excludeEnd:!0,contains:t,keywords:e},l={begin:"{",end:"}",contains:[{className:"attr",begin:/"/,end:/"/,contains:[n.BACKSLASH_ESCAPE],illegal:"\\n"},n.inherit(a,{begin:/:/})].concat(i),illegal:"\\S"},s={begin:"\\[",end:"\\]",contains:[n.inherit(a)],illegal:"\\S"};return t.push(l,s),i.forEach((function(n){t.push(n)})),{name:"JSON",contains:t,keywords:e,illegal:"\\S"}}}()); +hljs.registerLanguage("kotlin",function(){"use strict";return function(e){var n={keyword:"abstract as val var vararg get set class object open private protected public noinline crossinline dynamic final enum if else do while for when throw try catch finally import package is in fun override companion reified inline lateinit init interface annotation data sealed internal infix operator out by constructor super tailrec where const inner suspend typealias external expect actual trait volatile transient native default",built_in:"Byte Short Char Int Long Boolean Float Double Void Unit Nothing",literal:"true false null"},a={className:"symbol",begin:e.UNDERSCORE_IDENT_RE+"@"},i={className:"subst",begin:"\\${",end:"}",contains:[e.C_NUMBER_MODE]},s={className:"variable",begin:"\\$"+e.UNDERSCORE_IDENT_RE},t={className:"string",variants:[{begin:'"""',end:'"""(?=[^"])',contains:[s,i]},{begin:"'",end:"'",illegal:/\n/,contains:[e.BACKSLASH_ESCAPE]},{begin:'"',end:'"',illegal:/\n/,contains:[e.BACKSLASH_ESCAPE,s,i]}]};i.contains.push(t);var r={className:"meta",begin:"@(?:file|property|field|get|set|receiver|param|setparam|delegate)\\s*:(?:\\s*"+e.UNDERSCORE_IDENT_RE+")?"},l={className:"meta",begin:"@"+e.UNDERSCORE_IDENT_RE,contains:[{begin:/\(/,end:/\)/,contains:[e.inherit(t,{className:"meta-string"})]}]},c=e.COMMENT("/\\*","\\*/",{contains:[e.C_BLOCK_COMMENT_MODE]}),o={variants:[{className:"type",begin:e.UNDERSCORE_IDENT_RE},{begin:/\(/,end:/\)/,contains:[]}]},d=o;return d.variants[1].contains=[o],o.variants[1].contains=[d],{name:"Kotlin",aliases:["kt"],keywords:n,contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+"}]}),e.C_LINE_COMMENT_MODE,c,{className:"keyword",begin:/\b(break|continue|return|this)\b/,starts:{contains:[{className:"symbol",begin:/@\w+/}]}},a,r,l,{className:"function",beginKeywords:"fun",end:"[(]|$",returnBegin:!0,excludeEnd:!0,keywords:n,illegal:/fun\s+(<.*>)?[^\s\(]+(\s+[^\s\(]+)\s*=/,relevance:5,contains:[{begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0,contains:[e.UNDERSCORE_TITLE_MODE]},{className:"type",begin://,keywords:"reified",relevance:0},{className:"params",begin:/\(/,end:/\)/,endsParent:!0,keywords:n,relevance:0,contains:[{begin:/:/,end:/[=,\/]/,endsWithParent:!0,contains:[o,e.C_LINE_COMMENT_MODE,c],relevance:0},e.C_LINE_COMMENT_MODE,c,r,l,t,e.C_NUMBER_MODE]},c]},{className:"class",beginKeywords:"class interface trait",end:/[:\{(]|$/,excludeEnd:!0,illegal:"extends implements",contains:[{beginKeywords:"public protected internal private constructor"},e.UNDERSCORE_TITLE_MODE,{className:"type",begin://,excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:/[,:]\s*/,end:/[<\(,]|$/,excludeBegin:!0,returnEnd:!0},r,l]},t,{className:"meta",begin:"^#!/usr/bin/env",end:"$",illegal:"\n"},{className:"number",begin:"\\b(0[bB]([01]+[01_]+[01]+|[01]+)|0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)|(([\\d]+[\\d_]+[\\d]+|[\\d]+)(\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))?|\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))([eE][-+]?\\d+)?)[lLfF]?",relevance:0}]}}}()); +hljs.registerLanguage("less",function(){"use strict";return function(e){var n="([\\w-]+|@{[\\w-]+})",a=[],s=[],t=function(e){return{className:"string",begin:"~?"+e+".*?"+e}},r=function(e,n,a){return{className:e,begin:n,relevance:a}},i={begin:"\\(",end:"\\)",contains:s,relevance:0};s.push(e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,t("'"),t('"'),e.CSS_NUMBER_MODE,{begin:"(url|data-uri)\\(",starts:{className:"string",end:"[\\)\\n]",excludeEnd:!0}},r("number","#[0-9A-Fa-f]+\\b"),i,r("variable","@@?[\\w-]+",10),r("variable","@{[\\w-]+}"),r("built_in","~?`[^`]*?`"),{className:"attribute",begin:"[\\w-]+\\s*:",end:":",returnBegin:!0,excludeEnd:!0},{className:"meta",begin:"!important"});var c=s.concat({begin:"{",end:"}",contains:a}),l={beginKeywords:"when",endsWithParent:!0,contains:[{beginKeywords:"and not"}].concat(s)},o={begin:n+"\\s*:",returnBegin:!0,end:"[;}]",relevance:0,contains:[{className:"attribute",begin:n,end:":",excludeEnd:!0,starts:{endsWithParent:!0,illegal:"[<=$]",relevance:0,contains:s}}]},g={className:"keyword",begin:"@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\b",starts:{end:"[;{}]",returnEnd:!0,contains:s,relevance:0}},d={className:"variable",variants:[{begin:"@[\\w-]+\\s*:",relevance:15},{begin:"@[\\w-]+"}],starts:{end:"[;}]",returnEnd:!0,contains:c}},b={variants:[{begin:"[\\.#:&\\[>]",end:"[;{}]"},{begin:n,end:"{"}],returnBegin:!0,returnEnd:!0,illegal:"[<='$\"]",relevance:0,contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,l,r("keyword","all\\b"),r("variable","@{[\\w-]+}"),r("selector-tag",n+"%?",0),r("selector-id","#"+n),r("selector-class","\\."+n,0),r("selector-tag","&",0),{className:"selector-attr",begin:"\\[",end:"\\]"},{className:"selector-pseudo",begin:/:(:)?[a-zA-Z0-9\_\-\+\(\)"'.]+/},{begin:"\\(",end:"\\)",contains:c},{begin:"!important"}]};return a.push(e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,g,d,o,b),{name:"Less",case_insensitive:!0,illegal:"[=>'/<($\"]",contains:a}}}()); +hljs.registerLanguage("lua",function(){"use strict";return function(e){var t={begin:"\\[=*\\[",end:"\\]=*\\]",contains:["self"]},a=[e.COMMENT("--(?!\\[=*\\[)","$"),e.COMMENT("--\\[=*\\[","\\]=*\\]",{contains:[t],relevance:10})];return{name:"Lua",keywords:{$pattern:e.UNDERSCORE_IDENT_RE,literal:"true false nil",keyword:"and break do else elseif end for goto if in local not or repeat return then until while",built_in:"_G _ENV _VERSION __index __newindex __mode __call __metatable __tostring __len __gc __add __sub __mul __div __mod __pow __concat __unm __eq __lt __le assert collectgarbage dofile error getfenv getmetatable ipairs load loadfile loadstring module next pairs pcall print rawequal rawget rawset require select setfenv setmetatable tonumber tostring type unpack xpcall arg self coroutine resume yield status wrap create running debug getupvalue debug sethook getmetatable gethook setmetatable setlocal traceback setfenv getinfo setupvalue getlocal getregistry getfenv io lines write close flush open output type read stderr stdin input stdout popen tmpfile math log max acos huge ldexp pi cos tanh pow deg tan cosh sinh random randomseed frexp ceil floor rad abs sqrt modf asin min mod fmod log10 atan2 exp sin atan os exit setlocale date getenv difftime remove time clock tmpname rename execute package preload loadlib loaded loaders cpath config path seeall string sub upper len gfind rep find match char dump gmatch reverse byte format gsub lower table setn insert getn foreachi maxn foreach concat sort remove"},contains:a.concat([{className:"function",beginKeywords:"function",end:"\\)",contains:[e.inherit(e.TITLE_MODE,{begin:"([_a-zA-Z]\\w*\\.)*([_a-zA-Z]\\w*:)?[_a-zA-Z]\\w*"}),{className:"params",begin:"\\(",endsWithParent:!0,contains:a}].concat(a)},e.C_NUMBER_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{className:"string",begin:"\\[=*\\[",end:"\\]=*\\]",contains:[t],relevance:5}])}}}()); +hljs.registerLanguage("makefile",function(){"use strict";return function(e){var i={className:"variable",variants:[{begin:"\\$\\("+e.UNDERSCORE_IDENT_RE+"\\)",contains:[e.BACKSLASH_ESCAPE]},{begin:/\$[@%`]+/}]}]}]};return{name:"HTML, XML",aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf","svg"],case_insensitive:!0,contains:[{className:"meta",begin:"",relevance:10,contains:[a,i,t,s,{begin:"\\[",end:"\\]",contains:[{className:"meta",begin:"",contains:[a,s,i,t]}]}]},e.COMMENT("\x3c!--","--\x3e",{relevance:10}),{begin:"<\\!\\[CDATA\\[",end:"\\]\\]>",relevance:10},n,{className:"meta",begin:/<\?xml/,end:/\?>/,relevance:10},{className:"tag",begin:")",end:">",keywords:{name:"style"},contains:[c],starts:{end:"",returnEnd:!0,subLanguage:["css","xml"]}},{className:"tag",begin:")",end:">",keywords:{name:"script"},contains:[c],starts:{end:"<\/script>",returnEnd:!0,subLanguage:["javascript","handlebars","xml"]}},{className:"tag",begin:"",contains:[{className:"name",begin:/[^\/><\s]+/,relevance:0},c]}]}}}()); +hljs.registerLanguage("markdown",function(){"use strict";return function(n){const e={begin:"<",end:">",subLanguage:"xml",relevance:0},a={begin:"\\[.+?\\][\\(\\[].*?[\\)\\]]",returnBegin:!0,contains:[{className:"string",begin:"\\[",end:"\\]",excludeBegin:!0,returnEnd:!0,relevance:0},{className:"link",begin:"\\]\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0},{className:"symbol",begin:"\\]\\[",end:"\\]",excludeBegin:!0,excludeEnd:!0}],relevance:10},i={className:"strong",contains:[],variants:[{begin:/_{2}/,end:/_{2}/},{begin:/\*{2}/,end:/\*{2}/}]},s={className:"emphasis",contains:[],variants:[{begin:/\*(?!\*)/,end:/\*/},{begin:/_(?!_)/,end:/_/,relevance:0}]};i.contains.push(s),s.contains.push(i);var c=[e,a];return i.contains=i.contains.concat(c),s.contains=s.contains.concat(c),{name:"Markdown",aliases:["md","mkdown","mkd"],contains:[{className:"section",variants:[{begin:"^#{1,6}",end:"$",contains:c=c.concat(i,s)},{begin:"(?=^.+?\\n[=-]{2,}$)",contains:[{begin:"^[=-]*$"},{begin:"^",end:"\\n",contains:c}]}]},e,{className:"bullet",begin:"^[ \t]*([*+-]|(\\d+\\.))(?=\\s+)",end:"\\s+",excludeEnd:!0},i,s,{className:"quote",begin:"^>\\s+",contains:c,end:"$"},{className:"code",variants:[{begin:"(`{3,})(.|\\n)*?\\1`*[ ]*"},{begin:"(~{3,})(.|\\n)*?\\1~*[ ]*"},{begin:"```",end:"```+[ ]*$"},{begin:"~~~",end:"~~~+[ ]*$"},{begin:"`.+?`"},{begin:"(?=^( {4}|\\t))",contains:[{begin:"^( {4}|\\t)",end:"(\\n)$"}],relevance:0}]},{begin:"^[-\\*]{3,}",end:"$"},a,{begin:/^\[[^\n]+\]:/,returnBegin:!0,contains:[{className:"symbol",begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0},{className:"link",begin:/:\s*/,end:/$/,excludeBegin:!0}]}]}}}()); +hljs.registerLanguage("nginx",function(){"use strict";return function(e){var n={className:"variable",variants:[{begin:/\$\d+/},{begin:/\$\{/,end:/}/},{begin:"[\\$\\@]"+e.UNDERSCORE_IDENT_RE}]},a={endsWithParent:!0,keywords:{$pattern:"[a-z/_]+",literal:"on off yes no true false none blocked debug info notice warn error crit select break last permanent redirect kqueue rtsig epoll poll /dev/poll"},relevance:0,illegal:"=>",contains:[e.HASH_COMMENT_MODE,{className:"string",contains:[e.BACKSLASH_ESCAPE,n],variants:[{begin:/"/,end:/"/},{begin:/'/,end:/'/}]},{begin:"([a-z]+):/",end:"\\s",endsWithParent:!0,excludeEnd:!0,contains:[n]},{className:"regexp",contains:[e.BACKSLASH_ESCAPE,n],variants:[{begin:"\\s\\^",end:"\\s|{|;",returnEnd:!0},{begin:"~\\*?\\s+",end:"\\s|{|;",returnEnd:!0},{begin:"\\*(\\.[a-z\\-]+)+"},{begin:"([a-z\\-]+\\.)+\\*"}]},{className:"number",begin:"\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?\\b"},{className:"number",begin:"\\b\\d+[kKmMgGdshdwy]*\\b",relevance:0},n]};return{name:"Nginx config",aliases:["nginxconf"],contains:[e.HASH_COMMENT_MODE,{begin:e.UNDERSCORE_IDENT_RE+"\\s+{",returnBegin:!0,end:"{",contains:[{className:"section",begin:e.UNDERSCORE_IDENT_RE}],relevance:0},{begin:e.UNDERSCORE_IDENT_RE+"\\s",end:";|{",returnBegin:!0,contains:[{className:"attribute",begin:e.UNDERSCORE_IDENT_RE,starts:a}],relevance:0}],illegal:"[^\\s\\}]"}}}()); +hljs.registerLanguage("objectivec",function(){"use strict";return function(e){var n=/[a-zA-Z@][a-zA-Z0-9_]*/,_={$pattern:n,keyword:"@interface @class @protocol @implementation"};return{name:"Objective-C",aliases:["mm","objc","obj-c"],keywords:{$pattern:n,keyword:"int float while char export sizeof typedef const struct for union unsigned long volatile static bool mutable if do return goto void enum else break extern asm case short default double register explicit signed typename this switch continue wchar_t inline readonly assign readwrite self @synchronized id typeof nonatomic super unichar IBOutlet IBAction strong weak copy in out inout bycopy byref oneway __strong __weak __block __autoreleasing @private @protected @public @try @property @end @throw @catch @finally @autoreleasepool @synthesize @dynamic @selector @optional @required @encode @package @import @defs @compatibility_alias __bridge __bridge_transfer __bridge_retained __bridge_retain __covariant __contravariant __kindof _Nonnull _Nullable _Null_unspecified __FUNCTION__ __PRETTY_FUNCTION__ __attribute__ getter setter retain unsafe_unretained nonnull nullable null_unspecified null_resettable class instancetype NS_DESIGNATED_INITIALIZER NS_UNAVAILABLE NS_REQUIRES_SUPER NS_RETURNS_INNER_POINTER NS_INLINE NS_AVAILABLE NS_DEPRECATED NS_ENUM NS_OPTIONS NS_SWIFT_UNAVAILABLE NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_END NS_REFINED_FOR_SWIFT NS_SWIFT_NAME NS_SWIFT_NOTHROW NS_DURING NS_HANDLER NS_ENDHANDLER NS_VALUERETURN NS_VOIDRETURN",literal:"false true FALSE TRUE nil YES NO NULL",built_in:"BOOL dispatch_once_t dispatch_queue_t dispatch_sync dispatch_async dispatch_once"},illegal:"/,end:/$/,illegal:"\\n"},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"class",begin:"("+_.keyword.split(" ").join("|")+")\\b",end:"({|$)",excludeEnd:!0,keywords:_,contains:[e.UNDERSCORE_TITLE_MODE]},{begin:"\\."+e.UNDERSCORE_IDENT_RE,relevance:0}]}}}()); +hljs.registerLanguage("perl",function(){"use strict";return function(e){var n={$pattern:/[\w.]+/,keyword:"getpwent getservent quotemeta msgrcv scalar kill dbmclose undef lc ma syswrite tr send umask sysopen shmwrite vec qx utime local oct semctl localtime readpipe do return format read sprintf dbmopen pop getpgrp not getpwnam rewinddir qq fileno qw endprotoent wait sethostent bless s|0 opendir continue each sleep endgrent shutdown dump chomp connect getsockname die socketpair close flock exists index shmget sub for endpwent redo lstat msgctl setpgrp abs exit select print ref gethostbyaddr unshift fcntl syscall goto getnetbyaddr join gmtime symlink semget splice x|0 getpeername recv log setsockopt cos last reverse gethostbyname getgrnam study formline endhostent times chop length gethostent getnetent pack getprotoent getservbyname rand mkdir pos chmod y|0 substr endnetent printf next open msgsnd readdir use unlink getsockopt getpriority rindex wantarray hex system getservbyport endservent int chr untie rmdir prototype tell listen fork shmread ucfirst setprotoent else sysseek link getgrgid shmctl waitpid unpack getnetbyname reset chdir grep split require caller lcfirst until warn while values shift telldir getpwuid my getprotobynumber delete and sort uc defined srand accept package seekdir getprotobyname semop our rename seek if q|0 chroot sysread setpwent no crypt getc chown sqrt write setnetent setpriority foreach tie sin msgget map stat getlogin unless elsif truncate exec keys glob tied closedir ioctl socket readlink eval xor readline binmode setservent eof ord bind alarm pipe atan2 getgrent exp time push setgrent gt lt or ne m|0 break given say state when"},t={className:"subst",begin:"[$@]\\{",end:"\\}",keywords:n},s={begin:"->{",end:"}"},r={variants:[{begin:/\$\d/},{begin:/[\$%@](\^\w\b|#\w+(::\w+)*|{\w+}|\w+(::\w*)*)/},{begin:/[\$%@][^\s\w{]/,relevance:0}]},i=[e.BACKSLASH_ESCAPE,t,r],a=[r,e.HASH_COMMENT_MODE,e.COMMENT("^\\=\\w","\\=cut",{endsWithParent:!0}),s,{className:"string",contains:i,variants:[{begin:"q[qwxr]?\\s*\\(",end:"\\)",relevance:5},{begin:"q[qwxr]?\\s*\\[",end:"\\]",relevance:5},{begin:"q[qwxr]?\\s*\\{",end:"\\}",relevance:5},{begin:"q[qwxr]?\\s*\\|",end:"\\|",relevance:5},{begin:"q[qwxr]?\\s*\\<",end:"\\>",relevance:5},{begin:"qw\\s+q",end:"q",relevance:5},{begin:"'",end:"'",contains:[e.BACKSLASH_ESCAPE]},{begin:'"',end:'"'},{begin:"`",end:"`",contains:[e.BACKSLASH_ESCAPE]},{begin:"{\\w+}",contains:[],relevance:0},{begin:"-?\\w+\\s*\\=\\>",contains:[],relevance:0}]},{className:"number",begin:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",relevance:0},{begin:"(\\/\\/|"+e.RE_STARTERS_RE+"|\\b(split|return|print|reverse|grep)\\b)\\s*",keywords:"split return print reverse grep",relevance:0,contains:[e.HASH_COMMENT_MODE,{className:"regexp",begin:"(s|tr|y)/(\\\\.|[^/])*/(\\\\.|[^/])*/[a-z]*",relevance:10},{className:"regexp",begin:"(m|qr)?/",end:"/[a-z]*",contains:[e.BACKSLASH_ESCAPE],relevance:0}]},{className:"function",beginKeywords:"sub",end:"(\\s*\\(.*?\\))?[;{]",excludeEnd:!0,relevance:5,contains:[e.TITLE_MODE]},{begin:"-\\w\\b",relevance:0},{begin:"^__DATA__$",end:"^__END__$",subLanguage:"mojolicious",contains:[{begin:"^@@.*",end:"$",className:"comment"}]}];return t.contains=a,s.contains=a,{name:"Perl",aliases:["pl","pm"],keywords:n,contains:a}}}()); +hljs.registerLanguage("php",function(){"use strict";return function(e){var r={begin:"\\$+[a-zA-Z_-ÿ][a-zA-Z0-9_-ÿ]*"},t={className:"meta",variants:[{begin:/<\?php/,relevance:10},{begin:/<\?[=]?/},{begin:/\?>/}]},a={className:"string",contains:[e.BACKSLASH_ESCAPE,t],variants:[{begin:'b"',end:'"'},{begin:"b'",end:"'"},e.inherit(e.APOS_STRING_MODE,{illegal:null}),e.inherit(e.QUOTE_STRING_MODE,{illegal:null})]},n={variants:[e.BINARY_NUMBER_MODE,e.C_NUMBER_MODE]},i={keyword:"__CLASS__ __DIR__ __FILE__ __FUNCTION__ __LINE__ __METHOD__ __NAMESPACE__ __TRAIT__ die echo exit include include_once print require require_once array abstract and as binary bool boolean break callable case catch class clone const continue declare default do double else elseif empty enddeclare endfor endforeach endif endswitch endwhile eval extends final finally float for foreach from global goto if implements instanceof insteadof int integer interface isset iterable list new object or private protected public real return string switch throw trait try unset use var void while xor yield",literal:"false null true",built_in:"Error|0 AppendIterator ArgumentCountError ArithmeticError ArrayIterator ArrayObject AssertionError BadFunctionCallException BadMethodCallException CachingIterator CallbackFilterIterator CompileError Countable DirectoryIterator DivisionByZeroError DomainException EmptyIterator ErrorException Exception FilesystemIterator FilterIterator GlobIterator InfiniteIterator InvalidArgumentException IteratorIterator LengthException LimitIterator LogicException MultipleIterator NoRewindIterator OutOfBoundsException OutOfRangeException OuterIterator OverflowException ParentIterator ParseError RangeException RecursiveArrayIterator RecursiveCachingIterator RecursiveCallbackFilterIterator RecursiveDirectoryIterator RecursiveFilterIterator RecursiveIterator RecursiveIteratorIterator RecursiveRegexIterator RecursiveTreeIterator RegexIterator RuntimeException SeekableIterator SplDoublyLinkedList SplFileInfo SplFileObject SplFixedArray SplHeap SplMaxHeap SplMinHeap SplObjectStorage SplObserver SplObserver SplPriorityQueue SplQueue SplStack SplSubject SplSubject SplTempFileObject TypeError UnderflowException UnexpectedValueException ArrayAccess Closure Generator Iterator IteratorAggregate Serializable Throwable Traversable WeakReference Directory __PHP_Incomplete_Class parent php_user_filter self static stdClass"};return{aliases:["php","php3","php4","php5","php6","php7"],case_insensitive:!0,keywords:i,contains:[e.HASH_COMMENT_MODE,e.COMMENT("//","$",{contains:[t]}),e.COMMENT("/\\*","\\*/",{contains:[{className:"doctag",begin:"@[A-Za-z]+"}]}),e.COMMENT("__halt_compiler.+?;",!1,{endsWithParent:!0,keywords:"__halt_compiler"}),{className:"string",begin:/<<<['"]?\w+['"]?$/,end:/^\w+;?$/,contains:[e.BACKSLASH_ESCAPE,{className:"subst",variants:[{begin:/\$\w+/},{begin:/\{\$/,end:/\}/}]}]},t,{className:"keyword",begin:/\$this\b/},r,{begin:/(::|->)+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/},{className:"function",beginKeywords:"fn function",end:/[;{]/,excludeEnd:!0,illegal:"[$%\\[]",contains:[e.UNDERSCORE_TITLE_MODE,{className:"params",begin:"\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0,keywords:i,contains:["self",r,e.C_BLOCK_COMMENT_MODE,a,n]}]},{className:"class",beginKeywords:"class interface",end:"{",excludeEnd:!0,illegal:/[:\(\$"]/,contains:[{beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"namespace",end:";",illegal:/[\.']/,contains:[e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"use",end:";",contains:[e.UNDERSCORE_TITLE_MODE]},{begin:"=>"},a,n]}}}()); +hljs.registerLanguage("php-template",function(){"use strict";return function(n){return{name:"PHP template",subLanguage:"xml",contains:[{begin:/<\?(php|=)?/,end:/\?>/,subLanguage:"php",contains:[{begin:"/\\*",end:"\\*/",skip:!0},{begin:'b"',end:'"',skip:!0},{begin:"b'",end:"'",skip:!0},n.inherit(n.APOS_STRING_MODE,{illegal:null,className:null,contains:null,skip:!0}),n.inherit(n.QUOTE_STRING_MODE,{illegal:null,className:null,contains:null,skip:!0})]}]}}}()); +hljs.registerLanguage("plaintext",function(){"use strict";return function(t){return{name:"Plain text",aliases:["text","txt"],disableAutodetect:!0}}}()); +hljs.registerLanguage("properties",function(){"use strict";return function(e){var n="[ \\t\\f]*",t="("+n+"[:=]"+n+"|[ \\t\\f]+)",a="([^\\\\:= \\t\\f\\n]|\\\\.)+",s={end:t,relevance:0,starts:{className:"string",end:/$/,relevance:0,contains:[{begin:"\\\\\\n"}]}};return{name:".properties",case_insensitive:!0,illegal:/\S/,contains:[e.COMMENT("^\\s*[!#]","$"),{begin:"([^\\\\\\W:= \\t\\f\\n]|\\\\.)+"+t,returnBegin:!0,contains:[{className:"attr",begin:"([^\\\\\\W:= \\t\\f\\n]|\\\\.)+",endsParent:!0,relevance:0}],starts:s},{begin:a+t,returnBegin:!0,relevance:0,contains:[{className:"meta",begin:a,endsParent:!0,relevance:0}],starts:s},{className:"attr",relevance:0,begin:a+n+"$"}]}}}()); +hljs.registerLanguage("python",function(){"use strict";return function(e){var n={keyword:"and elif is global as in if from raise for except finally print import pass return exec else break not with class assert yield try while continue del or def lambda async await nonlocal|10",built_in:"Ellipsis NotImplemented",literal:"False None True"},a={className:"meta",begin:/^(>>>|\.\.\.) /},i={className:"subst",begin:/\{/,end:/\}/,keywords:n,illegal:/#/},s={begin:/\{\{/,relevance:0},r={className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{begin:/(u|b)?r?'''/,end:/'''/,contains:[e.BACKSLASH_ESCAPE,a],relevance:10},{begin:/(u|b)?r?"""/,end:/"""/,contains:[e.BACKSLASH_ESCAPE,a],relevance:10},{begin:/(fr|rf|f)'''/,end:/'''/,contains:[e.BACKSLASH_ESCAPE,a,s,i]},{begin:/(fr|rf|f)"""/,end:/"""/,contains:[e.BACKSLASH_ESCAPE,a,s,i]},{begin:/(u|r|ur)'/,end:/'/,relevance:10},{begin:/(u|r|ur)"/,end:/"/,relevance:10},{begin:/(b|br)'/,end:/'/},{begin:/(b|br)"/,end:/"/},{begin:/(fr|rf|f)'/,end:/'/,contains:[e.BACKSLASH_ESCAPE,s,i]},{begin:/(fr|rf|f)"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,s,i]},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},l={className:"number",relevance:0,variants:[{begin:e.BINARY_NUMBER_RE+"[lLjJ]?"},{begin:"\\b(0o[0-7]+)[lLjJ]?"},{begin:e.C_NUMBER_RE+"[lLjJ]?"}]},t={className:"params",variants:[{begin:/\(\s*\)/,skip:!0,className:null},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,contains:["self",a,l,r,e.HASH_COMMENT_MODE]}]};return i.contains=[r,l,a],{name:"Python",aliases:["py","gyp","ipython"],keywords:n,illegal:/(<\/|->|\?)|=>/,contains:[a,l,{beginKeywords:"if",relevance:0},r,e.HASH_COMMENT_MODE,{variants:[{className:"function",beginKeywords:"def"},{className:"class",beginKeywords:"class"}],end:/:/,illegal:/[${=;\n,]/,contains:[e.UNDERSCORE_TITLE_MODE,t,{begin:/->/,endsWithParent:!0,keywords:"None"}]},{className:"meta",begin:/^[\t ]*@/,end:/$/},{begin:/\b(print|exec)\(/}]}}}()); +hljs.registerLanguage("python-repl",function(){"use strict";return function(n){return{aliases:["pycon"],contains:[{className:"meta",starts:{end:/ |$/,starts:{end:"$",subLanguage:"python"}},variants:[{begin:/^>>>(?=[ ]|$)/},{begin:/^\.\.\.(?=[ ]|$)/}]}]}}}()); +hljs.registerLanguage("ruby",function(){"use strict";return function(e){var n="[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?",a={keyword:"and then defined module in return redo if BEGIN retry end for self when next until do begin unless END rescue else break undef not super class case require yield alias while ensure elsif or include attr_reader attr_writer attr_accessor",literal:"true false nil"},s={className:"doctag",begin:"@[A-Za-z]+"},i={begin:"#<",end:">"},r=[e.COMMENT("#","$",{contains:[s]}),e.COMMENT("^\\=begin","^\\=end",{contains:[s],relevance:10}),e.COMMENT("^__END__","\\n$")],c={className:"subst",begin:"#\\{",end:"}",keywords:a},t={className:"string",contains:[e.BACKSLASH_ESCAPE,c],variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/`/,end:/`/},{begin:"%[qQwWx]?\\(",end:"\\)"},{begin:"%[qQwWx]?\\[",end:"\\]"},{begin:"%[qQwWx]?{",end:"}"},{begin:"%[qQwWx]?<",end:">"},{begin:"%[qQwWx]?/",end:"/"},{begin:"%[qQwWx]?%",end:"%"},{begin:"%[qQwWx]?-",end:"-"},{begin:"%[qQwWx]?\\|",end:"\\|"},{begin:/\B\?(\\\d{1,3}|\\x[A-Fa-f0-9]{1,2}|\\u[A-Fa-f0-9]{4}|\\?\S)\b/},{begin:/<<[-~]?'?(\w+)(?:.|\n)*?\n\s*\1\b/,returnBegin:!0,contains:[{begin:/<<[-~]?'?/},e.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/,contains:[e.BACKSLASH_ESCAPE,c]})]}]},b={className:"params",begin:"\\(",end:"\\)",endsParent:!0,keywords:a},d=[t,i,{className:"class",beginKeywords:"class module",end:"$|;",illegal:/=/,contains:[e.inherit(e.TITLE_MODE,{begin:"[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?"}),{begin:"<\\s*",contains:[{begin:"("+e.IDENT_RE+"::)?"+e.IDENT_RE}]}].concat(r)},{className:"function",beginKeywords:"def",end:"$|;",contains:[e.inherit(e.TITLE_MODE,{begin:n}),b].concat(r)},{begin:e.IDENT_RE+"::"},{className:"symbol",begin:e.UNDERSCORE_IDENT_RE+"(\\!|\\?)?:",relevance:0},{className:"symbol",begin:":(?!\\s)",contains:[t,{begin:n}],relevance:0},{className:"number",begin:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",relevance:0},{begin:"(\\$\\W)|((\\$|\\@\\@?)(\\w+))"},{className:"params",begin:/\|/,end:/\|/,keywords:a},{begin:"("+e.RE_STARTERS_RE+"|unless)\\s*",keywords:"unless",contains:[i,{className:"regexp",contains:[e.BACKSLASH_ESCAPE,c],illegal:/\n/,variants:[{begin:"/",end:"/[a-z]*"},{begin:"%r{",end:"}[a-z]*"},{begin:"%r\\(",end:"\\)[a-z]*"},{begin:"%r!",end:"![a-z]*"},{begin:"%r\\[",end:"\\][a-z]*"}]}].concat(r),relevance:0}].concat(r);c.contains=d,b.contains=d;var g=[{begin:/^\s*=>/,starts:{end:"$",contains:d}},{className:"meta",begin:"^([>?]>|[\\w#]+\\(\\w+\\):\\d+:\\d+>|(\\w+-)?\\d+\\.\\d+\\.\\d(p\\d+)?[^>]+>)",starts:{end:"$",contains:d}}];return{name:"Ruby",aliases:["rb","gemspec","podspec","thor","irb"],keywords:a,illegal:/\/\*/,contains:r.concat(g).concat(d)}}}()); +hljs.registerLanguage("rust",function(){"use strict";return function(e){var n="([ui](8|16|32|64|128|size)|f(32|64))?",t="drop i8 i16 i32 i64 i128 isize u8 u16 u32 u64 u128 usize f32 f64 str char bool Box Option Result String Vec Copy Send Sized Sync Drop Fn FnMut FnOnce ToOwned Clone Debug PartialEq PartialOrd Eq Ord AsRef AsMut Into From Default Iterator Extend IntoIterator DoubleEndedIterator ExactSizeIterator SliceConcatExt ToString assert! assert_eq! bitflags! bytes! cfg! col! concat! concat_idents! debug_assert! debug_assert_eq! env! panic! file! format! format_args! include_bin! include_str! line! local_data_key! module_path! option_env! print! println! select! stringify! try! unimplemented! unreachable! vec! write! writeln! macro_rules! assert_ne! debug_assert_ne!";return{name:"Rust",aliases:["rs"],keywords:{$pattern:e.IDENT_RE+"!?",keyword:"abstract as async await become box break const continue crate do dyn else enum extern false final fn for if impl in let loop macro match mod move mut override priv pub ref return self Self static struct super trait true try type typeof unsafe unsized use virtual where while yield",literal:"true false Some None Ok Err",built_in:t},illegal:""}]}}}()); +hljs.registerLanguage("scss",function(){"use strict";return function(e){var t={className:"variable",begin:"(\\$[a-zA-Z-][a-zA-Z0-9_-]*)\\b"},i={className:"number",begin:"#[0-9A-Fa-f]+"};return e.CSS_NUMBER_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,e.C_BLOCK_COMMENT_MODE,{name:"SCSS",case_insensitive:!0,illegal:"[=/|']",contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"selector-id",begin:"\\#[A-Za-z0-9_-]+",relevance:0},{className:"selector-class",begin:"\\.[A-Za-z0-9_-]+",relevance:0},{className:"selector-attr",begin:"\\[",end:"\\]",illegal:"$"},{className:"selector-tag",begin:"\\b(a|abbr|acronym|address|area|article|aside|audio|b|base|big|blockquote|body|br|button|canvas|caption|cite|code|col|colgroup|command|datalist|dd|del|details|dfn|div|dl|dt|em|embed|fieldset|figcaption|figure|footer|form|frame|frameset|(h[1-6])|head|header|hgroup|hr|html|i|iframe|img|input|ins|kbd|keygen|label|legend|li|link|map|mark|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|samp|script|section|select|small|span|strike|strong|style|sub|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|ul|var|video)\\b",relevance:0},{className:"selector-pseudo",begin:":(visited|valid|root|right|required|read-write|read-only|out-range|optional|only-of-type|only-child|nth-of-type|nth-last-of-type|nth-last-child|nth-child|not|link|left|last-of-type|last-child|lang|invalid|indeterminate|in-range|hover|focus|first-of-type|first-line|first-letter|first-child|first|enabled|empty|disabled|default|checked|before|after|active)"},{className:"selector-pseudo",begin:"::(after|before|choices|first-letter|first-line|repeat-index|repeat-item|selection|value)"},t,{className:"attribute",begin:"\\b(src|z-index|word-wrap|word-spacing|word-break|width|widows|white-space|visibility|vertical-align|unicode-bidi|transition-timing-function|transition-property|transition-duration|transition-delay|transition|transform-style|transform-origin|transform|top|text-underline-position|text-transform|text-shadow|text-rendering|text-overflow|text-indent|text-decoration-style|text-decoration-line|text-decoration-color|text-decoration|text-align-last|text-align|tab-size|table-layout|right|resize|quotes|position|pointer-events|perspective-origin|perspective|page-break-inside|page-break-before|page-break-after|padding-top|padding-right|padding-left|padding-bottom|padding|overflow-y|overflow-x|overflow-wrap|overflow|outline-width|outline-style|outline-offset|outline-color|outline|orphans|order|opacity|object-position|object-fit|normal|none|nav-up|nav-right|nav-left|nav-index|nav-down|min-width|min-height|max-width|max-height|mask|marks|margin-top|margin-right|margin-left|margin-bottom|margin|list-style-type|list-style-position|list-style-image|list-style|line-height|letter-spacing|left|justify-content|initial|inherit|ime-mode|image-orientation|image-resolution|image-rendering|icon|hyphens|height|font-weight|font-variant-ligatures|font-variant|font-style|font-stretch|font-size-adjust|font-size|font-language-override|font-kerning|font-feature-settings|font-family|font|float|flex-wrap|flex-shrink|flex-grow|flex-flow|flex-direction|flex-basis|flex|filter|empty-cells|display|direction|cursor|counter-reset|counter-increment|content|column-width|column-span|column-rule-width|column-rule-style|column-rule-color|column-rule|column-gap|column-fill|column-count|columns|color|clip-path|clip|clear|caption-side|break-inside|break-before|break-after|box-sizing|box-shadow|box-decoration-break|bottom|border-width|border-top-width|border-top-style|border-top-right-radius|border-top-left-radius|border-top-color|border-top|border-style|border-spacing|border-right-width|border-right-style|border-right-color|border-right|border-radius|border-left-width|border-left-style|border-left-color|border-left|border-image-width|border-image-source|border-image-slice|border-image-repeat|border-image-outset|border-image|border-color|border-collapse|border-bottom-width|border-bottom-style|border-bottom-right-radius|border-bottom-left-radius|border-bottom-color|border-bottom|border|background-size|background-repeat|background-position|background-origin|background-image|background-color|background-clip|background-attachment|background-blend-mode|background|backface-visibility|auto|animation-timing-function|animation-play-state|animation-name|animation-iteration-count|animation-fill-mode|animation-duration|animation-direction|animation-delay|animation|align-self|align-items|align-content)\\b",illegal:"[^\\s]"},{begin:"\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\b"},{begin:":",end:";",contains:[t,i,e.CSS_NUMBER_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,{className:"meta",begin:"!important"}]},{begin:"@(page|font-face)",lexemes:"@[a-z-]+",keywords:"@page @font-face"},{begin:"@",end:"[{;]",returnBegin:!0,keywords:"and or not only",contains:[{begin:"@[a-z-]+",className:"keyword"},t,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,i,e.CSS_NUMBER_MODE]}]}}}()); +hljs.registerLanguage("shell",function(){"use strict";return function(s){return{name:"Shell Session",aliases:["console"],contains:[{className:"meta",begin:"^\\s{0,3}[/\\w\\d\\[\\]()@-]*[>%$#]",starts:{end:"$",subLanguage:"bash"}}]}}}()); +hljs.registerLanguage("sql",function(){"use strict";return function(e){var t=e.COMMENT("--","$");return{name:"SQL",case_insensitive:!0,illegal:/[<>{}*]/,contains:[{beginKeywords:"begin end start commit rollback savepoint lock alter create drop rename call delete do handler insert load replace select truncate update set show pragma grant merge describe use explain help declare prepare execute deallocate release unlock purge reset change stop analyze cache flush optimize repair kill install uninstall checksum restore check backup revoke comment values with",end:/;/,endsWithParent:!0,keywords:{$pattern:/[\w\.]+/,keyword:"as abort abs absolute acc acce accep accept access accessed accessible account acos action activate add addtime admin administer advanced advise aes_decrypt aes_encrypt after agent aggregate ali alia alias all allocate allow alter always analyze ancillary and anti any anydata anydataset anyschema anytype apply archive archived archivelog are as asc ascii asin assembly assertion associate asynchronous at atan atn2 attr attri attrib attribu attribut attribute attributes audit authenticated authentication authid authors auto autoallocate autodblink autoextend automatic availability avg backup badfile basicfile before begin beginning benchmark between bfile bfile_base big bigfile bin binary_double binary_float binlog bit_and bit_count bit_length bit_or bit_xor bitmap blob_base block blocksize body both bound bucket buffer_cache buffer_pool build bulk by byte byteordermark bytes cache caching call calling cancel capacity cascade cascaded case cast catalog category ceil ceiling chain change changed char_base char_length character_length characters characterset charindex charset charsetform charsetid check checksum checksum_agg child choose chr chunk class cleanup clear client clob clob_base clone close cluster_id cluster_probability cluster_set clustering coalesce coercibility col collate collation collect colu colum column column_value columns columns_updated comment commit compact compatibility compiled complete composite_limit compound compress compute concat concat_ws concurrent confirm conn connec connect connect_by_iscycle connect_by_isleaf connect_by_root connect_time connection consider consistent constant constraint constraints constructor container content contents context contributors controlfile conv convert convert_tz corr corr_k corr_s corresponding corruption cos cost count count_big counted covar_pop covar_samp cpu_per_call cpu_per_session crc32 create creation critical cross cube cume_dist curdate current current_date current_time current_timestamp current_user cursor curtime customdatum cycle data database databases datafile datafiles datalength date_add date_cache date_format date_sub dateadd datediff datefromparts datename datepart datetime2fromparts day day_to_second dayname dayofmonth dayofweek dayofyear days db_role_change dbtimezone ddl deallocate declare decode decompose decrement decrypt deduplicate def defa defau defaul default defaults deferred defi defin define degrees delayed delegate delete delete_all delimited demand dense_rank depth dequeue des_decrypt des_encrypt des_key_file desc descr descri describ describe descriptor deterministic diagnostics difference dimension direct_load directory disable disable_all disallow disassociate discardfile disconnect diskgroup distinct distinctrow distribute distributed div do document domain dotnet double downgrade drop dumpfile duplicate duration each edition editionable editions element ellipsis else elsif elt empty enable enable_all enclosed encode encoding encrypt end end-exec endian enforced engine engines enqueue enterprise entityescaping eomonth error errors escaped evalname evaluate event eventdata events except exception exceptions exchange exclude excluding execu execut execute exempt exists exit exp expire explain explode export export_set extended extent external external_1 external_2 externally extract failed failed_login_attempts failover failure far fast feature_set feature_value fetch field fields file file_name_convert filesystem_like_logging final finish first first_value fixed flash_cache flashback floor flush following follows for forall force foreign form forma format found found_rows freelist freelists freepools fresh from from_base64 from_days ftp full function general generated get get_format get_lock getdate getutcdate global global_name globally go goto grant grants greatest group group_concat group_id grouping grouping_id groups gtid_subtract guarantee guard handler hash hashkeys having hea head headi headin heading heap help hex hierarchy high high_priority hosts hour hours http id ident_current ident_incr ident_seed identified identity idle_time if ifnull ignore iif ilike ilm immediate import in include including increment index indexes indexing indextype indicator indices inet6_aton inet6_ntoa inet_aton inet_ntoa infile initial initialized initially initrans inmemory inner innodb input insert install instance instantiable instr interface interleaved intersect into invalidate invisible is is_free_lock is_ipv4 is_ipv4_compat is_not is_not_null is_used_lock isdate isnull isolation iterate java join json json_exists keep keep_duplicates key keys kill language large last last_day last_insert_id last_value lateral lax lcase lead leading least leaves left len lenght length less level levels library like like2 like4 likec limit lines link list listagg little ln load load_file lob lobs local localtime localtimestamp locate locator lock locked log log10 log2 logfile logfiles logging logical logical_reads_per_call logoff logon logs long loop low low_priority lower lpad lrtrim ltrim main make_set makedate maketime managed management manual map mapping mask master master_pos_wait match matched materialized max maxextents maximize maxinstances maxlen maxlogfiles maxloghistory maxlogmembers maxsize maxtrans md5 measures median medium member memcompress memory merge microsecond mid migration min minextents minimum mining minus minute minutes minvalue missing mod mode model modification modify module monitoring month months mount move movement multiset mutex name name_const names nan national native natural nav nchar nclob nested never new newline next nextval no no_write_to_binlog noarchivelog noaudit nobadfile nocheck nocompress nocopy nocycle nodelay nodiscardfile noentityescaping noguarantee nokeep nologfile nomapping nomaxvalue nominimize nominvalue nomonitoring none noneditionable nonschema noorder nopr nopro noprom nopromp noprompt norely noresetlogs noreverse normal norowdependencies noschemacheck noswitch not nothing notice notnull notrim novalidate now nowait nth_value nullif nulls num numb numbe nvarchar nvarchar2 object ocicoll ocidate ocidatetime ociduration ociinterval ociloblocator ocinumber ociref ocirefcursor ocirowid ocistring ocitype oct octet_length of off offline offset oid oidindex old on online only opaque open operations operator optimal optimize option optionally or oracle oracle_date oradata ord ordaudio orddicom orddoc order ordimage ordinality ordvideo organization orlany orlvary out outer outfile outline output over overflow overriding package pad parallel parallel_enable parameters parent parse partial partition partitions pascal passing password password_grace_time password_lock_time password_reuse_max password_reuse_time password_verify_function patch path patindex pctincrease pctthreshold pctused pctversion percent percent_rank percentile_cont percentile_disc performance period period_add period_diff permanent physical pi pipe pipelined pivot pluggable plugin policy position post_transaction pow power pragma prebuilt precedes preceding precision prediction prediction_cost prediction_details prediction_probability prediction_set prepare present preserve prior priority private private_sga privileges procedural procedure procedure_analyze processlist profiles project prompt protection public publishingservername purge quarter query quick quiesce quota quotename radians raise rand range rank raw read reads readsize rebuild record records recover recovery recursive recycle redo reduced ref reference referenced references referencing refresh regexp_like register regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy reject rekey relational relative relaylog release release_lock relies_on relocate rely rem remainder rename repair repeat replace replicate replication required reset resetlogs resize resource respect restore restricted result result_cache resumable resume retention return returning returns reuse reverse revoke right rlike role roles rollback rolling rollup round row row_count rowdependencies rowid rownum rows rtrim rules safe salt sample save savepoint sb1 sb2 sb4 scan schema schemacheck scn scope scroll sdo_georaster sdo_topo_geometry search sec_to_time second seconds section securefile security seed segment select self semi sequence sequential serializable server servererror session session_user sessions_per_user set sets settings sha sha1 sha2 share shared shared_pool short show shrink shutdown si_averagecolor si_colorhistogram si_featurelist si_positionalcolor si_stillimage si_texture siblings sid sign sin size size_t sizes skip slave sleep smalldatetimefromparts smallfile snapshot some soname sort soundex source space sparse spfile split sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_small_result sql_variant_property sqlcode sqldata sqlerror sqlname sqlstate sqrt square standalone standby start starting startup statement static statistics stats_binomial_test stats_crosstab stats_ks_test stats_mode stats_mw_test stats_one_way_anova stats_t_test_ stats_t_test_indep stats_t_test_one stats_t_test_paired stats_wsr_test status std stddev stddev_pop stddev_samp stdev stop storage store stored str str_to_date straight_join strcmp strict string struct stuff style subdate subpartition subpartitions substitutable substr substring subtime subtring_index subtype success sum suspend switch switchoffset switchover sync synchronous synonym sys sys_xmlagg sysasm sysaux sysdate sysdatetimeoffset sysdba sysoper system system_user sysutcdatetime table tables tablespace tablesample tan tdo template temporary terminated tertiary_weights test than then thread through tier ties time time_format time_zone timediff timefromparts timeout timestamp timestampadd timestampdiff timezone_abbr timezone_minute timezone_region to to_base64 to_date to_days to_seconds todatetimeoffset trace tracking transaction transactional translate translation treat trigger trigger_nestlevel triggers trim truncate try_cast try_convert try_parse type ub1 ub2 ub4 ucase unarchived unbounded uncompress under undo unhex unicode uniform uninstall union unique unix_timestamp unknown unlimited unlock unnest unpivot unrecoverable unsafe unsigned until untrusted unusable unused update updated upgrade upped upper upsert url urowid usable usage use use_stored_outlines user user_data user_resources users using utc_date utc_timestamp uuid uuid_short validate validate_password_strength validation valist value values var var_samp varcharc vari varia variab variabl variable variables variance varp varraw varrawc varray verify version versions view virtual visible void wait wallet warning warnings week weekday weekofyear wellformed when whene whenev wheneve whenever where while whitespace window with within without work wrapped xdb xml xmlagg xmlattributes xmlcast xmlcolattval xmlelement xmlexists xmlforest xmlindex xmlnamespaces xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltype xor year year_to_month years yearweek",literal:"true false null unknown",built_in:"array bigint binary bit blob bool boolean char character date dec decimal float int int8 integer interval number numeric real record serial serial8 smallint text time timestamp tinyint varchar varchar2 varying void"},contains:[{className:"string",begin:"'",end:"'",contains:[{begin:"''"}]},{className:"string",begin:'"',end:'"',contains:[{begin:'""'}]},{className:"string",begin:"`",end:"`"},e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE,t,e.HASH_COMMENT_MODE]},e.C_BLOCK_COMMENT_MODE,t,e.HASH_COMMENT_MODE]}}}()); +hljs.registerLanguage("swift",function(){"use strict";return function(e){var i={keyword:"#available #colorLiteral #column #else #elseif #endif #file #fileLiteral #function #if #imageLiteral #line #selector #sourceLocation _ __COLUMN__ __FILE__ __FUNCTION__ __LINE__ Any as as! as? associatedtype associativity break case catch class continue convenience default defer deinit didSet do dynamic dynamicType else enum extension fallthrough false fileprivate final for func get guard if import in indirect infix init inout internal is lazy left let mutating nil none nonmutating open operator optional override postfix precedence prefix private protocol Protocol public repeat required rethrows return right self Self set static struct subscript super switch throw throws true try try! try? Type typealias unowned var weak where while willSet",literal:"true false nil",built_in:"abs advance alignof alignofValue anyGenerator assert assertionFailure bridgeFromObjectiveC bridgeFromObjectiveCUnconditional bridgeToObjectiveC bridgeToObjectiveCUnconditional c compactMap contains count countElements countLeadingZeros debugPrint debugPrintln distance dropFirst dropLast dump encodeBitsAsWords enumerate equal fatalError filter find getBridgedObjectiveCType getVaList indices insertionSort isBridgedToObjectiveC isBridgedVerbatimToObjectiveC isUniquelyReferenced isUniquelyReferencedNonObjC join lazy lexicographicalCompare map max maxElement min minElement numericCast overlaps partition posix precondition preconditionFailure print println quickSort readLine reduce reflect reinterpretCast reverse roundUpToAlignment sizeof sizeofValue sort split startsWith stride strideof strideofValue swap toString transcode underestimateCount unsafeAddressOf unsafeBitCast unsafeDowncast unsafeUnwrap unsafeReflect withExtendedLifetime withObjectAtPlusZero withUnsafePointer withUnsafePointerToObject withUnsafeMutablePointer withUnsafeMutablePointers withUnsafePointer withUnsafePointers withVaList zip"},n=e.COMMENT("/\\*","\\*/",{contains:["self"]}),t={className:"subst",begin:/\\\(/,end:"\\)",keywords:i,contains:[]},a={className:"string",contains:[e.BACKSLASH_ESCAPE,t],variants:[{begin:/"""/,end:/"""/},{begin:/"/,end:/"/}]},r={className:"number",begin:"\\b([\\d_]+(\\.[\\deE_]+)?|0x[a-fA-F0-9_]+(\\.[a-fA-F0-9p_]+)?|0b[01_]+|0o[0-7_]+)\\b",relevance:0};return t.contains=[r],{name:"Swift",keywords:i,contains:[a,e.C_LINE_COMMENT_MODE,n,{className:"type",begin:"\\b[A-Z][\\wÀ-ʸ']*[!?]"},{className:"type",begin:"\\b[A-Z][\\wÀ-ʸ']*",relevance:0},r,{className:"function",beginKeywords:"func",end:"{",excludeEnd:!0,contains:[e.inherit(e.TITLE_MODE,{begin:/[A-Za-z$_][0-9A-Za-z$_]*/}),{begin://},{className:"params",begin:/\(/,end:/\)/,endsParent:!0,keywords:i,contains:["self",r,a,e.C_BLOCK_COMMENT_MODE,{begin:":"}],illegal:/["']/}],illegal:/\[|%/},{className:"class",beginKeywords:"struct protocol class extension enum",keywords:i,end:"\\{",excludeEnd:!0,contains:[e.inherit(e.TITLE_MODE,{begin:/[A-Za-z$_][\u00C0-\u02B80-9A-Za-z$_]*/})]},{className:"meta",begin:"(@discardableResult|@warn_unused_result|@exported|@lazy|@noescape|@NSCopying|@NSManaged|@objc|@objcMembers|@convention|@required|@noreturn|@IBAction|@IBDesignable|@IBInspectable|@IBOutlet|@infix|@prefix|@postfix|@autoclosure|@testable|@available|@nonobjc|@NSApplicationMain|@UIApplicationMain|@dynamicMemberLookup|@propertyWrapper)\\b"},{beginKeywords:"import",end:/$/,contains:[e.C_LINE_COMMENT_MODE,n]}]}}}()); +hljs.registerLanguage("typescript",function(){"use strict";const e=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"],n=["true","false","null","undefined","NaN","Infinity"],a=[].concat(["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],["arguments","this","super","console","window","document","localStorage","module","global"],["Intl","DataView","Number","Math","Date","String","RegExp","Object","Function","Boolean","Error","Symbol","Set","Map","WeakSet","WeakMap","Proxy","Reflect","JSON","Promise","Float64Array","Int16Array","Int32Array","Int8Array","Uint16Array","Uint32Array","Float32Array","Array","Uint8Array","Uint8ClampedArray","ArrayBuffer"],["EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"]);return function(r){var t={$pattern:"[A-Za-z$_][0-9A-Za-z$_]*",keyword:e.concat(["type","namespace","typedef","interface","public","private","protected","implements","declare","abstract","readonly"]).join(" "),literal:n.join(" "),built_in:a.concat(["any","void","number","boolean","string","object","never","enum"]).join(" ")},s={className:"meta",begin:"@[A-Za-z$_][0-9A-Za-z$_]*"},i={className:"number",variants:[{begin:"\\b(0[bB][01]+)n?"},{begin:"\\b(0[oO][0-7]+)n?"},{begin:r.C_NUMBER_RE+"n?"}],relevance:0},o={className:"subst",begin:"\\$\\{",end:"\\}",keywords:t,contains:[]},c={begin:"html`",end:"",starts:{end:"`",returnEnd:!1,contains:[r.BACKSLASH_ESCAPE,o],subLanguage:"xml"}},l={begin:"css`",end:"",starts:{end:"`",returnEnd:!1,contains:[r.BACKSLASH_ESCAPE,o],subLanguage:"css"}},E={className:"string",begin:"`",end:"`",contains:[r.BACKSLASH_ESCAPE,o]};o.contains=[r.APOS_STRING_MODE,r.QUOTE_STRING_MODE,c,l,E,i,r.REGEXP_MODE];var d={begin:"\\(",end:/\)/,keywords:t,contains:["self",r.QUOTE_STRING_MODE,r.APOS_STRING_MODE,r.NUMBER_MODE]},u={className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:t,contains:[r.C_LINE_COMMENT_MODE,r.C_BLOCK_COMMENT_MODE,s,d]};return{name:"TypeScript",aliases:["ts"],keywords:t,contains:[r.SHEBANG(),{className:"meta",begin:/^\s*['"]use strict['"]/},r.APOS_STRING_MODE,r.QUOTE_STRING_MODE,c,l,E,r.C_LINE_COMMENT_MODE,r.C_BLOCK_COMMENT_MODE,i,{begin:"("+r.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",contains:[r.C_LINE_COMMENT_MODE,r.C_BLOCK_COMMENT_MODE,r.REGEXP_MODE,{className:"function",begin:"(\\([^(]*(\\([^(]*(\\([^(]*\\))?\\))?\\)|"+r.UNDERSCORE_IDENT_RE+")\\s*=>",returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:r.UNDERSCORE_IDENT_RE},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:t,contains:d.contains}]}]}],relevance:0},{className:"function",beginKeywords:"function",end:/[\{;]/,excludeEnd:!0,keywords:t,contains:["self",r.inherit(r.TITLE_MODE,{begin:"[A-Za-z$_][0-9A-Za-z$_]*"}),u],illegal:/%/,relevance:0},{beginKeywords:"constructor",end:/[\{;]/,excludeEnd:!0,contains:["self",u]},{begin:/module\./,keywords:{built_in:"module"},relevance:0},{beginKeywords:"module",end:/\{/,excludeEnd:!0},{beginKeywords:"interface",end:/\{/,excludeEnd:!0,keywords:"interface extends"},{begin:/\$[(.]/},{begin:"\\."+r.IDENT_RE,relevance:0},s,d]}}}()); +hljs.registerLanguage("yaml",function(){"use strict";return function(e){var n="true false yes no null",a="[\\w#;/?:@&=+$,.~*\\'()[\\]]+",s={className:"string",relevance:0,variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/\S+/}],contains:[e.BACKSLASH_ESCAPE,{className:"template-variable",variants:[{begin:"{{",end:"}}"},{begin:"%{",end:"}"}]}]},i=e.inherit(s,{variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/[^\s,{}[\]]+/}]}),l={end:",",endsWithParent:!0,excludeEnd:!0,contains:[],keywords:n,relevance:0},t={begin:"{",end:"}",contains:[l],illegal:"\\n",relevance:0},g={begin:"\\[",end:"\\]",contains:[l],illegal:"\\n",relevance:0},b=[{className:"attr",variants:[{begin:"\\w[\\w :\\/.-]*:(?=[ \t]|$)"},{begin:'"\\w[\\w :\\/.-]*":(?=[ \t]|$)'},{begin:"'\\w[\\w :\\/.-]*':(?=[ \t]|$)"}]},{className:"meta",begin:"^---s*$",relevance:10},{className:"string",begin:"[\\|>]([0-9]?[+-])?[ ]*\\n( *)[\\S ]+\\n(\\2[\\S ]+\\n?)*"},{begin:"<%[%=-]?",end:"[%-]?%>",subLanguage:"ruby",excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:"!\\w+!"+a},{className:"type",begin:"!<"+a+">"},{className:"type",begin:"!"+a},{className:"type",begin:"!!"+a},{className:"meta",begin:"&"+e.UNDERSCORE_IDENT_RE+"$"},{className:"meta",begin:"\\*"+e.UNDERSCORE_IDENT_RE+"$"},{className:"bullet",begin:"\\-(?=[ ]|$)",relevance:0},e.HASH_COMMENT_MODE,{beginKeywords:n,keywords:{literal:n}},{className:"number",begin:"\\b[0-9]{4}(-[0-9][0-9]){0,2}([Tt \\t][0-9][0-9]?(:[0-9][0-9]){2})?(\\.[0-9]*)?([ \\t])*(Z|[-+][0-9][0-9]?(:[0-9][0-9])?)?\\b"},{className:"number",begin:e.C_NUMBER_RE+"\\b"},t,g,s],c=[...b];return c.pop(),c.push(i),l.contains=c,{name:"YAML",case_insensitive:!0,aliases:["yml","YAML"],contains:b}}}()); +hljs.registerLanguage("armasm",function(){"use strict";return function(s){const e={variants:[s.COMMENT("^[ \\t]*(?=#)","$",{relevance:0,excludeBegin:!0}),s.COMMENT("[;@]","$",{relevance:0}),s.C_LINE_COMMENT_MODE,s.C_BLOCK_COMMENT_MODE]};return{name:"ARM Assembly",case_insensitive:!0,aliases:["arm"],keywords:{$pattern:"\\.?"+s.IDENT_RE,meta:".2byte .4byte .align .ascii .asciz .balign .byte .code .data .else .end .endif .endm .endr .equ .err .exitm .extern .global .hword .if .ifdef .ifndef .include .irp .long .macro .rept .req .section .set .skip .space .text .word .arm .thumb .code16 .code32 .force_thumb .thumb_func .ltorg ALIAS ALIGN ARM AREA ASSERT ATTR CN CODE CODE16 CODE32 COMMON CP DATA DCB DCD DCDU DCDO DCFD DCFDU DCI DCQ DCQU DCW DCWU DN ELIF ELSE END ENDFUNC ENDIF ENDP ENTRY EQU EXPORT EXPORTAS EXTERN FIELD FILL FUNCTION GBLA GBLL GBLS GET GLOBAL IF IMPORT INCBIN INCLUDE INFO KEEP LCLA LCLL LCLS LTORG MACRO MAP MEND MEXIT NOFP OPT PRESERVE8 PROC QN READONLY RELOC REQUIRE REQUIRE8 RLIST FN ROUT SETA SETL SETS SN SPACE SUBT THUMB THUMBX TTL WHILE WEND ",built_in:"r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 pc lr sp ip sl sb fp a1 a2 a3 a4 v1 v2 v3 v4 v5 v6 v7 v8 f0 f1 f2 f3 f4 f5 f6 f7 p0 p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14 p15 c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 q0 q1 q2 q3 q4 q5 q6 q7 q8 q9 q10 q11 q12 q13 q14 q15 cpsr_c cpsr_x cpsr_s cpsr_f cpsr_cx cpsr_cxs cpsr_xs cpsr_xsf cpsr_sf cpsr_cxsf spsr_c spsr_x spsr_s spsr_f spsr_cx spsr_cxs spsr_xs spsr_xsf spsr_sf spsr_cxsf s0 s1 s2 s3 s4 s5 s6 s7 s8 s9 s10 s11 s12 s13 s14 s15 s16 s17 s18 s19 s20 s21 s22 s23 s24 s25 s26 s27 s28 s29 s30 s31 d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 d10 d11 d12 d13 d14 d15 d16 d17 d18 d19 d20 d21 d22 d23 d24 d25 d26 d27 d28 d29 d30 d31 {PC} {VAR} {TRUE} {FALSE} {OPT} {CONFIG} {ENDIAN} {CODESIZE} {CPU} {FPU} {ARCHITECTURE} {PCSTOREOFFSET} {ARMASM_VERSION} {INTER} {ROPI} {RWPI} {SWST} {NOSWST} . @"},contains:[{className:"keyword",begin:"\\b(adc|(qd?|sh?|u[qh]?)?add(8|16)?|usada?8|(q|sh?|u[qh]?)?(as|sa)x|and|adrl?|sbc|rs[bc]|asr|b[lx]?|blx|bxj|cbn?z|tb[bh]|bic|bfc|bfi|[su]bfx|bkpt|cdp2?|clz|clrex|cmp|cmn|cpsi[ed]|cps|setend|dbg|dmb|dsb|eor|isb|it[te]{0,3}|lsl|lsr|ror|rrx|ldm(([id][ab])|f[ds])?|ldr((s|ex)?[bhd])?|movt?|mvn|mra|mar|mul|[us]mull|smul[bwt][bt]|smu[as]d|smmul|smmla|mla|umlaal|smlal?([wbt][bt]|d)|mls|smlsl?[ds]|smc|svc|sev|mia([bt]{2}|ph)?|mrr?c2?|mcrr2?|mrs|msr|orr|orn|pkh(tb|bt)|rbit|rev(16|sh)?|sel|[su]sat(16)?|nop|pop|push|rfe([id][ab])?|stm([id][ab])?|str(ex)?[bhd]?|(qd?)?sub|(sh?|q|u[qh]?)?sub(8|16)|[su]xt(a?h|a?b(16)?)|srs([id][ab])?|swpb?|swi|smi|tst|teq|wfe|wfi|yield)(eq|ne|cs|cc|mi|pl|vs|vc|hi|ls|ge|lt|gt|le|al|hs|lo)?[sptrx]?(?=\\s)"},e,s.QUOTE_STRING_MODE,{className:"string",begin:"'",end:"[^\\\\]'",relevance:0},{className:"title",begin:"\\|",end:"\\|",illegal:"\\n",relevance:0},{className:"number",variants:[{begin:"[#$=]?0x[0-9a-f]+"},{begin:"[#$=]?0b[01]+"},{begin:"[#$=]\\d+"},{begin:"\\b\\d+"}],relevance:0},{className:"symbol",variants:[{begin:"^[ \\t]*[a-z_\\.\\$][a-z0-9_\\.\\$]+:"},{begin:"^[a-z_\\.\\$][a-z0-9_\\.\\$]+"},{begin:"[=#]\\w+"}],relevance:0}]}}}()); +hljs.registerLanguage("d",function(){"use strict";return function(e){var a={$pattern:e.UNDERSCORE_IDENT_RE,keyword:"abstract alias align asm assert auto body break byte case cast catch class const continue debug default delete deprecated do else enum export extern final finally for foreach foreach_reverse|10 goto if immutable import in inout int interface invariant is lazy macro mixin module new nothrow out override package pragma private protected public pure ref return scope shared static struct super switch synchronized template this throw try typedef typeid typeof union unittest version void volatile while with __FILE__ __LINE__ __gshared|10 __thread __traits __DATE__ __EOF__ __TIME__ __TIMESTAMP__ __VENDOR__ __VERSION__",built_in:"bool cdouble cent cfloat char creal dchar delegate double dstring float function idouble ifloat ireal long real short string ubyte ucent uint ulong ushort wchar wstring",literal:"false null true"},d="((0|[1-9][\\d_]*)|0[bB][01_]+|0[xX]([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*))",n="\\\\(['\"\\?\\\\abfnrtv]|u[\\dA-Fa-f]{4}|[0-7]{1,3}|x[\\dA-Fa-f]{2}|U[\\dA-Fa-f]{8})|&[a-zA-Z\\d]{2,};",t={className:"number",begin:"\\b"+d+"(L|u|U|Lu|LU|uL|UL)?",relevance:0},_={className:"number",begin:"\\b(((0[xX](([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*)\\.([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*)|\\.?([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*))[pP][+-]?(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d))|((0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d)(\\.\\d*|([eE][+-]?(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d)))|\\d+\\.(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d)(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d)|\\.(0|[1-9][\\d_]*)([eE][+-]?(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d))?))([fF]|L|i|[fF]i|Li)?|"+d+"(i|[fF]i|Li))",relevance:0},r={className:"string",begin:"'("+n+"|.)",end:"'",illegal:"."},i={className:"string",begin:'"',contains:[{begin:n,relevance:0}],end:'"[cwd]?'},s=e.COMMENT("\\/\\+","\\+\\/",{contains:["self"],relevance:10});return{name:"D",keywords:a,contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,s,{className:"string",begin:'x"[\\da-fA-F\\s\\n\\r]*"[cwd]?',relevance:10},i,{className:"string",begin:'[rq]"',end:'"[cwd]?',relevance:5},{className:"string",begin:"`",end:"`[cwd]?"},{className:"string",begin:'q"\\{',end:'\\}"'},_,t,r,{className:"meta",begin:"^#!",end:"$",relevance:5},{className:"meta",begin:"#(line)",end:"$",relevance:5},{className:"keyword",begin:"@[a-zA-Z_][a-zA-Z_\\d]*"}]}}}()); +hljs.registerLanguage("handlebars",function(){"use strict";function e(...e){return e.map(e=>(function(e){return e?"string"==typeof e?e:e.source:null})(e)).join("")}return function(n){const a={"builtin-name":"action bindattr collection component concat debugger each each-in get hash if in input link-to loc log lookup mut outlet partial query-params render template textarea unbound unless view with yield"},t=/\[.*?\]/,s=/[^\s!"#%&'()*+,.\/;<=>@\[\\\]^`{|}~]+/,i=e("(",/'.*?'/,"|",/".*?"/,"|",t,"|",s,"|",/\.|\//,")+"),r=e("(",t,"|",s,")(?==)"),l={begin:i,lexemes:/[\w.\/]+/},c=n.inherit(l,{keywords:{literal:"true false undefined null"}}),o={begin:/\(/,end:/\)/},m={className:"attr",begin:r,relevance:0,starts:{begin:/=/,end:/=/,starts:{contains:[n.NUMBER_MODE,n.QUOTE_STRING_MODE,n.APOS_STRING_MODE,c,o]}}},d={contains:[n.NUMBER_MODE,n.QUOTE_STRING_MODE,n.APOS_STRING_MODE,{begin:/as\s+\|/,keywords:{keyword:"as"},end:/\|/,contains:[{begin:/\w+/}]},m,c,o],returnEnd:!0},g=n.inherit(l,{className:"name",keywords:a,starts:n.inherit(d,{end:/\)/})});o.contains=[g];const u=n.inherit(l,{keywords:a,className:"name",starts:n.inherit(d,{end:/}}/})}),b=n.inherit(l,{keywords:a,className:"name"}),h=n.inherit(l,{className:"name",keywords:a,starts:n.inherit(d,{end:/}}/})});return{name:"Handlebars",aliases:["hbs","html.hbs","html.handlebars","htmlbars"],case_insensitive:!0,subLanguage:"xml",contains:[{begin:/\\\{\{/,skip:!0},{begin:/\\\\(?=\{\{)/,skip:!0},n.COMMENT(/\{\{!--/,/--\}\}/),n.COMMENT(/\{\{!/,/\}\}/),{className:"template-tag",begin:/\{\{\{\{(?!\/)/,end:/\}\}\}\}/,contains:[u],starts:{end:/\{\{\{\{\//,returnEnd:!0,subLanguage:"xml"}},{className:"template-tag",begin:/\{\{\{\{\//,end:/\}\}\}\}/,contains:[b]},{className:"template-tag",begin:/\{\{#/,end:/\}\}/,contains:[u]},{className:"template-tag",begin:/\{\{(?=else\}\})/,end:/\}\}/,keywords:"else"},{className:"template-tag",begin:/\{\{\//,end:/\}\}/,contains:[b]},{className:"template-variable",begin:/\{\{\{/,end:/\}\}\}/,contains:[h]},{className:"template-variable",begin:/\{\{/,end:/\}\}/,contains:[h]}]}}}()); +hljs.registerLanguage("haskell",function(){"use strict";return function(e){var n={variants:[e.COMMENT("--","$"),e.COMMENT("{-","-}",{contains:["self"]})]},i={className:"meta",begin:"{-#",end:"#-}"},a={className:"meta",begin:"^#",end:"$"},s={className:"type",begin:"\\b[A-Z][\\w']*",relevance:0},l={begin:"\\(",end:"\\)",illegal:'"',contains:[i,a,{className:"type",begin:"\\b[A-Z][\\w]*(\\((\\.\\.|,|\\w+)\\))?"},e.inherit(e.TITLE_MODE,{begin:"[_a-z][\\w']*"}),n]};return{name:"Haskell",aliases:["hs"],keywords:"let in if then else case of where do module import hiding qualified type data newtype deriving class instance as default infix infixl infixr foreign export ccall stdcall cplusplus jvm dotnet safe unsafe family forall mdo proc rec",contains:[{beginKeywords:"module",end:"where",keywords:"module where",contains:[l,n],illegal:"\\W\\.|;"},{begin:"\\bimport\\b",end:"$",keywords:"import qualified as hiding",contains:[l,n],illegal:"\\W\\.|;"},{className:"class",begin:"^(\\s*)?(class|instance)\\b",end:"where",keywords:"class family instance where",contains:[s,l,n]},{className:"class",begin:"\\b(data|(new)?type)\\b",end:"$",keywords:"data family type newtype deriving",contains:[i,s,l,{begin:"{",end:"}",contains:l.contains},n]},{beginKeywords:"default",end:"$",contains:[s,l,n]},{beginKeywords:"infix infixl infixr",end:"$",contains:[e.C_NUMBER_MODE,n]},{begin:"\\bforeign\\b",end:"$",keywords:"foreign import export ccall stdcall cplusplus jvm dotnet safe unsafe",contains:[s,e.QUOTE_STRING_MODE,n]},{className:"meta",begin:"#!\\/usr\\/bin\\/env runhaskell",end:"$"},i,a,e.QUOTE_STRING_MODE,e.C_NUMBER_MODE,s,e.inherit(e.TITLE_MODE,{begin:"^[_a-z][\\w']*"}),n,{begin:"->|<-"}]}}}()); +hljs.registerLanguage("julia",function(){"use strict";return function(e){var r="[A-Za-z_\\u00A1-\\uFFFF][A-Za-z_0-9\\u00A1-\\uFFFF]*",t={$pattern:r,keyword:"in isa where baremodule begin break catch ccall const continue do else elseif end export false finally for function global if import importall let local macro module quote return true try using while type immutable abstract bitstype typealias ",literal:"true false ARGS C_NULL DevNull ENDIAN_BOM ENV I Inf Inf16 Inf32 Inf64 InsertionSort JULIA_HOME LOAD_PATH MergeSort NaN NaN16 NaN32 NaN64 PROGRAM_FILE QuickSort RoundDown RoundFromZero RoundNearest RoundNearestTiesAway RoundNearestTiesUp RoundToZero RoundUp STDERR STDIN STDOUT VERSION catalan e|0 eu|0 eulergamma golden im nothing pi γ π φ ",built_in:"ANY AbstractArray AbstractChannel AbstractFloat AbstractMatrix AbstractRNG AbstractSerializer AbstractSet AbstractSparseArray AbstractSparseMatrix AbstractSparseVector AbstractString AbstractUnitRange AbstractVecOrMat AbstractVector Any ArgumentError Array AssertionError Associative Base64DecodePipe Base64EncodePipe Bidiagonal BigFloat BigInt BitArray BitMatrix BitVector Bool BoundsError BufferStream CachingPool CapturedException CartesianIndex CartesianRange Cchar Cdouble Cfloat Channel Char Cint Cintmax_t Clong Clonglong ClusterManager Cmd CodeInfo Colon Complex Complex128 Complex32 Complex64 CompositeException Condition ConjArray ConjMatrix ConjVector Cptrdiff_t Cshort Csize_t Cssize_t Cstring Cuchar Cuint Cuintmax_t Culong Culonglong Cushort Cwchar_t Cwstring DataType Date DateFormat DateTime DenseArray DenseMatrix DenseVecOrMat DenseVector Diagonal Dict DimensionMismatch Dims DirectIndexString Display DivideError DomainError EOFError EachLine Enum Enumerate ErrorException Exception ExponentialBackOff Expr Factorization FileMonitor Float16 Float32 Float64 Function Future GlobalRef GotoNode HTML Hermitian IO IOBuffer IOContext IOStream IPAddr IPv4 IPv6 IndexCartesian IndexLinear IndexStyle InexactError InitError Int Int128 Int16 Int32 Int64 Int8 IntSet Integer InterruptException InvalidStateException Irrational KeyError LabelNode LinSpace LineNumberNode LoadError LowerTriangular MIME Matrix MersenneTwister Method MethodError MethodTable Module NTuple NewvarNode NullException Nullable Number ObjectIdDict OrdinalRange OutOfMemoryError OverflowError Pair ParseError PartialQuickSort PermutedDimsArray Pipe PollingFileWatcher ProcessExitedException Ptr QuoteNode RandomDevice Range RangeIndex Rational RawFD ReadOnlyMemoryError Real ReentrantLock Ref Regex RegexMatch RemoteChannel RemoteException RevString RoundingMode RowVector SSAValue SegmentationFault SerializationState Set SharedArray SharedMatrix SharedVector Signed SimpleVector Slot SlotNumber SparseMatrixCSC SparseVector StackFrame StackOverflowError StackTrace StepRange StepRangeLen StridedArray StridedMatrix StridedVecOrMat StridedVector String SubArray SubString SymTridiagonal Symbol Symmetric SystemError TCPSocket Task Text TextDisplay Timer Tridiagonal Tuple Type TypeError TypeMapEntry TypeMapLevel TypeName TypeVar TypedSlot UDPSocket UInt UInt128 UInt16 UInt32 UInt64 UInt8 UndefRefError UndefVarError UnicodeError UniformScaling Union UnionAll UnitRange Unsigned UpperTriangular Val Vararg VecElement VecOrMat Vector VersionNumber Void WeakKeyDict WeakRef WorkerConfig WorkerPool "},a={keywords:t,illegal:/<\//},n={className:"subst",begin:/\$\(/,end:/\)/,keywords:t},o={className:"variable",begin:"\\$"+r},i={className:"string",contains:[e.BACKSLASH_ESCAPE,n,o],variants:[{begin:/\w*"""/,end:/"""\w*/,relevance:10},{begin:/\w*"/,end:/"\w*/}]},l={className:"string",contains:[e.BACKSLASH_ESCAPE,n,o],begin:"`",end:"`"},s={className:"meta",begin:"@"+r};return a.name="Julia",a.contains=[{className:"number",begin:/(\b0x[\d_]*(\.[\d_]*)?|0x\.\d[\d_]*)p[-+]?\d+|\b0[box][a-fA-F0-9][a-fA-F0-9_]*|(\b\d[\d_]*(\.[\d_]*)?|\.\d[\d_]*)([eEfF][-+]?\d+)?/,relevance:0},{className:"string",begin:/'(.|\\[xXuU][a-zA-Z0-9]+)'/},i,l,s,{className:"comment",variants:[{begin:"#=",end:"=#",relevance:10},{begin:"#",end:"$"}]},e.HASH_COMMENT_MODE,{className:"keyword",begin:"\\b(((abstract|primitive)\\s+)type|(mutable\\s+)?struct)\\b"},{begin:/<:/}],n.contains=a.contains,a}}()); +hljs.registerLanguage("nim",function(){"use strict";return function(e){return{name:"Nim",aliases:["nim"],keywords:{keyword:"addr and as asm bind block break case cast const continue converter discard distinct div do elif else end enum except export finally for from func generic if import in include interface is isnot iterator let macro method mixin mod nil not notin object of or out proc ptr raise ref return shl shr static template try tuple type using var when while with without xor yield",literal:"shared guarded stdin stdout stderr result true false",built_in:"int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64 float float32 float64 bool char string cstring pointer expr stmt void auto any range array openarray varargs seq set clong culong cchar cschar cshort cint csize clonglong cfloat cdouble clongdouble cuchar cushort cuint culonglong cstringarray semistatic"},contains:[{className:"meta",begin:/{\./,end:/\.}/,relevance:10},{className:"string",begin:/[a-zA-Z]\w*"/,end:/"/,contains:[{begin:/""/}]},{className:"string",begin:/([a-zA-Z]\w*)?"""/,end:/"""/},e.QUOTE_STRING_MODE,{className:"type",begin:/\b[A-Z]\w+\b/,relevance:0},{className:"number",relevance:0,variants:[{begin:/\b(0[xX][0-9a-fA-F][_0-9a-fA-F]*)('?[iIuU](8|16|32|64))?/},{begin:/\b(0o[0-7][_0-7]*)('?[iIuUfF](8|16|32|64))?/},{begin:/\b(0(b|B)[01][_01]*)('?[iIuUfF](8|16|32|64))?/},{begin:/\b(\d[_\d]*)('?[iIuUfF](8|16|32|64))?/}]},e.HASH_COMMENT_MODE]}}}()); +hljs.registerLanguage("nix",function(){"use strict";return function(e){var n={keyword:"rec with let in inherit assert if else then",literal:"true false or and null",built_in:"import abort baseNameOf dirOf isNull builtins map removeAttrs throw toString derivation"},i={className:"subst",begin:/\$\{/,end:/}/,keywords:n},t={className:"string",contains:[i],variants:[{begin:"''",end:"''"},{begin:'"',end:'"'}]},s=[e.NUMBER_MODE,e.HASH_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,t,{begin:/[a-zA-Z0-9-_]+(\s*=)/,returnBegin:!0,relevance:0,contains:[{className:"attr",begin:/\S+/}]}];return i.contains=s,{name:"Nix",aliases:["nixos"],keywords:n,contains:s}}}()); +hljs.registerLanguage("r",function(){"use strict";return function(e){var n="([a-zA-Z]|\\.[a-zA-Z.])[a-zA-Z0-9._]*";return{name:"R",contains:[e.HASH_COMMENT_MODE,{begin:n,keywords:{$pattern:n,keyword:"function if in break next repeat else for return switch while try tryCatch stop warning require library attach detach source setMethod setGeneric setGroupGeneric setClass ...",literal:"NULL NA TRUE FALSE T F Inf NaN NA_integer_|10 NA_real_|10 NA_character_|10 NA_complex_|10"},relevance:0},{className:"number",begin:"0[xX][0-9a-fA-F]+[Li]?\\b",relevance:0},{className:"number",begin:"\\d+(?:[eE][+\\-]?\\d*)?L\\b",relevance:0},{className:"number",begin:"\\d+\\.(?!\\d)(?:i\\b)?",relevance:0},{className:"number",begin:"\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d*)?i?\\b",relevance:0},{className:"number",begin:"\\.\\d+(?:[eE][+\\-]?\\d*)?i?\\b",relevance:0},{begin:"`",end:"`",relevance:0},{className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{begin:'"',end:'"'},{begin:"'",end:"'"}]}]}}}()); +hljs.registerLanguage("scala",function(){"use strict";return function(e){var n={className:"subst",variants:[{begin:"\\$[A-Za-z0-9_]+"},{begin:"\\${",end:"}"}]},a={className:"string",variants:[{begin:'"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{begin:'"""',end:'"""',relevance:10},{begin:'[a-z]+"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE,n]},{className:"string",begin:'[a-z]+"""',end:'"""',contains:[n],relevance:10}]},s={className:"type",begin:"\\b[A-Z][A-Za-z0-9_]*",relevance:0},t={className:"title",begin:/[^0-9\n\t "'(),.`{}\[\]:;][^\n\t "'(),.`{}\[\]:;]+|[^0-9\n\t "'(),.`{}\[\]:;=]/,relevance:0},i={className:"class",beginKeywords:"class object trait type",end:/[:={\[\n;]/,excludeEnd:!0,contains:[{beginKeywords:"extends with",relevance:10},{begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0,relevance:0,contains:[s]},{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,relevance:0,contains:[s]},t]},l={className:"function",beginKeywords:"def",end:/[:={\[(\n;]/,excludeEnd:!0,contains:[t]};return{name:"Scala",keywords:{literal:"true false null",keyword:"type yield lazy override def with val var sealed abstract private trait object if forSome for while throw finally protected extends import final return else break new catch super class case package default try this match continue throws implicit"},contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,a,{className:"symbol",begin:"'\\w[\\w\\d_]*(?!')"},s,l,i,e.C_NUMBER_MODE,{className:"meta",begin:"@[A-Za-z]+"}]}}}()); +hljs.registerLanguage("x86asm",function(){"use strict";return function(s){return{name:"Intel x86 Assembly",case_insensitive:!0,keywords:{$pattern:"[.%]?"+s.IDENT_RE,keyword:"lock rep repe repz repne repnz xaquire xrelease bnd nobnd aaa aad aam aas adc add and arpl bb0_reset bb1_reset bound bsf bsr bswap bt btc btr bts call cbw cdq cdqe clc cld cli clts cmc cmp cmpsb cmpsd cmpsq cmpsw cmpxchg cmpxchg486 cmpxchg8b cmpxchg16b cpuid cpu_read cpu_write cqo cwd cwde daa das dec div dmint emms enter equ f2xm1 fabs fadd faddp fbld fbstp fchs fclex fcmovb fcmovbe fcmove fcmovnb fcmovnbe fcmovne fcmovnu fcmovu fcom fcomi fcomip fcomp fcompp fcos fdecstp fdisi fdiv fdivp fdivr fdivrp femms feni ffree ffreep fiadd ficom ficomp fidiv fidivr fild fimul fincstp finit fist fistp fisttp fisub fisubr fld fld1 fldcw fldenv fldl2e fldl2t fldlg2 fldln2 fldpi fldz fmul fmulp fnclex fndisi fneni fninit fnop fnsave fnstcw fnstenv fnstsw fpatan fprem fprem1 fptan frndint frstor fsave fscale fsetpm fsin fsincos fsqrt fst fstcw fstenv fstp fstsw fsub fsubp fsubr fsubrp ftst fucom fucomi fucomip fucomp fucompp fxam fxch fxtract fyl2x fyl2xp1 hlt ibts icebp idiv imul in inc incbin insb insd insw int int01 int1 int03 int3 into invd invpcid invlpg invlpga iret iretd iretq iretw jcxz jecxz jrcxz jmp jmpe lahf lar lds lea leave les lfence lfs lgdt lgs lidt lldt lmsw loadall loadall286 lodsb lodsd lodsq lodsw loop loope loopne loopnz loopz lsl lss ltr mfence monitor mov movd movq movsb movsd movsq movsw movsx movsxd movzx mul mwait neg nop not or out outsb outsd outsw packssdw packsswb packuswb paddb paddd paddsb paddsiw paddsw paddusb paddusw paddw pand pandn pause paveb pavgusb pcmpeqb pcmpeqd pcmpeqw pcmpgtb pcmpgtd pcmpgtw pdistib pf2id pfacc pfadd pfcmpeq pfcmpge pfcmpgt pfmax pfmin pfmul pfrcp pfrcpit1 pfrcpit2 pfrsqit1 pfrsqrt pfsub pfsubr pi2fd pmachriw pmaddwd pmagw pmulhriw pmulhrwa pmulhrwc pmulhw pmullw pmvgezb pmvlzb pmvnzb pmvzb pop popa popad popaw popf popfd popfq popfw por prefetch prefetchw pslld psllq psllw psrad psraw psrld psrlq psrlw psubb psubd psubsb psubsiw psubsw psubusb psubusw psubw punpckhbw punpckhdq punpckhwd punpcklbw punpckldq punpcklwd push pusha pushad pushaw pushf pushfd pushfq pushfw pxor rcl rcr rdshr rdmsr rdpmc rdtsc rdtscp ret retf retn rol ror rdm rsdc rsldt rsm rsts sahf sal salc sar sbb scasb scasd scasq scasw sfence sgdt shl shld shr shrd sidt sldt skinit smi smint smintold smsw stc std sti stosb stosd stosq stosw str sub svdc svldt svts swapgs syscall sysenter sysexit sysret test ud0 ud1 ud2b ud2 ud2a umov verr verw fwait wbinvd wrshr wrmsr xadd xbts xchg xlatb xlat xor cmove cmovz cmovne cmovnz cmova cmovnbe cmovae cmovnb cmovb cmovnae cmovbe cmovna cmovg cmovnle cmovge cmovnl cmovl cmovnge cmovle cmovng cmovc cmovnc cmovo cmovno cmovs cmovns cmovp cmovpe cmovnp cmovpo je jz jne jnz ja jnbe jae jnb jb jnae jbe jna jg jnle jge jnl jl jnge jle jng jc jnc jo jno js jns jpo jnp jpe jp sete setz setne setnz seta setnbe setae setnb setnc setb setnae setcset setbe setna setg setnle setge setnl setl setnge setle setng sets setns seto setno setpe setp setpo setnp addps addss andnps andps cmpeqps cmpeqss cmpleps cmpless cmpltps cmpltss cmpneqps cmpneqss cmpnleps cmpnless cmpnltps cmpnltss cmpordps cmpordss cmpunordps cmpunordss cmpps cmpss comiss cvtpi2ps cvtps2pi cvtsi2ss cvtss2si cvttps2pi cvttss2si divps divss ldmxcsr maxps maxss minps minss movaps movhps movlhps movlps movhlps movmskps movntps movss movups mulps mulss orps rcpps rcpss rsqrtps rsqrtss shufps sqrtps sqrtss stmxcsr subps subss ucomiss unpckhps unpcklps xorps fxrstor fxrstor64 fxsave fxsave64 xgetbv xsetbv xsave xsave64 xsaveopt xsaveopt64 xrstor xrstor64 prefetchnta prefetcht0 prefetcht1 prefetcht2 maskmovq movntq pavgb pavgw pextrw pinsrw pmaxsw pmaxub pminsw pminub pmovmskb pmulhuw psadbw pshufw pf2iw pfnacc pfpnacc pi2fw pswapd maskmovdqu clflush movntdq movnti movntpd movdqa movdqu movdq2q movq2dq paddq pmuludq pshufd pshufhw pshuflw pslldq psrldq psubq punpckhqdq punpcklqdq addpd addsd andnpd andpd cmpeqpd cmpeqsd cmplepd cmplesd cmpltpd cmpltsd cmpneqpd cmpneqsd cmpnlepd cmpnlesd cmpnltpd cmpnltsd cmpordpd cmpordsd cmpunordpd cmpunordsd cmppd comisd cvtdq2pd cvtdq2ps cvtpd2dq cvtpd2pi cvtpd2ps cvtpi2pd cvtps2dq cvtps2pd cvtsd2si cvtsd2ss cvtsi2sd cvtss2sd cvttpd2pi cvttpd2dq cvttps2dq cvttsd2si divpd divsd maxpd maxsd minpd minsd movapd movhpd movlpd movmskpd movupd mulpd mulsd orpd shufpd sqrtpd sqrtsd subpd subsd ucomisd unpckhpd unpcklpd xorpd addsubpd addsubps haddpd haddps hsubpd hsubps lddqu movddup movshdup movsldup clgi stgi vmcall vmclear vmfunc vmlaunch vmload vmmcall vmptrld vmptrst vmread vmresume vmrun vmsave vmwrite vmxoff vmxon invept invvpid pabsb pabsw pabsd palignr phaddw phaddd phaddsw phsubw phsubd phsubsw pmaddubsw pmulhrsw pshufb psignb psignw psignd extrq insertq movntsd movntss lzcnt blendpd blendps blendvpd blendvps dppd dpps extractps insertps movntdqa mpsadbw packusdw pblendvb pblendw pcmpeqq pextrb pextrd pextrq phminposuw pinsrb pinsrd pinsrq pmaxsb pmaxsd pmaxud pmaxuw pminsb pminsd pminud pminuw pmovsxbw pmovsxbd pmovsxbq pmovsxwd pmovsxwq pmovsxdq pmovzxbw pmovzxbd pmovzxbq pmovzxwd pmovzxwq pmovzxdq pmuldq pmulld ptest roundpd roundps roundsd roundss crc32 pcmpestri pcmpestrm pcmpistri pcmpistrm pcmpgtq popcnt getsec pfrcpv pfrsqrtv movbe aesenc aesenclast aesdec aesdeclast aesimc aeskeygenassist vaesenc vaesenclast vaesdec vaesdeclast vaesimc vaeskeygenassist vaddpd vaddps vaddsd vaddss vaddsubpd vaddsubps vandpd vandps vandnpd vandnps vblendpd vblendps vblendvpd vblendvps vbroadcastss vbroadcastsd vbroadcastf128 vcmpeq_ospd vcmpeqpd vcmplt_ospd vcmpltpd vcmple_ospd vcmplepd vcmpunord_qpd vcmpunordpd vcmpneq_uqpd vcmpneqpd vcmpnlt_uspd vcmpnltpd vcmpnle_uspd vcmpnlepd vcmpord_qpd vcmpordpd vcmpeq_uqpd vcmpnge_uspd vcmpngepd vcmpngt_uspd vcmpngtpd vcmpfalse_oqpd vcmpfalsepd vcmpneq_oqpd vcmpge_ospd vcmpgepd vcmpgt_ospd vcmpgtpd vcmptrue_uqpd vcmptruepd vcmplt_oqpd vcmple_oqpd vcmpunord_spd vcmpneq_uspd vcmpnlt_uqpd vcmpnle_uqpd vcmpord_spd vcmpeq_uspd vcmpnge_uqpd vcmpngt_uqpd vcmpfalse_ospd vcmpneq_ospd vcmpge_oqpd vcmpgt_oqpd vcmptrue_uspd vcmppd vcmpeq_osps vcmpeqps vcmplt_osps vcmpltps vcmple_osps vcmpleps vcmpunord_qps vcmpunordps vcmpneq_uqps vcmpneqps vcmpnlt_usps vcmpnltps vcmpnle_usps vcmpnleps vcmpord_qps vcmpordps vcmpeq_uqps vcmpnge_usps vcmpngeps vcmpngt_usps vcmpngtps vcmpfalse_oqps vcmpfalseps vcmpneq_oqps vcmpge_osps vcmpgeps vcmpgt_osps vcmpgtps vcmptrue_uqps vcmptrueps vcmplt_oqps vcmple_oqps vcmpunord_sps vcmpneq_usps vcmpnlt_uqps vcmpnle_uqps vcmpord_sps vcmpeq_usps vcmpnge_uqps vcmpngt_uqps vcmpfalse_osps vcmpneq_osps vcmpge_oqps vcmpgt_oqps vcmptrue_usps vcmpps vcmpeq_ossd vcmpeqsd vcmplt_ossd vcmpltsd vcmple_ossd vcmplesd vcmpunord_qsd vcmpunordsd vcmpneq_uqsd vcmpneqsd vcmpnlt_ussd vcmpnltsd vcmpnle_ussd vcmpnlesd vcmpord_qsd vcmpordsd vcmpeq_uqsd vcmpnge_ussd vcmpngesd vcmpngt_ussd vcmpngtsd vcmpfalse_oqsd vcmpfalsesd vcmpneq_oqsd vcmpge_ossd vcmpgesd vcmpgt_ossd vcmpgtsd vcmptrue_uqsd vcmptruesd vcmplt_oqsd vcmple_oqsd vcmpunord_ssd vcmpneq_ussd vcmpnlt_uqsd vcmpnle_uqsd vcmpord_ssd vcmpeq_ussd vcmpnge_uqsd vcmpngt_uqsd vcmpfalse_ossd vcmpneq_ossd vcmpge_oqsd vcmpgt_oqsd vcmptrue_ussd vcmpsd vcmpeq_osss vcmpeqss vcmplt_osss vcmpltss vcmple_osss vcmpless vcmpunord_qss vcmpunordss vcmpneq_uqss vcmpneqss vcmpnlt_usss vcmpnltss vcmpnle_usss vcmpnless vcmpord_qss vcmpordss vcmpeq_uqss vcmpnge_usss vcmpngess vcmpngt_usss vcmpngtss vcmpfalse_oqss vcmpfalsess vcmpneq_oqss vcmpge_osss vcmpgess vcmpgt_osss vcmpgtss vcmptrue_uqss vcmptruess vcmplt_oqss vcmple_oqss vcmpunord_sss vcmpneq_usss vcmpnlt_uqss vcmpnle_uqss vcmpord_sss vcmpeq_usss vcmpnge_uqss vcmpngt_uqss vcmpfalse_osss vcmpneq_osss vcmpge_oqss vcmpgt_oqss vcmptrue_usss vcmpss vcomisd vcomiss vcvtdq2pd vcvtdq2ps vcvtpd2dq vcvtpd2ps vcvtps2dq vcvtps2pd vcvtsd2si vcvtsd2ss vcvtsi2sd vcvtsi2ss vcvtss2sd vcvtss2si vcvttpd2dq vcvttps2dq vcvttsd2si vcvttss2si vdivpd vdivps vdivsd vdivss vdppd vdpps vextractf128 vextractps vhaddpd vhaddps vhsubpd vhsubps vinsertf128 vinsertps vlddqu vldqqu vldmxcsr vmaskmovdqu vmaskmovps vmaskmovpd vmaxpd vmaxps vmaxsd vmaxss vminpd vminps vminsd vminss vmovapd vmovaps vmovd vmovq vmovddup vmovdqa vmovqqa vmovdqu vmovqqu vmovhlps vmovhpd vmovhps vmovlhps vmovlpd vmovlps vmovmskpd vmovmskps vmovntdq vmovntqq vmovntdqa vmovntpd vmovntps vmovsd vmovshdup vmovsldup vmovss vmovupd vmovups vmpsadbw vmulpd vmulps vmulsd vmulss vorpd vorps vpabsb vpabsw vpabsd vpacksswb vpackssdw vpackuswb vpackusdw vpaddb vpaddw vpaddd vpaddq vpaddsb vpaddsw vpaddusb vpaddusw vpalignr vpand vpandn vpavgb vpavgw vpblendvb vpblendw vpcmpestri vpcmpestrm vpcmpistri vpcmpistrm vpcmpeqb vpcmpeqw vpcmpeqd vpcmpeqq vpcmpgtb vpcmpgtw vpcmpgtd vpcmpgtq vpermilpd vpermilps vperm2f128 vpextrb vpextrw vpextrd vpextrq vphaddw vphaddd vphaddsw vphminposuw vphsubw vphsubd vphsubsw vpinsrb vpinsrw vpinsrd vpinsrq vpmaddwd vpmaddubsw vpmaxsb vpmaxsw vpmaxsd vpmaxub vpmaxuw vpmaxud vpminsb vpminsw vpminsd vpminub vpminuw vpminud vpmovmskb vpmovsxbw vpmovsxbd vpmovsxbq vpmovsxwd vpmovsxwq vpmovsxdq vpmovzxbw vpmovzxbd vpmovzxbq vpmovzxwd vpmovzxwq vpmovzxdq vpmulhuw vpmulhrsw vpmulhw vpmullw vpmulld vpmuludq vpmuldq vpor vpsadbw vpshufb vpshufd vpshufhw vpshuflw vpsignb vpsignw vpsignd vpslldq vpsrldq vpsllw vpslld vpsllq vpsraw vpsrad vpsrlw vpsrld vpsrlq vptest vpsubb vpsubw vpsubd vpsubq vpsubsb vpsubsw vpsubusb vpsubusw vpunpckhbw vpunpckhwd vpunpckhdq vpunpckhqdq vpunpcklbw vpunpcklwd vpunpckldq vpunpcklqdq vpxor vrcpps vrcpss vrsqrtps vrsqrtss vroundpd vroundps vroundsd vroundss vshufpd vshufps vsqrtpd vsqrtps vsqrtsd vsqrtss vstmxcsr vsubpd vsubps vsubsd vsubss vtestps vtestpd vucomisd vucomiss vunpckhpd vunpckhps vunpcklpd vunpcklps vxorpd vxorps vzeroall vzeroupper pclmullqlqdq pclmulhqlqdq pclmullqhqdq pclmulhqhqdq pclmulqdq vpclmullqlqdq vpclmulhqlqdq vpclmullqhqdq vpclmulhqhqdq vpclmulqdq vfmadd132ps vfmadd132pd vfmadd312ps vfmadd312pd vfmadd213ps vfmadd213pd vfmadd123ps vfmadd123pd vfmadd231ps vfmadd231pd vfmadd321ps vfmadd321pd vfmaddsub132ps vfmaddsub132pd vfmaddsub312ps vfmaddsub312pd vfmaddsub213ps vfmaddsub213pd vfmaddsub123ps vfmaddsub123pd vfmaddsub231ps vfmaddsub231pd vfmaddsub321ps vfmaddsub321pd vfmsub132ps vfmsub132pd vfmsub312ps vfmsub312pd vfmsub213ps vfmsub213pd vfmsub123ps vfmsub123pd vfmsub231ps vfmsub231pd vfmsub321ps vfmsub321pd vfmsubadd132ps vfmsubadd132pd vfmsubadd312ps vfmsubadd312pd vfmsubadd213ps vfmsubadd213pd vfmsubadd123ps vfmsubadd123pd vfmsubadd231ps vfmsubadd231pd vfmsubadd321ps vfmsubadd321pd vfnmadd132ps vfnmadd132pd vfnmadd312ps vfnmadd312pd vfnmadd213ps vfnmadd213pd vfnmadd123ps vfnmadd123pd vfnmadd231ps vfnmadd231pd vfnmadd321ps vfnmadd321pd vfnmsub132ps vfnmsub132pd vfnmsub312ps vfnmsub312pd vfnmsub213ps vfnmsub213pd vfnmsub123ps vfnmsub123pd vfnmsub231ps vfnmsub231pd vfnmsub321ps vfnmsub321pd vfmadd132ss vfmadd132sd vfmadd312ss vfmadd312sd vfmadd213ss vfmadd213sd vfmadd123ss vfmadd123sd vfmadd231ss vfmadd231sd vfmadd321ss vfmadd321sd vfmsub132ss vfmsub132sd vfmsub312ss vfmsub312sd vfmsub213ss vfmsub213sd vfmsub123ss vfmsub123sd vfmsub231ss vfmsub231sd vfmsub321ss vfmsub321sd vfnmadd132ss vfnmadd132sd vfnmadd312ss vfnmadd312sd vfnmadd213ss vfnmadd213sd vfnmadd123ss vfnmadd123sd vfnmadd231ss vfnmadd231sd vfnmadd321ss vfnmadd321sd vfnmsub132ss vfnmsub132sd vfnmsub312ss vfnmsub312sd vfnmsub213ss vfnmsub213sd vfnmsub123ss vfnmsub123sd vfnmsub231ss vfnmsub231sd vfnmsub321ss vfnmsub321sd rdfsbase rdgsbase rdrand wrfsbase wrgsbase vcvtph2ps vcvtps2ph adcx adox rdseed clac stac xstore xcryptecb xcryptcbc xcryptctr xcryptcfb xcryptofb montmul xsha1 xsha256 llwpcb slwpcb lwpval lwpins vfmaddpd vfmaddps vfmaddsd vfmaddss vfmaddsubpd vfmaddsubps vfmsubaddpd vfmsubaddps vfmsubpd vfmsubps vfmsubsd vfmsubss vfnmaddpd vfnmaddps vfnmaddsd vfnmaddss vfnmsubpd vfnmsubps vfnmsubsd vfnmsubss vfrczpd vfrczps vfrczsd vfrczss vpcmov vpcomb vpcomd vpcomq vpcomub vpcomud vpcomuq vpcomuw vpcomw vphaddbd vphaddbq vphaddbw vphadddq vphaddubd vphaddubq vphaddubw vphaddudq vphadduwd vphadduwq vphaddwd vphaddwq vphsubbw vphsubdq vphsubwd vpmacsdd vpmacsdqh vpmacsdql vpmacssdd vpmacssdqh vpmacssdql vpmacsswd vpmacssww vpmacswd vpmacsww vpmadcsswd vpmadcswd vpperm vprotb vprotd vprotq vprotw vpshab vpshad vpshaq vpshaw vpshlb vpshld vpshlq vpshlw vbroadcasti128 vpblendd vpbroadcastb vpbroadcastw vpbroadcastd vpbroadcastq vpermd vpermpd vpermps vpermq vperm2i128 vextracti128 vinserti128 vpmaskmovd vpmaskmovq vpsllvd vpsllvq vpsravd vpsrlvd vpsrlvq vgatherdpd vgatherqpd vgatherdps vgatherqps vpgatherdd vpgatherqd vpgatherdq vpgatherqq xabort xbegin xend xtest andn bextr blci blcic blsi blsic blcfill blsfill blcmsk blsmsk blsr blcs bzhi mulx pdep pext rorx sarx shlx shrx tzcnt tzmsk t1mskc valignd valignq vblendmpd vblendmps vbroadcastf32x4 vbroadcastf64x4 vbroadcasti32x4 vbroadcasti64x4 vcompresspd vcompressps vcvtpd2udq vcvtps2udq vcvtsd2usi vcvtss2usi vcvttpd2udq vcvttps2udq vcvttsd2usi vcvttss2usi vcvtudq2pd vcvtudq2ps vcvtusi2sd vcvtusi2ss vexpandpd vexpandps vextractf32x4 vextractf64x4 vextracti32x4 vextracti64x4 vfixupimmpd vfixupimmps vfixupimmsd vfixupimmss vgetexppd vgetexpps vgetexpsd vgetexpss vgetmantpd vgetmantps vgetmantsd vgetmantss vinsertf32x4 vinsertf64x4 vinserti32x4 vinserti64x4 vmovdqa32 vmovdqa64 vmovdqu32 vmovdqu64 vpabsq vpandd vpandnd vpandnq vpandq vpblendmd vpblendmq vpcmpltd vpcmpled vpcmpneqd vpcmpnltd vpcmpnled vpcmpd vpcmpltq vpcmpleq vpcmpneqq vpcmpnltq vpcmpnleq vpcmpq vpcmpequd vpcmpltud vpcmpleud vpcmpnequd vpcmpnltud vpcmpnleud vpcmpud vpcmpequq vpcmpltuq vpcmpleuq vpcmpnequq vpcmpnltuq vpcmpnleuq vpcmpuq vpcompressd vpcompressq vpermi2d vpermi2pd vpermi2ps vpermi2q vpermt2d vpermt2pd vpermt2ps vpermt2q vpexpandd vpexpandq vpmaxsq vpmaxuq vpminsq vpminuq vpmovdb vpmovdw vpmovqb vpmovqd vpmovqw vpmovsdb vpmovsdw vpmovsqb vpmovsqd vpmovsqw vpmovusdb vpmovusdw vpmovusqb vpmovusqd vpmovusqw vpord vporq vprold vprolq vprolvd vprolvq vprord vprorq vprorvd vprorvq vpscatterdd vpscatterdq vpscatterqd vpscatterqq vpsraq vpsravq vpternlogd vpternlogq vptestmd vptestmq vptestnmd vptestnmq vpxord vpxorq vrcp14pd vrcp14ps vrcp14sd vrcp14ss vrndscalepd vrndscaleps vrndscalesd vrndscaless vrsqrt14pd vrsqrt14ps vrsqrt14sd vrsqrt14ss vscalefpd vscalefps vscalefsd vscalefss vscatterdpd vscatterdps vscatterqpd vscatterqps vshuff32x4 vshuff64x2 vshufi32x4 vshufi64x2 kandnw kandw kmovw knotw kortestw korw kshiftlw kshiftrw kunpckbw kxnorw kxorw vpbroadcastmb2q vpbroadcastmw2d vpconflictd vpconflictq vplzcntd vplzcntq vexp2pd vexp2ps vrcp28pd vrcp28ps vrcp28sd vrcp28ss vrsqrt28pd vrsqrt28ps vrsqrt28sd vrsqrt28ss vgatherpf0dpd vgatherpf0dps vgatherpf0qpd vgatherpf0qps vgatherpf1dpd vgatherpf1dps vgatherpf1qpd vgatherpf1qps vscatterpf0dpd vscatterpf0dps vscatterpf0qpd vscatterpf0qps vscatterpf1dpd vscatterpf1dps vscatterpf1qpd vscatterpf1qps prefetchwt1 bndmk bndcl bndcu bndcn bndmov bndldx bndstx sha1rnds4 sha1nexte sha1msg1 sha1msg2 sha256rnds2 sha256msg1 sha256msg2 hint_nop0 hint_nop1 hint_nop2 hint_nop3 hint_nop4 hint_nop5 hint_nop6 hint_nop7 hint_nop8 hint_nop9 hint_nop10 hint_nop11 hint_nop12 hint_nop13 hint_nop14 hint_nop15 hint_nop16 hint_nop17 hint_nop18 hint_nop19 hint_nop20 hint_nop21 hint_nop22 hint_nop23 hint_nop24 hint_nop25 hint_nop26 hint_nop27 hint_nop28 hint_nop29 hint_nop30 hint_nop31 hint_nop32 hint_nop33 hint_nop34 hint_nop35 hint_nop36 hint_nop37 hint_nop38 hint_nop39 hint_nop40 hint_nop41 hint_nop42 hint_nop43 hint_nop44 hint_nop45 hint_nop46 hint_nop47 hint_nop48 hint_nop49 hint_nop50 hint_nop51 hint_nop52 hint_nop53 hint_nop54 hint_nop55 hint_nop56 hint_nop57 hint_nop58 hint_nop59 hint_nop60 hint_nop61 hint_nop62 hint_nop63",built_in:"ip eip rip al ah bl bh cl ch dl dh sil dil bpl spl r8b r9b r10b r11b r12b r13b r14b r15b ax bx cx dx si di bp sp r8w r9w r10w r11w r12w r13w r14w r15w eax ebx ecx edx esi edi ebp esp eip r8d r9d r10d r11d r12d r13d r14d r15d rax rbx rcx rdx rsi rdi rbp rsp r8 r9 r10 r11 r12 r13 r14 r15 cs ds es fs gs ss st st0 st1 st2 st3 st4 st5 st6 st7 mm0 mm1 mm2 mm3 mm4 mm5 mm6 mm7 xmm0 xmm1 xmm2 xmm3 xmm4 xmm5 xmm6 xmm7 xmm8 xmm9 xmm10 xmm11 xmm12 xmm13 xmm14 xmm15 xmm16 xmm17 xmm18 xmm19 xmm20 xmm21 xmm22 xmm23 xmm24 xmm25 xmm26 xmm27 xmm28 xmm29 xmm30 xmm31 ymm0 ymm1 ymm2 ymm3 ymm4 ymm5 ymm6 ymm7 ymm8 ymm9 ymm10 ymm11 ymm12 ymm13 ymm14 ymm15 ymm16 ymm17 ymm18 ymm19 ymm20 ymm21 ymm22 ymm23 ymm24 ymm25 ymm26 ymm27 ymm28 ymm29 ymm30 ymm31 zmm0 zmm1 zmm2 zmm3 zmm4 zmm5 zmm6 zmm7 zmm8 zmm9 zmm10 zmm11 zmm12 zmm13 zmm14 zmm15 zmm16 zmm17 zmm18 zmm19 zmm20 zmm21 zmm22 zmm23 zmm24 zmm25 zmm26 zmm27 zmm28 zmm29 zmm30 zmm31 k0 k1 k2 k3 k4 k5 k6 k7 bnd0 bnd1 bnd2 bnd3 cr0 cr1 cr2 cr3 cr4 cr8 dr0 dr1 dr2 dr3 dr8 tr3 tr4 tr5 tr6 tr7 r0 r1 r2 r3 r4 r5 r6 r7 r0b r1b r2b r3b r4b r5b r6b r7b r0w r1w r2w r3w r4w r5w r6w r7w r0d r1d r2d r3d r4d r5d r6d r7d r0h r1h r2h r3h r0l r1l r2l r3l r4l r5l r6l r7l r8l r9l r10l r11l r12l r13l r14l r15l db dw dd dq dt ddq do dy dz resb resw resd resq rest resdq reso resy resz incbin equ times byte word dword qword nosplit rel abs seg wrt strict near far a32 ptr",meta:"%define %xdefine %+ %undef %defstr %deftok %assign %strcat %strlen %substr %rotate %elif %else %endif %if %ifmacro %ifctx %ifidn %ifidni %ifid %ifnum %ifstr %iftoken %ifempty %ifenv %error %warning %fatal %rep %endrep %include %push %pop %repl %pathsearch %depend %use %arg %stacksize %local %line %comment %endcomment .nolist __FILE__ __LINE__ __SECT__ __BITS__ __OUTPUT_FORMAT__ __DATE__ __TIME__ __DATE_NUM__ __TIME_NUM__ __UTC_DATE__ __UTC_TIME__ __UTC_DATE_NUM__ __UTC_TIME_NUM__ __PASS__ struc endstruc istruc at iend align alignb sectalign daz nodaz up down zero default option assume public bits use16 use32 use64 default section segment absolute extern global common cpu float __utf16__ __utf16le__ __utf16be__ __utf32__ __utf32le__ __utf32be__ __float8__ __float16__ __float32__ __float64__ __float80m__ __float80e__ __float128l__ __float128h__ __Infinity__ __QNaN__ __SNaN__ Inf NaN QNaN SNaN float8 float16 float32 float64 float80m float80e float128l float128h __FLOAT_DAZ__ __FLOAT_ROUND__ __FLOAT__"},contains:[s.COMMENT(";","$",{relevance:0}),{className:"number",variants:[{begin:"\\b(?:([0-9][0-9_]*)?\\.[0-9_]*(?:[eE][+-]?[0-9_]+)?|(0[Xx])?[0-9][0-9_]*\\.?[0-9_]*(?:[pP](?:[+-]?[0-9_]+)?)?)\\b",relevance:0},{begin:"\\$[0-9][0-9A-Fa-f]*",relevance:0},{begin:"\\b(?:[0-9A-Fa-f][0-9A-Fa-f_]*[Hh]|[0-9][0-9_]*[DdTt]?|[0-7][0-7_]*[QqOo]|[0-1][0-1_]*[BbYy])\\b"},{begin:"\\b(?:0[Xx][0-9A-Fa-f_]+|0[DdTt][0-9_]+|0[QqOo][0-7_]+|0[BbYy][0-1_]+)\\b"}]},s.QUOTE_STRING_MODE,{className:"string",variants:[{begin:"'",end:"[^\\\\]'"},{begin:"`",end:"[^\\\\]`"}],relevance:0},{className:"symbol",variants:[{begin:"^\\s*[A-Za-z._?][A-Za-z0-9_$#@~.?]*(:|\\s+label)"},{begin:"^\\s*%%[A-Za-z0-9_$#@~.?]*:"}],relevance:0},{className:"subst",begin:"%[0-9]+",relevance:0},{className:"subst",begin:"%!S+",relevance:0},{className:"meta",begin:/^\s*\.[\w_-]+/}]}}}()); \ No newline at end of file diff --git a/hir-debugging.html b/hir-debugging.html new file mode 100644 index 000000000..4653a3e4d --- /dev/null +++ b/hir-debugging.html @@ -0,0 +1,228 @@ + + + + + + Debugging - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    HIR Debugging

    +

    Use the -Z unpretty=hir flag to produce a human-readable representation of the HIR. +For cargo projects this can be done with cargo rustc -- -Z unpretty=hir. +This output is useful when you need to see at a glance how your code was desugared and transformed +during AST lowering.

    +

    For a full Debug dump of the data in the HIR, use the -Z unpretty=hir-tree flag. +This may be useful when you need to see the full structure of the HIR from the perspective of the +compiler.

    +

    If you are trying to correlate NodeIds or DefIds with source code, the +-Z unpretty=expanded,identified flag may be useful.

    +

    TODO: anything else? #1159

    + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + + diff --git a/hir.html b/hir.html new file mode 100644 index 000000000..889d2dedd --- /dev/null +++ b/hir.html @@ -0,0 +1,331 @@ + + + + + + The HIR (High-level IR) - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    The HIR

    + +

    The HIR – "High-Level Intermediate Representation" – is the primary IR used +in most of rustc. It is a compiler-friendly representation of the abstract +syntax tree (AST) that is generated after parsing, macro expansion, and name +resolution (see Lowering for how the HIR is created). +Many parts of HIR resemble Rust surface syntax quite closely, with +the exception that some of Rust's expression forms have been desugared away. +For example, for loops are converted into a loop and do not appear in +the HIR. This makes HIR more amenable to analysis than a normal AST.

    +

    This chapter covers the main concepts of the HIR.

    +

    You can view the HIR representation of your code by passing the +-Z unpretty=hir-tree flag to rustc:

    +
    cargo rustc -- -Z unpretty=hir-tree
    +
    +

    You can also use the -Z unpretty=hir option to generate a HIR +that is closer to the original source code expression:

    +
    cargo rustc -- -Z unpretty=hir
    +
    +

    Out-of-band storage and the Crate type

    +

    The top-level data-structure in the HIR is the Crate, which stores +the contents of the crate currently being compiled (we only ever +construct HIR for the current crate). Whereas in the AST the crate +data structure basically just contains the root module, the HIR +Crate structure contains a number of maps and other things that +serve to organize the content of the crate for easier access.

    +

    For example, the contents of individual items (e.g. modules, +functions, traits, impls, etc) in the HIR are not immediately +accessible in the parents. So, for example, if there is a module item +foo containing a function bar():

    +
    #![allow(unused)]
    +fn main() {
    +mod foo {
    +    fn bar() { }
    +}
    +}
    +

    then in the HIR the representation of module foo (the Mod +struct) would only have the ItemId I of bar(). To get the +details of the function bar(), we would lookup I in the +items map.

    +

    One nice result from this representation is that one can iterate +over all items in the crate by iterating over the key-value pairs +in these maps (without the need to trawl through the whole HIR). +There are similar maps for things like trait items and impl items, +as well as "bodies" (explained below).

    +

    The other reason to set up the representation this way is for better +integration with incremental compilation. This way, if you gain access +to an &rustc_hir::Item (e.g. for the mod foo), you do not immediately +gain access to the contents of the function bar(). Instead, you only +gain access to the id for bar(), and you must invoke some +function to lookup the contents of bar() given its id; this gives +the compiler a chance to observe that you accessed the data for +bar(), and then record the dependency.

    +

    +

    Identifiers in the HIR

    +

    The HIR uses a bunch of different identifiers that coexist and serve different purposes.

    +
      +
    • +

      A DefId, as the name suggests, identifies a particular definition, or top-level +item, in a given crate. It is composed of two parts: a CrateNum which identifies +the crate the definition comes from, and a DefIndex which identifies the definition +within the crate. Unlike HirIds, there isn't a DefId for every expression, which +makes them more stable across compilations.

      +
    • +
    • +

      A LocalDefId is basically a DefId that is known to come from the current crate. +This allows us to drop the CrateNum part, and use the type system to ensure that +only local definitions are passed to functions that expect a local definition.

      +
    • +
    • +

      A HirId uniquely identifies a node in the HIR of the current crate. It is composed +of two parts: an owner and a local_id that is unique within the owner. This +combination makes for more stable values which are helpful for incremental compilation. +Unlike DefIds, a HirId can refer to fine-grained entities like expressions, +but stays local to the current crate.

      +
    • +
    • +

      A BodyId identifies a HIR Body in the current crate. It is currently only +a wrapper around a HirId. For more info about HIR bodies, please refer to the +HIR chapter.

      +
    • +
    +

    These identifiers can be converted into one another through the TyCtxt.

    +

    HIR Operations

    +

    Most of the time when you are working with the HIR, you will do so via +TyCtxt. It contains a number of methods, defined in the hir::map module and +mostly prefixed with hir_, to convert between IDs of various kinds and to +lookup data associated with a HIR node.

    +

    For example, if you have a LocalDefId, and you would like to convert it +to a HirId, you can use tcx.local_def_id_to_hir_id(def_id). +You need a LocalDefId, rather than a DefId, since only local items have HIR nodes.

    +

    Similarly, you can use tcx.hir_node(n) to lookup the node for a +HirId. This returns a Option<Node<'hir>>, where Node is an enum +defined in the map. By matching on this, you can find out what sort of +node the HirId referred to and also get a pointer to the data +itself. Often, you know what sort of node n is – e.g. if you know +that n must be some HIR expression, you can do +tcx.hir_expect_expr(n), which will extract and return the +&hir::Expr, panicking if n is not in fact an expression.

    +

    Finally, you can find the parents of nodes, via +calls like tcx.parent_hir_node(n).

    +

    HIR Bodies

    +

    A rustc_hir::Body represents some kind of executable code, such as the body +of a function/closure or the definition of a constant. Bodies are +associated with an owner, which is typically some kind of item +(e.g. an fn() or const), but could also be a closure expression +(e.g. |x, y| x + y). You can use the TyCtxt to find the body +associated with a given def-id (hir_maybe_body_owned_by) or to find +the owner of a body (hir_body_owner_def_id).

    + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + + diff --git a/img/coverage-branch-counting-01.png b/img/coverage-branch-counting-01.png new file mode 100644 index 0000000000000000000000000000000000000000..c445f3552a6594249d57a395a68cdc0609ad7719 GIT binary patch literal 11282 zcmeIYXH-A_x=x-$oULVV7XR@Z#(lW8ZSU`xatkg$htSbx0Dxu#B3zV5D zWX-X}oK7Lr_cwD7@})wWcc!DxB;6Ntq5$p$zqVO~H8G0vu>n0Nt~W6?*&P>2dJRP^ ze}|Hr+DhndTwENWRlL;FecT9Sy@1;o{y920Kezaa3>Rbuu0v+7uKDXcN`asQb5+>?UqE(=dSU>&V2ge)w1?fsi*z3u}C|jA!qAS?%;t z#bALb&QOXB0zp9v)fFE>F5$S@$-*IzwyeJKKiukKbk~m+Bw%?E_e);&f#|I552vy5 zv8w{`*)t=Kq}rLM2lR#cSp#kx+G*Qi^L>mzmY>{$cytk}&$XuXdC&mQ?13z$x&XbA zXVfZNtpHB}z}ipLfT4W>5xzs3gJQ!IL~@hG#@wVOeGZ7xqA0KJEZkwTrrB19jFHzo zAU7et*9!3?V~2?1h~x>yP{KHpIzrAEm^c87p~G{g+@Otp@Qs#fFm{*Q*QGp&8Wwqu+m-5^-rYenT^&pLUnzi1PIvdV>c+ zcNmaj-(zk3#Mv)F@aUcy)<4|8DD$H$Fd;bDA3o)W1lRc(If~LhX-Jr= zmYA3;3$gIsD7&%ny4ysiM8}-%Jwp)1a5Ae-goew2xiq0qT(Bl-;p=|;UCCWm#MK6Z z2w*BjHK93fLo>ag#p&A>pA^0hrmr1s&bP&TB<{bE{I2?4;`{yY9N&ROmCMORE`}fb z#?-ypWtkf3?GmR_eZJJVG=4lCGi9fKoAkM@eon)mJ%=(gVKPZ6Q7N@Ci47CcCOor; z4@O3XE5l-^QP8iWbH+39+5EXqG9eXw#X!Kg&C7$H&J<$j4k1cT1xv=+?rmgbXpEJ;4Z`caKGGs=gt5l2a8|mH*SI z!8lZ(|Eb|O*gW!63OdeSS5-e!&B@XoVQAuAy{;c4?o?W-m!f+F4Yx2TI! z0-gorN`BBVkucpdohkWX`p#UTeDJm8`&$;(7E~6!CZgtLR!wgdOXAI>On1!Y-YvWz zexGZx_O`Gj-keJ)v*B?=W@w(G`qx1NPj6eHGE{Klh&G$4m05^Mx~1bQ*t^KvO_^zh z+5O|Yh)}vyvQx3s9g$p{4>l(@+3qrZ4GL=yI=rc%RLwfgI!`+|Qh#Jo8mje5_d54p z?(MYo5Tz)Kv+b$g_sAV(%`?nim(5mEirRlXPE+ONL$U6+o-t89VO6agga{%)v?(eD z^{rB_4F)wK%!2fTj8~{vO!t&`V?&EV-|oT0f3k?^D8A0|Pm?IDDB~)Dj#i9p4suC} z%OpyU-RXD5k3I7ECT$=qBJ*3EU1Crw3trV-(z+Zi(fYzuL>%k%%k!kQ?dP=)*Qa{P zT?Oyr1t+CDt6Fy-vy6Wq@_uQPI_?wrL19R_H@x_uA>V z?3Mi%{Jga*1QqH7_IGJJ9C8Z5@{vIS!B6C6 z6sZ*06a*AE12&unUpRf&Skz`tNv`d&&14YEx6ieAE7!F@_xl{6A6Oc~mgBCNt_I&k zM}`oFq=i+7Rgiw=9hlQihZ#p0r@5ytnL#z7d84WoOCo`mLTlV>8MUdkZO1PTNV%-? zhgH{`uTKNh;nQMjGA-9z$Xf)?NX`V$sLpsHX%Jz;2||hJ*68+V6>kpNOovX+O99lj z90;)&jO=vwbSKhnJX-XFvRrvw(ovHqx)dqQiI=NlV@!gVYx+B#ik*7CL^>ooT&bxH znEC8CiMN=^rTdv!M7Kw`$=k%6%)_PgQoHN5Vxi!`rGcOUF6VHUTh5^_OC9BDP4sV> z1X8?GJKJ?TH=4(BU3!{lTW6`mV$%f1o*5RH>BTshu1Tt?w4|vXL*mkYs+K52p zOl-hC`PX{C-#F;;+H-ACZ|LVSS3Hwz3t7s<=L<9nWL~2wu6ygP&q9wR?;F-e;J(RqM<#!rIKrN+sg~ORwd=MWp!CTkDC;Z@25re84C{x*9$9I zu2k5zyobwp1?{nV7!GEoRmXb;j#7W1unxJS;vX?_^+uc!sP{ENH0jcvJl0vR$^t zu{V4d+n4`BZFqfX!m4s}Epp%tOE^Q?H>@x^JnS{fEQ6uij(_#w5-FU0Tjl43$FTL3 z7Fnj(B>>dSXpm!L3w zi(k#t;rmC0$L$Q6_E3(N@919v?JKu-EILa&%N1ZsBMU!=!>0~I*Qhete5Q69jHh*H-+p@q2sh`*SKx<&sL%0rG%k^X+uhDfe3I*w>(R@$_x3Qf0BQ!qYd4 zay!#mp}C>P`-l4u5v*IgPHMI13!8(}EtK=BylTQ>fr1--`ULd8XT&PO2)Q z78IFwcoOb?$owmFyJFFCvY9w4Ogc|ORc!I5{L?akoW(Cd5`gdXp8B%`KiL3UX2ZSF zrv!#gm-sK82;{A{3bbEBO>hD{Rs^&GRH$60oBGLr-g0loh?5tF5LPxdIiKji>DmuA zYrdIx(`y?Uep1E))Hwsqm($bJhttxd%Cw(Ekg135n>(sqZTQCKLI){W%fxO>G*F)y z7Kfgx4gWb{F>u8JXR7B639{^sT38_Z8Cre!U_p-ppgn#uD06>B#K=e0_5m;Y5kHB&<=U+A9lX!p>{6!BIWC6jysUffe!vD0vNE-ld zm}%N_MHZ)Llf%}L# zxx$^@#E?FI7dU`2QW0$WxFMXlkv`tOfr>~Kp1&v*!S+Qrl!yB-5`>oukF}u*wuHtPioxi7pzf^cU5C}g-C^RG_L@Y!~3?ASPl~7PnfQm~( zB_%~c3emv(z6d9zsBa+ezd-(tqvaOp65#2F@PzwvU*I}9!-EhiJUkbS{`356oo-0a z|8nvT{97zgKwhZ zrbVDzfF|4roQP2UuhRdX{LjJv@5H}Y+Wdp1xb#0+{$u3tnaa=$$^W5=f2sMeUQo}f ztMO4!9w-&SA3urSi9+I-7rT&e&?zr zGB_~C>uM*{(0$N~B`*8f-KRkz%*Mvlny)<&Crb3VeL|zE^7BVVrdS7Bwm4MA)a8c- zab(Ueyv}@o5=wt>gx8Pv{x*>8GU`+5%FQ_@dTtQ8p|_~Ac|0F3l{6iHO>c0KizjTej4yI>euw6xYW3+i5*;9KGU8m(OE*7Lk3VsLzX9Oe}*#-)tp-h^P1xwa#(AlUHRdQ)pd&ySCh zgm?n%4X5lVRops5IoiaVp$bh3KqJ2$JN5fuD3C9`i8%o@D#T=LF`ouW{HllITW}79 z2<^Y`AiRlU#!GIID+5SK1x+lZf*YY4^La$)4x}PgHNKk{M~pT=6VL!K%o?E&Mwl!& z9rvM{&Kl$OI{no)84?0zsK5|{5J&24cyf&;UU@GcqRaS+WtS3V0vM*JO&AY=5UTwo z=$QUPvOZh3XkxVN(G{Wef3mImAGZH{C0i4t*(|5+cOFuZ7of~Q>v%KZQPuVWv>{H_ z@GE8F*>Z5B;NN49y{8(g^&hmix6kh^{pkAgMPt-OVtRlGzJ0Jc{hSCi$gcT$*LUnE zOV^)DaDKawN(ynCZ3^AHXS*P&qLLaFaQ04eOOc+Jl@%AALket?Gvuj+S;jT4R5-Ta zjr-J4asnh=;^7#}Jpkvh)%{8{VQ|qY_7+|x;z%0rus{Xwa_kKp1Y>u0HDY_dD~~qv zV1oljh+gP;r?`bj*X@DL)2O{w3leNPms&A=y1Cc4F*R2ygkYLK{3Vijh`L{t#=)Qg z!1~fiw+ufLgF@X4a$mmG1F7?-g4t*|l|d7(om7@+eGrjxz=aR?3YqIjrTnC?ukX3z zbyxJ;*`F=m#&b|w(6oZHNw2)pW1<1k^1~0e`3QfXoP?8%HHK{7J!nk*?Ed3!y2Zf6 zY@qy4%&YiiP3}vwIMJAp^RrXpI>m^I2H)xCCO@*6r{3&yz2669FO9aVztXMeMAeq` zJQXmO#6RaSLLP3r?bl5vo?c^PfHFY2RKY`nN-v)cSADw%_8K-DtBtreD*O1+Nj|IASF83>EU}?#j?xpU7fRUHWpqzpT6T z!A1TUsZYIfu@H=%pa>|+q6&_C^2Bk}6^PiH)o$<{D!v7qsP?j|>GMHHoi`6QoUElE z%Yp(8yoB*qeKbNdFfe$YaWx6jBKCB~YniAym0z5l9De@2G9K|GUoE{O83fgF38uo; zc(svZK^u23_+7g-9d*tWZm}>)voQ+yi70aS`R-#6AxHK2&@B}b^STuO`;`X9t z!AU@VTr&^YP0_n3WVa^GG;@oDLkN^n5 z32St^DA#uh=Dq5Ds^6aT~Z|B8}3g>X}qM~hij_Fy28Ltu#KPt|$N*HP^? zN=r;kVu|a^RVtJD`yL$)#Z2;D3TZ1>=R|+>YCSs^1dyk@!XJX2YoKy)tbuCypZ?~q zY6vk<5zRm1$_!LE^ZHITWZ1VvHd**jH%FkXOeYneDTe>Sn_xR0^Xk$sfD)L=n$ergYzjLloJJkV zI9$oSD`1p!lbM;>uEu}#tx+zk9aYZKBy(ommE(7nKepm9R??Vccap6~e9H}|Bxs>C zD?$3 zMZ$FVJ!29{Ltm@`8d=Psb2ypX?-Ln~HCF{H9-dn~d?9J6s^vC`V*c^$@XM4tM}sdH z^;*%egwEU ze#?K1nHbN{yV` zG7vz#EiNwH4z=O`muj@!bTDiQ?qc?Jk51*k7&fSf6m6oc+Rufw0eGiB?vq~haYv_@ zdTmGr0EhdKe5<=f2cG?2B(S{iPJmmlFxLL_o>79KL8#Ebq_x}~wQ6QR7MhDTX$DmH8XhlQ4^X4KT>- z;Wb`d#>z;mRtC@Af{Cj}E0GZF)&XUI#sMw9ySisfyXdB1K>*Zw)gPmT&4V;Vo)V%X zkIDi}ixLGZ%MYR<$j(uzp`oD@%CVi&^uOh=c>8knflB)E@y{D_Q8Ux9N1o(Jw}v2B z>moAHO;qoz3m~A5&Gu^tlXQc&O;(uFF9sPr)sh{RhCQ$1x3($!hu4{L76WD=x!Y`6 z5haOp}pst_2HgT+Gt#*ekV4=htdM^RSVb|4h_R3-mZ zume9fG>l}Kx>gPBcFf=bFYVgPoIu0ZA5tK?bVoD3^Z$0LIwU(o$8>1$M^BE>8%_s$+RuU_I~ISGieFl)VO9XqN2s^d{*nKvc5U;A#e$+6tb8j^?65WN5QW? z>TX}XRLjn3L|;f>?#oFJY1Vk%<|~xc)LA7WwpEFLGTywRQ9BVQ58JW9zMcx7*rS6E zgqvSu4zIHLD%-s&zkY)Rz2HT%{G4mY_dYqYX*VuY=bp?e1REeji0DZTk;Cca6T+aU zGevY5yTO^@YiAA0gj1^v0=T_F0T?R;jT&tvLHWuAGT=j3n4zgi;|3um#bVZnqm=!k zsvR{7Bp_yLrVap28_fm@s{`plLN1U{Uvbj3?t7>_c2=4Yk(^vs!45&gj=t&hqL@3^ zK0pded6^*Fa>U>$AvH&&AV&>GX2d1<5;n59Dxrg;CH{0LG_hHjjE%>r+rFbpU|qJA)S% zUoQjL3&)oEEBc<5Rp>Ih5!H~*fZ>#Y+=uS5 zQS|iI-l$_Xo1E`_477hZ!}0iF^Pq3aBt;h+zVfkI%xQOw#T~Q((2$Mu@uvWYn~Fvc#YaVU*ENpHeYfEvi~7;(SU zie$vFHxUSOUopIS#F+Ohp`c`4q;$$xtb{E*x_l$&7FOvi@t0Ru(g^|#Yj2X1C2k3# zX?2d@Or{Dr(>JSIMX3g{dCZ;W?FEr_ye8`~sCnmjz4@Ru6F=X1eR|R|ILyYGu9X?o zi+*$3k%l-Y@q)d)^A-y?*O#@;O)DC#bS+zmO2{TQwMB+2>g3~5#KAiOAD^UP2Z|xe zcix5$)|2yF5>xnJfj{1*IbN=1Gww@DN?Np|hVCsr^BAp;y`xOdF20xiCJ|Rh4tI6c zl0onl+f4Z?-`JdL%v@8R<~d4}J)N)e7%TFS<0M}DW-P#jemq1V!93&1wa(}1x-n9$ z71(_BUZK(PyyO&Z%+~d~3JAOwm?Yn9M(>9g(2)%Y-u4PM*!4K!#$qpG7Le@K8$0`p&(|8`ZN=;SzPALxKf`S?` zaydElqD!I^sk)Dqld3t=ZaOP1P=()*6Bwe@_SUuWISOdpa&13c?UNWlp6P~kTO<8<^Iofht7$s}&`mM97RZTBrF&tQby*R7bdd5h_MXuEd&Ml02SJNW z7E1Lnzx8V6WQL!S(*qy6GDs#oUILkGyI;G?L=N7K_$r4=V0O0s+GZ5QMF|Zr&v>4N zF*y1%(h!2`g>=j%2}7mg$67orpP zzA~pIaLc^P5>X5H;xCD=`(jKj08VV8A;rV4qIsc_> zfmUG6mOIMsM~+^j9mf!5z0BiA4J+|OlwHQ;vg}mBVe@O7A7iw50{eiX$%ywdZ0VlP z)Xv=ue~i8ig`e9fwA5J9>3%mf{>ISt)Cd&DTX}oFc`1m_JP#F2pEoj~dX~AKi=*)C zN_F)`Wcl`cD?d55nhk5q5E#>&@#I`@tam`^8@*Z3+Ac9J-MTs1S(vG^b?~d4Z^Rb$xmSy*T|Em97KR8@!#YRX-xWaU=x$5beQcMUES@#iqzspKUo;sk5 z2IFPfj*gCSX$xC6uaOU)DQRiX_ankh>*(YoPmnG*C>2vO_L&E23bKe~k+%|N#Ug0e&L2o`lnh4x@QQBH$AOd6;H-xu4rY(0QZ3S|cp z6O7kmgc#(lSQ;}GaFOxzM_*>eY!Mh|LKy!aXGM*3sJs(xQ{`d0>VgG7JB_>N=U%q5 zSs>!Naz)&f?!bD%XT8ct9=n0JZ$P|L2>$)za4{SH9oll@9C@@NAf>2yPxbsHP%32O z*Ih?27lvh*_rvV&?Y&z&HVXZA%z~>X+T2?k<@I$9Jv-iP0o`Zacr85trG$%)X!~Vm z0o*!uIWkAODe_<{q_@njHgr)lJXh`fN*suXy`sr{!3;??V{RJ_KAsRe z9eG@4xKRtAmSq;R7f+z(xW~B=aejKRIPhB6XHAb<`+Ddv)Q=o<6kcXTVQ^ zG|Nb7{mFf1$MBDQq;HHSj$Vm<-3q>9zKsax#NTSPDz{JSC|wL3yt;Jg+q*^pJH<62 zx15uoxBQt+HlRJ-XxuDbg}~V1`~%mVGMUktP{%y_Tr`00@Kb!LO4hTRst*Kpe2o$}Oa(jqC=aWFPs8j) zCn*8cs1$PH%R{fxav84eqt*wcqH6qF&Zl5Jl$x`3XUOyFPYAl9Rru}0_MV4K!uLwu zvcrkcd97^BE)#2D3X=6OZnStvql6F{^uX%7Hu`&>N@I;}O_wfajRn0e>~liL?7m%H zH`AWXJbJqlB`1P!-tHEz{`rv#QACZ~qr}eJkW02Gx%aX2F5x*78;ZQ?$D=4&;BC~iIP87nG7IoDugw7{vc^iwJ-gcZ{WW-~71^VFi6 zgA0j4DYMZi4WcHeukjNrW0&VID2~CCR*kY+jPy}5@lwH*vY`tb=anmRRvuZT2N@0F;*vhebiuLw}9cy7_=sH81Rm)t4 zDz-5MZhzK08u0oYOgLx7Q7{{M9=~+YlTZr&Exw)3(6!wqkZ({nsxS9SgcN-lmtod1 z8|C5*d$TO`6WG#I(V+VXv89LL&W}YN_#apHf6zgHMja%b$4MUU)=|>X$jSOl{5-j{ z`2A%%GyWl&Ya+_S9gL9b7s2d1n~RGJ%RLMC486|DD;(hed-OjSwPWo}=c?%I_{b;3 zgU7W#SPXs`EDOi}s_9i}owR&Flc=6X=0OTib8xfZ>AwuYOkSo}z0OO3s!h4R!(oxC z?u)k!(j60Xprf7f%(<6XJb}>8E-P~;k~Eev_n#Z*=TRq0RKHHQEZ@o2-S?483q?j7 zEu;hBEk9a~T@1#g0XV9LuyF;j{r(F00jVA4l${9Bktq_O6vp+fHNKNt4DlCr)GAP8!>3*qG0>z5CVwcRllF=FB-~ zW3A8f+TrrDVsJ3nFz?>IgOd;!R($vFebKvjpqNk)z<+$$E;WH)U`~P(%22?M7nE_> zyLW`|B!oXHyXpSOgw$60jxp#9?I{-*O)M*bdZ+6gOMO;`W>#KNu30|cA~ydzpJe&% zTf?#?UQ>nU9bmpp1W_0qTo`=Glg#}MCn*Xs{)>R$Prhug1lJATyNq+4^R`wu+*Sb$ zBtlSOKPW^HVgWEqCjT#A5Up&M27UtTlG;n-AMAX*N zDbK`uwk&3%k_HQV_xF7=WN|sU!4if1YNJ7TN6EyYL}4W0tIc4ru&|puJAtK2#e$Tm zstKV;N*Nvk zzRX^Qi@PWca76-tCYB_=IBne69*D-_@VaMo6B~3ck`mi6lw#l?{sEaG zkLQ2#y^4gJo0}b^<|{Tfc0{w&0Wl+^ymNTG@o&nYA)Bu@F@?b4gnYC5u9}NpOCdv2 zR9lxv@o%zNO6ng@<#IS|2MM3{E3G}=p3*Qy*&_cUdl`%W*qC&^^%Ao0>jOnbX6F1d zDmIhK$q%Bve?h@N0vQnsjKlZUi;8J^c{zp22%^RLM3p+q_7BQHK`v3(RmxRWBBQ?y zF;zg5#aI*m3xgx1_Io3VJr-@-p?y};c(}Os=j*)I8y)SMfOhIx4w&ChCJ5>84#kN} zO7`?eVvM@iS_Td?RcO8@aQy`%agHHqI=fwnJmr{-h?p3K>op-QE$tnmN6YV3e)I22 zqSLC@?*`upyD zbk|ra%XGbk(pVas6rBpipfX)ua02nawvg~?bFs##d64Y+@uVt+!y%7ZI3D)b*aF{3 z5pi%LZ%E{+mayg30SvW#0=?I*%q!Nslj?RhQ zORLc~Q!`C~q{uRrt^oC4d;Pm=fo8D2!NGd-X;2J$?V&X=*-UyMYl>G1b^h$?A1VKR zK}}4^$7ed7C!*e9of@GiuT2}BLOmf{VHn|xff_DsS%^X<^sgoTW?Pt_BlPq2tekqM zPkWDGKVM*RF$HiZkZNjb!F!b4#GFMVf4b~bWrAoEJ|2ZM>LK(upST38G zho?+YnN%O{uv>dpD&_N>*7O;d0>)jV=dG*+1{!68>ilAU8)m&d+BGrOt+| z4kj{H05#Uz7SW~uDMN`ueo}%Li9au5_auuc=m47*3h0W+N^vAa9v1$eL;ulmH2%>z z?1q=y{gy_2oJE#j(F&mc(ot049`xxzc5uQkV}_$3*o5D2a%iENg*ha#f=n8>MSmez z-Z(i)(Dg4dbA&?S8ChBT5^2=t0w92c#laPT{WF+94DzO<{+un7Y$!P~9WThMm5qbp zvDhM-EY6O~7g`aDUtpP22bD^u??0X|pYP!VY8GM~ap=Dg6oIxEZ+fBQ`>_r>z5>@{ z<_ktr$Ji9bnCWt%%ZN)?anluwuPquYCgt)v+)bEiTjH&F69d{pAM+ z>ZQc7h(j`2IOpG6C(dyQqSn%Ci>26z+*?Uig%GcpUJ#U8C0)Di&Azvb|wEIxrsp%B^L(NWONtx3@&p7GDKC6b`H z%T0vfB1{MzZ69D zw-o4_nL*ZR`P^M&G)S$ZBxaG-kvyz|!?_;oRt-W3Fm za`ANDna_-1Pc*39J_=?b_TSF{Uno%qbv{`T$rp{b-x-LOlxlRmdsoR?XQ?OX;NVc* z&`{|e^0oi(#;N1{1PBErC1J+K#;BQ8BqM%d{UXLMCPub!lM<8dborZAVS(5|iYkoh zJcXf&Nw7@%$5K8bN&kO@LV%7O5eo}iPfu?wle-aJiEtJu?La<`CeaB2c{`#qG&Ceo zXF86EjSa)6cY|W1k{vJ-r|^fN|GmQ;X;2Rj5A&s3GTZgGQt29#5#qsmX;#$#A%i3` zA`v$Uo<>jn-H{zJki)PzA7KY$393+g&7&;}^^1gm5rG#>IECsZVtB7q7iG0()suYf-Jj9&a95tjK z@ZJ(&B?nC`1>BUp8Yr$Jes<5K=c}MS48jmnPszGx3QrXQvJ1n2U96)dP300)zS_8m zD+_)Q5=D*6j^5DGM+6$t7J)#i-i?*QJ}oAgBku1zbEA3q)#MrLdI7;NfKT~Sg$}cL zdnlN!=7_(%wefUz8a+4Y@axKa$G(JL{Qnm1M@fMK$_qdF>K$OM=6aF!8cFES*95=~ z(+{`J28gTxC^*_I8NiHG^{rX(4za7%q8dSsO}__zFO!>=;K!>v!|g)gb`iAOOFp!d zsUrMVfg9HjL_i6a|JXa+$4l(bqV&D4cqf8VU!uZ7C%eB-g^m`m*^h6%Gk}T#EJcqY zl`~ExwwwNB%{A-GP+xcydw2;2`*52(J&Ay%OJ6d%{VfiCk`Tm<#Yx`o(9vsd{hc9| zG$HF}xM3=lx;%xi^GJ5r`l0OfK)(anO|Jt2h`PG z?rva|d@mzfT%>BfpZdrc5?(`8@6Kb6m9qP)Cq|Nu>KQ)0FdN#TfXDjd6<_mMjF6PJ zwZV|I^|ytw6cRushzWzGs5jSOZ{$6&!0s(o`M_ab*PxyK?Sve_%g!`pwQ|${hS7Mw z-MQ48hk5@rn1AHgZJx9h8(P($pTpc|BxiAqwKs}B${Laj-`-I!lUqU-@hj#4IxX_e z-;`@rVp5O^f$CBfdCKtB7Gi}Vl9 z6A?GlIlC0tp^EP^`rE%y7NBdyDd+}hgF1=kV|T56!&=25XQa5H!x2i{+y3(S2ps_W z9*Oc59DK(a1}C*J5=xoaKa1CM8)%HF<>HF2%5a&;fKnlFN}3Z6VV!V2B^OF~l@i6I z>1y0d=oZ7G^?i$+0R=id&75oB2-blfQ#MfsjQ1alL`|4;;E%8$-CL7?aQQUQE51-I z_;Y<{lXniUNHNrdgY=>9s8zONx=#QD+xDjBDTIF;VlhW{{aKr8B;sP>99K3Nt*!Q? z$3|Fa5nG{?5F8tvD%H;o<{YSA3Hb&!l$4y$@{dVru%N<8er;cw9W)JYIXC)73TlNt zNHr-chH3-bCL|^Vk{`x3=7E@0_nl8O1O0q7?2*(jWmXac<~HSY+>@bni&C(ClOK8S zeJA^D+KQjuz)tO{3Y#1u<}+!aKZk5!or&)lrH^_B`4+@?Xrin8z6#_3#OXpqjq0kL zL~^EC6A3Zf;P~h$-1F`%*Zb*~dRFK74ll7#GT=8}zWMu!dc&r@ajv_@?cfmV5jY>S z2?#Y#U~(5Surd(zB~mVtd(A@>7?b=mgaUL>=GZ+A{e;(66NBaUN3)L2*81E<6)p(-O+jn@!RK?$Mzq?XnM2bP`r|}+fvNl znvTR(Utmjak+R)4;^$%e;dfcb-(Q@)|I*f~PB_PaSXx_u3YbKM4o2L6U3}xzAf_6( zL>2~fg#LUy2MshYDpYWsd^_dJ2*|R(X^jUatiaJ~3k@H<-??O+8iRu^d!gBk8z@PS zwSCmxuIGwb!5duue(h)|Wm!RRND?TqbBXWLcUFn ziOo=Z(Z>LVEmPcGS{?n}FH?)Z&yvMa0LiWPUJ#ww*6So5zE=|*VXlwt5qqR!g3Z- z3rYP!@_&uS7V1}8N`;JqqGE`MhmnsANMx8>T*QpXcqWM<;j7kA`WjPT@vNPX`dbKu zb6SuP?^3t38yZ}kl`^l%fU|@k0;9jG_#MN(`?j{WYU5$#u-F)dTaop!+Hlo49u^js zU>I{nMdX&xN1(pGZ`3mx@xa%9$5Zm&P+(qB=4ymBdBVk_G^ZISeAa3* z=4p4wnVc=;7tQ^%W-cCxCA2yM&H!^l|GjQ7nwU%4o#rU3OfBftfKZ zjh0jj$LDT&o4ijP?E$n#{JUf5*& zX4Q-e4ah$IB87jNtN>=riJIhv_J*4RAqR0G{a6utOmv04~tn>?1 zYmdmDFhIZhkjzJ`2~q)_xWIUqu&Q`AXfPC~W@iclR<^56jbI6s~E!IIZt6KRF9oXs0lkO{Cm)$<4FJP1%XIga6UL z>Tk2Po`=)s>*lAd@k1J}@0CF`&q|7&^?Wy2q+{}nMvU~-KD*pH59Qh%+IH7)}-#Tu2Z^pBBINRZ4h0GduG5xJ_hyx?CPR39T^@WAw1$ z2os`Nb9jpcUqn%uNY^4st0$I6OQ|EulFe z=Rqxz9#qB#f@CO^O|rCrax226es+q5+q8hl^7>Qs#AD3BSuW0j4 z)Kpb_TWjdkmd8z;C7>rs{=?HLJaROoH)vd)zmllW)XgKJ7yRP23o-CccVOA}ea_nz z)a}a($T~j;9@c*E`Y?X#f#5~R!#w>pbTO&MWBMQE9Dz6_?G=2%9csVjOcLc9_jVH@ z)f7>fjVs))lFZ1}$e`TaPqtZArAq8^tPlkl9R!zOD1-?0dj#Ld!keKv(M?`H#!?fUfs;jK)HG zVS}a{I@Yc|hw2v$}?DZjVyd=3_;R*?yJ9j9Rmb%}<>) zy7$osNh~D^CI<%w;yLSJZank#u-79M>kqnx%SYdi-!m0)1sbdw)J zG>pfr^}>2{Zw>EGO{Tl@8tJ~;YFMHR3+kQ$ESjr6B;4{iOSzo#%OBX55rAYVkgzs{ z3(c)K-l|eE%KRT`oxHpa_c{iBgH~0{8oK+nk|IHKH%5YXNV(n~#H1(B2wo#v1=rPc zsH<^T$$m!>rm%=Q!@6YYAu5$H77=1lwrsyI-;~OlfDRA%JT~#y$%W9EtER}=n~(F z3Q{oz06&74hfo6B_ajbX`4gzH@2O?m@eWzx)bZr0mU4dQL6<*0j8wY@K~h7gtx zfA{w}LtVWxxsqo1bt=kc06scuB;!OGgpS>-)P^`FQveq09={&GG2rb(mWBV0b zqDa8z`h^OnN|I-kEQEx18cHX6m?aUKgjX2Mk_bem0W#XnOxMV$VW||E!O}Sas%}4g zyZdt&jI}vIs2CF&-PlrLTt8A%a)c26ozz^CPFd2%4P;_*{sL|Y^E}P|4qYhPr z*3$M=TVAy~AKvF{*La*l&E;CO6+TSk0fijs?tGE_+*SeG3F@ZJ-HWll@`1;aUG#f&+GxrB^!cf0F;Dw^@V{o zuCB7g*eg6n<0A~V(a-d7c3HvxckAfd8C`a(vpIf8>gFN?hs23fnWc}GY3esY98UL$fL zSwPhX^z{PXaTb;3NHWi-`-QNC&_7@c&1*@`#QY;r+#n4F{Z`Y8ZYoK5iJ7`4OCm== zJ1I{CHN_LH88>cB`b&ZSc5QzX0(c?d4Gr`eJKTlR{*M%01Tb?JBY6#U;K|e_DF2^# zbM}#d#W4{NkCqv@e6}J%?6Zo`bp}q13NV=Vlpy&ve}ad zLcmXMlOu&F(jR9RX#Sl*x8Lu5tFJHF0PH`A9|Il393L?A=+ei%@OU<4Viq#2R6&ux z+NNO%@npBxG~z2ubzFL+?(da^lvy+e>gdGh8$DkO;_pTqvPUI^1O=&Ur9`(B5w9k7 zf=m+dk_G=x1SCIjsqd3-01L2UefS2>>mxJ zPay0s&BH}+V=fLGA->PTAn$znY{iZKb_}^UNuO-^1@}{cU$oog6141%&Q!e$LR41g z`^J2jIrMJ&243HIp4nP2aGR(UK(!OPho_JD{X1L(-T;gXK-6{O&F#G zZUJKf_F44ImGlF1=b&G7I#@jd{yWN3mI4K)_eZV2ezKs4A50$WZywOPJpW4JR$a$t zJMjh@nkNZAEb%4L1%#&PJh(ex6w3V)mx1KW=$xX$Kv!LpqX0a!|6EO1V7M|1%mlTK zY)sJ7R147dia>v=72a{=$>?&gxvKIoWCTO+)A|A1h$26+61L@M#gz9JK@-L$L=_3i zMRqKtErYsWJA=qW+_%krUL?~_yY5sltSi|N(j%l_Wc_zcnnURi0MLddvr#?~4=OJS z&x`0T!)0_>MiH%_=fY=0*3qwD)HVlyRYQ@_@+9#(iuE&gy~aC)t+DH$t$ZKb{jymE z36=ef@JSx^-9NnmAxlOBh685;#_LNF(D`CU*Ned%xLF6{;oGm>F-y9KOS!x)2$|vM zw!-;c{Q-w$F|=v^nQC^1Pf|BvM-E#zMeJSTL+7Gq#I7#;1`D>cFuHBEOcVHCQR2 zA-B_w%!T%>{we6F3!jKp#iKJ}cyrGuo!pUf-FXs5#Y!(no9u?~`@HA(>HR5@(%$xW ze=AS5xp_4H3h1Ow0`u^DKzw-H;q$R0f%q%QK z>l>m=$#gNpPZq} z26;njet%z)UfBEg2?|VcM`D%?bEViTg68I6=erOe=2sW=V&aHcEVGTy5bphoY0WXA z{YWA03mNTpdtCmpjUeANnXa&X&2z(_v{Nn7bZ0s*7}Nw8i5g}e|F|=M;YbbXCz66El<3- zoH!4*a|xp%FDc*D`N~juc$SSWnmWvL48m?vObz5wcndmWg!3Fe)B{k0AY+{fy2UoFkmmS32p?ld~hBfl}Fmv3nJ=Y264f@GOl?yIeFgax?$Uo zkj(ixdkP^sLgxK`@4_^E>eeKZieZpymhz#-|A=oT*kKc<^LQ%EasTXmAp8nF#fm=V z$4pzW%2Kp5Jv2czImkVPwx9YxnDF%oj5~k0f$6;>>5XN@OyaEfug4{s3}6hjePXrV zGXMJ49%u#+>FM3q7Gs)UALFj1I3XwHn(i0v% z7hy7xw%D!8PY@QvW=(tFoZrzigyELzjG>2M9%;u3kNX5&H`{$9OLgkyge7j)8x1kW zjV2LEA(Px_hiGK^CX1oNy{NT+r1(V#6l4WnQc0=7qAl1R5d5*uw|9C;z-6&2Wy+Ih zf$J^$+i7ZJw&!I|X?IF(V3gBHdZ-TN*Vq3k|0l=^@Fafk>k~c-7-mx8QoKPdF;F9r zO%uByR)pNqYBbQ*X7nO)vp?4Ap`w-3v2kKOVn@hsyJP8qbpru$l8%&SrbAD+(+7J` zk2Y*E<~f7b3QUIvF@J!N4H3a*yKFA)M?q`9e~)uJ-(BnL(@QCZE_VTS(yG&=bc?yM z2rF8OB#vt5MI)=85)@>N)Hhn;PCM538Bulp8NdC5SCiK?Xs2%kMLb?uXzaIX>!1(y z1$`*IcT`#!LL`_)VkF=6=M)nHjBg=v!p1xAtE+25R9Ch7>dXMU*lgn{xu=ULYdBuv zvj|3nmU`8)DnW}WZWkxZJrVmHsFP}sk^gCmaulJ%*!dOvMXH+1a?0SDqq*|+2F)}0 z+%QU|vtc`hIPe#+Us|*hIJY%QT#nyoaJ?edJeYNdZJ%#m1=4bGtsKODzA`X2h4EQb z;$f(LO|aVl!8<+MxgQQ&jgAbmTV!43-aniw^|?fvLH6SC_v2;2zeI%uHUu<7ie>NO zb>}S=V0fhH_S=Q_rliyKrSl_fI~uN6=bC=)I5hKt=6}1i?alwu2;zpRYaC6L99Ulx z%2E4+26qlSy7Xl%hm0)ivkq5o<^o;D$eKXJk^2o;WfDiPa-)bAt2dTkS5Llk0R{y9 zEz;|)Z@MokY$)nmF9(`&glIHvB*)KGs4HLi-45X@E@9U{Qr+#K0 zD4Nn>{=tHh{d!3i(tIA=;Da*8VGqTE<7s%iUz);LfuZ?k2>F_BKKG!H)9^XL$2KBl z6mtyA{+$!ox4~HHPS~Fl7oX=xoEAPW8*DWkrQ9mGvg(?_hQ^%dCbpBi8M4%C8FW`N zFuE?kt6#KzZx!vM9Wuc_8yPLll7brf;(nRh@FIKt#+s4oJs`a zB}@I<*%dZ>2?X!QIN^+wpLgaq&jb8>rm<7cXJ=mUUdTOi@*8Bb)qy01Q3sM)Fz0CS zu<&`&^wgE=CQl?&EZ?2gQx7-aPeP^e9dki{gUx?wXMaCxmtC~-exs8s^Z7Jn=8`fI z4lXWYLc*MS>>g!dk!mART0DItD_+;J)uqRJ>(1Kh3-Vg-m0j#SOMPi^@C6EvefyFdEkJMXX)dHR zlSO(@^&7y=0zJWSvyR*--I22-S8NJIWxP=P^!{48{sFmYmv_^&cRy!?NgKcL?w zF#anJ%16!z#vqc_svYu|$sg?O?3z)~&&zIZPql*oH<0S<@81G;exGwHK3~mKGuLmHboO{{}upL_~`%&NMga^E?C+-o)~m(7;Yd6|BDQlo@Wcs<{UIsISm#dQ+}L}rXLP1IT=w^w|0KmXC@e` zgaQOVwivk|7#2dSIwMl|l-HFrIS6pG)_)AWanmcH7NJuaR#E1J5C7hvzaD!>jv7Lq8YQmu<2lNAM@$!Q} zrpQ*CykCV(t*B3mx9^|oO+=X^r&KBFr6{Mzl?~(Y9hM8+d@^RMqHToWWv`giWll0f z&(03w!vQ0Y76+PEpfMI#1;niilp*J>ig-g?98FFnS3=!fojR)l25j=W$Y*WZc;xIJ zS6xqa)LYT{RX&R)jmpy*Vl`4)tb>oXp#y!f)2fZcj%9@O$?x-BA|1FAqSOAf5M+WS zIQ#EvQu%q9fo=A3+RZ#Zpvn{nnfl!D!6#w8tcj;PL!0VF3xSnVFdc($acNM`)eYa>;F|9YOmf6%Irg~iZMT%hR*-4Gq4hW&V)5-e-!)DbRjGVPD3J%>iJSX>A@|*O(%*YBx$0{*H6B8o6X2r~pfU7@XwM+`2*;V(Kl=zpWiDWuT1SL9 ztXQOMA_eUf3laf9ZWE~uIBPEWyG2(H&byWNJKTZS!6y@dcJBJ8iav1DgE*-h|!?W_d?3D`?&1G z^0#blPxv)`FvT? zrM#N?C!Yy^XwM;JRX`Zt+>q{e@D)QCzG09|e=EdEbG_;zzKx@)lSfi*K$*~=w4i|X z+^D&*`s~g;Iz#sK>Y8#ttQ&-i4uYhMpBCzn{yLGaqYy(cG8cc^$#uHfuFs*VdBU`I zv&rm%%0-OnpIhr4vAYBtqBbkF=(KHvPqU<`@=P^t1kgJ0C)=t$f;3Ic=RPUtuIX5o zPW5IRz5ASW{z|){)i&yS6hc)dMUKDr0J_t88k97;Htlj^Yz^h1a$l1oW#WCWyAWEX z?|tvF5Sk6FOcWjwM;V<8Ls(I0?lz*N0WvR)PlH@^X%(nXBJXNDQiiSDQ*Zja-Mt+a zSX9+~%$)adRMl>4TO5Pt6XyYyJmXa~8h}b%17{PoavHt57ROFEovqaBE5qKANIkMd z3=2fcD5yD6P+T3h0KfcvBP^F)djvH%`w*c!2P)(&U>pDL>e?DvP=c#e%j$NG$m&XD zdh_J|*w%i+z4z@67QG@RT?OsgNbyb6qml2{GjV=%a;%+WD8lMyUZ2BEe)H5O;n}g; zDMxRI7Dwk`Z1Z3@LsN=0Iyuzt$NI+IWm=AL-Wa#BOx>v%mKn!wQ@v4oY3b`@$jaoH zkKavBK2#RKAom6_G_M67+r#nQr#{_@VBT$X3~MVz>aO19(z;A^u5K4CXZRmjpQ-DE z-Cb8PG{+>-H7ELT&fFL;8}|o0bbtEZWO5qav;{e{-u)#ht1DY;Nie(aM?(rX)IDhBn^6$kpLt*vI}{Sx&FR-x)20(Q|kbTXvez)oPaNM$$g4IOnW-tXw^4WQOTB%}O6x`uGsg z+MAXiAk`vGWur60WZNb~V>?cwTGE%yn6R?iAMtY;V>H}&YA+Ka;)UU5-%Q&mGI!N( znivZlisLPjj$;%d#sSzh8O1c}F}AUhjl*G|v#W1_*yv*8bT(Q|TusKWu}y!XBv;$v zk-poZNsdH@KjPJQLU; z<90KE!G~sd=B&1*He)_f4Ny4-6b;&P8Vn7crQzd4+9ir>L_3c$%ncbt6XJ zZh^cHo{_l}-UJ#k5g!(|D0+375jYMvO_X`OonIDO29B0sYbD>kXoLA&fy5b9)IBl; z-eB$~eTuIOVOk2POh;O1M=Ls7U542V2tmagb`Sl2p=bhGu!G&?X4kinl*?>(&F@BE z;WAW>7S0A1eVIX7_|PI3MDH|4FML=&T%^$rn4O>Y9UJ-II|hrTdh8D{y9yd9$;{0k z5LJhTD9)xQChIoFVi;88q#tY;Gq1a1M~KNSsd)^x$&JKYQz9}@MHwlvFta-6YAsS< z}UzuzesGf_smCwI>G4qYg9DV9mmCUTPeu7Q&FgUVhpq23UKk4wi7+ro< zXPSi$G_4wVl;hr)rBW_B{m5j}$be$=Zk*g^sz&0&YLy*a`R({Ltc=0uD>%b!g1&~I z<2AcS*4OpO>_r4yqcz-&`xm@`(?u*zYgsYtLnqP|j~-oZ!U%1X;iyPztz;}GPb2F$ z4fSK3Fppt9`0{1o(OzdE6sMMNHQ{D!ff+Mr za5-E9kjc@#96k=noYFrPW>}DgJ%da~RpraB?Qp|7iR`y}H>RQI6?xN-K*Bg3G>>Mb zss_-|sWEo$=j^P!uW3Q)51|A+$Xa$7j7bhU0fHCX+jN|nb2;i%p#5zQyOWrwbwEoGZj;-m`CE9Ub!>F801-B zYi?MdOa_S#+Yn6U@M1M&@O$q9xeED^6KiwhPj|2u#EOaXza+(lERMI@-#Q|qd&eK7 z2rBYY%c~ozFEtR@C(d**4klEULi5R?q@`*8ppX?t!4AMRZif{S-nRk#SVqO+g#Y2m z8npDoNbxP9=T`MgFD@8*sc|Z$lIiEDgoa9dk0`9Ld+-h@^=+6n66-Rz^Zvt89)?`K zhn9p9ISo7Gf3-M#V8K4%MyeIwXPQmji}KgzejFigxxm^_>1dA1zssuOBL|n8K_-IY z1KqI4XI;dIYA_sBrgtB4S0^-ns8rzENF-?wL#2l}h=uR3_Y`#FU=L|F<-#vE&hxSL z?OR>|0U&IQK3=#35E{+A-Ru@ZJtfb3omQa57DUGk`9Z8G0@S%{LcgIb#5#0+?5s>d zKZ+dJ(90NlG~7?QdU$XSo;;Sc%{7A+22}RdU8VLOj|>nyiwqq{thBZe%c_0F>x3Mj zZ)_9y=2zg7Ko$qH<|yfJHiVnI%X)}|MZH>;n4aZzocvT@r1YMH2pOsBCyOv@WY`cb z2U|(ax=+MZLa8VtEFVKlml%JzVMc9I$X)CnDFp?I z5MPJBTEmClZ}-kjKxo!Xhb5Ao^f8Z4i&UMc!%A>R2;G5hdhW74#(E=&(vsoRFw6ks z&>+}5N5RYVMhurl+kxTe_TANYVnHdt8&BlbupY=2boi{bDhK_sIxb$!X$CYoyRGg& z-Pd*^#9&8zsBEuRd$F55Wc6I>c(_tc6T90+7~bmdRkWzz?b&2xG(dLBYDf4CwDlm6 zcr*YI^!gqzq5%kYKm_S&5M+^tDgqr@^ND3>_66B$1SaCO=MIi?alMT0M?>IG_4uo8 z$BMy`Vvus0Q4JjpAXqe2)jCX_O}swoAc-08k)}iDw>Q?-x+^p7<%axjE@kD*PD+S9t!qLF56RK!tJ$yU=|_ZB-m>0IITnQQr+1I%eu)FU&xdPrJSc~205ee=`g`aBVWxjVD z+PEOK-tn7hLSG)=+i_&eKL;zWJBB3qI$U48@7v{W&1=%)c(X%4ZsyocW*K(YWcpAr zNWH>Glx2hEPjq4{WVcDKjR4)Vboya)zNc(aJd@exJ9VRXoONUf&C2!o6~lA&!5TUJ z(zK7;#rE2*m`4Ry7u_lX2y+&es_jbtEQnDE%x3GA6mAqwP|ey;U3pfMDUn(<#WNTZ zhwGhgbt3gBqm_`ZG!y|sRKe8>G~FeP>S`UDs6}*b%VwyRBRG(^;2ed}g}t$fxV*r! zz&`J?u$##-_mR_br#C%P1&}&Byt?xU(x(ws*~#!dPo7a%_ZW35ISlAw2jV1(X5NZ> z!GYVd_lQaHwhkXcMl! znh_9mS70O{wGwg-2c{2mQrVrwjzp)Fbqh&UF#LbORg?f!{(42#o=GR0`FS=JG`Mn7B+_Z#4`!?zGS4g%`}H!^>cD##_Ts4tr^!}skI zJ~&e|2dr+@3ZqOAJZ+DGQXLIn`G1Os16L;twrDcEy)|j#%%jNgtpnr#_+ADBw<{nC zkXizLi$-JUVSmVqKe}jVp^6@qhQ*OjzZcbBPo=tF=(RQ6tl`3$uBN(Xbmz>qRlZio zc-Fg6tzimU40OR|#6HSY9#Y6im`G@H8kv=@KQ7~-w273Qn1_sgXJW)@LV~1N+^f0+ zCtXM^O0>v^IG*GSHOoFpNPE?cN&=#@maf&ClawsBe#LOO!{pxFOO3;>Ca{8>`>>E*%t<$*GGoWq+F%P3^n{x+k&fnE*GrXFtxd>kGp?snMZGrjsMLm<5( zZ5$@4hc_-?C;!0DA5`Xf{AA}?4WA9>w!jL*lQ94G0^s6iHRc3Lc}5ey4T_`eF>q5- zQ@udQZhRgHD+DK4Bqh&pOXu-~y?Z18b1q2uZdh8wcY}UXeusKg&Tr`Lthb;RJ9JXs zY;CGXS{M6OKO1%Y0iAZ^RHFm3&dZKUsDq`rmPdz_tXRPn6un_F@`y%z%c#;Hw%7It z>${5QIwK9wTa1(5_v!?;!;cs03!!)V-c1^uJH)tF6ce>B+ZaI28atUP0m!sBI~9gp zkTtJvVa~egZ&lax%Dm}^1~8lfgQXBa+s4-dgI8V|Rkb2us1!M$_yJG}d^CRGctluL zjrM19zj58wRa9cKf8l6k-UFcs2@LSCW)7+U)ty)#McI205!VC7y$Q{c9rA7F9X&^) z?#ZU1KG)Xc5n{bBS7{%hy?b3M6ZR~yvWI0ib@{wUf(J2{WR=^jD#}sVe>y@Wqoa)k z3zIusoeis-9>>qn{4^i~+a+~~o6K@xK#8cXl(MZ##e1N-iF4RU5P zOxPbk5>4i;whl8yM`J1auFj6AjzLD3M7@LG_~8`~sD1L23Z+x;z_lGgX?z`^tqIoS zF{~zM)CpcgZnloDuD1Y{1+^~35#LZOke8uBP9pPxj*%)?e>^toTl#z=N0AjUEbU*1 zQ+Iy|O-#;=AC268Ak@KuAp?y-l)rA*i>sF$Kzf1)p6{f0*P`;B4YQDt%Y0Q80_8bO zS<3fMeJ-=WT+Z>&eZDLhm|_n0?yYU8-4yDqWJxb8=##Sakd!VKNGM|Zu{a zcq*%vOMBg0thD$3-C{?|{*@;MUfmzg=joC%Brp>Yd7zvZ$@(!ODExw47Nd7zOyn(I zYr_#5D$23{_#26Q@p2`G@ogc~Qwa0Z;>78d4(-O8Mn|XdFBc-S;z@a}5QIc2dG*^s zA;Ut}Q5|1KrV8yw|8WG+vmDVJDFQkM<+YE77F0DYhV;3WVWU#aGz`6@iOCVWfvh^f z3>Kn)9@r35;gx)bAFzk6R%kDf^h_`>JVa>U@bk}SDu%u@Jdh5y7B@MeA|nyK#d%aq znMOI88nt#!>-UKRGP%BAD!z9x_*v|b-CNDdH_fFO>dv0hCYS1O@Y_5k-Zf0)@d;Uz7{Q zkcdf0z=`pcFca#6>U+u@hTX8Sp=1W(?I%`zG~we6d6#7MxyYxKzGc-~lHpgtbwI}T zdfKxq?+rBofM-hRQ5Xd2i3Z|NS@bpM^~hBeCK9amf=A3GZsXrnfk3QfeK?Eo4h0_K z*#frOU5O-YSvZ%*GnYul{#_)nX(;Cr8BzE_zo(;4e1`heOZ)?kO$}5Pe#Jna-AeA3 zmy`PWRd7@~eKNYr7Ps|m!6qAKTRr?Sy^H^NagqIcHEQzS5}dj&-XethQS8BXVCVA{ zyGFc>ALA>B>HkO9SI1=;H0?@vceix6G)PEGcb7NcBjVFl9Tlv^8L8(=B78RnP7=5&uwuoDE`I;X-B^^E=cvO ztVr)sM2^w;Q(Rr81FvbMlKM$WOpAvkQ%xY2lUSoH(FO7JvR<&8b>nrbF6SXh12!3Qs9|(>}?}W+HBfvO4dt(KR29!MF%oabrt7!lls#l6M?imxKsi; zrh2FuN5c#6ZAMKueV;$DA=C0W+>31ois>iK-}!aiT8r|Ee;brLeS(LwBJNGwC+fOA15$A!9!oWi zq}NTUt$BL_R*7m0)FrU1zHO%?hoycuIXv}_#>n3P{Oe%2`SYiBt$2j6@tlH11C%m;uWHzQcC0qjHC7;S%~3KS)^mad7+=H z2JA70%9d`B9@rLa1!m3t zI>cjqD60ueYwS>fq!3|_2WygN2(4tLv!6Qip}fm{K0aDhJgvd$r4LoMtNJ{x`z=%H z&1{MhA$v75zk=KEhh2UryVa%0@B3*UY$s5E$;)+my+Km_)Wa_`S{^L+=)V4~t^TI5 z6ejj4BY>n1w37bW@z)Qy`H$SNBH!C%rV~>(eC2*En^qO;6Izg-Otgkv-gk5-Oq512 zws=zFMGAEy2P<7!+2mf*y19ZjQ?oZuC1T)v`tJFN3WDp%MnkioO&*MEaXVc`yRRzo z62{sG$U3ijHSGmV`!DMGgg@iu+@kh=o)~qnIANL`TOf5OU6X3zf;sOEIUPr5aFH^V zgD{X16b-2rCY-~d;9{tnkYf3;a5_R=g&Gss_gEoYtjfcQGSaOjXoA&Y{S%Vp9zjdw zjL3)6MEEY^+z>m2SwyiLrjmw_>%h_{%@tF6Gb%BqBzlVth^a488(`fY^6?Nqkgam* zhUq7MG0F%gb>b7==SmMop~5Xt-qpm{C8ot(~b z#`80v=UTld7h=p-X!_pj;YD(iFgJ(J!^P?k&BGg2Yh$6K;qc{4$d@|do0czDW-HY8 zueFH}E**)Z_JeMnVG9s4NtVpk1uxp`%F=qKToQ;&(pW+xofaJSfEe%+cZi4l^fbFj zUl+oMOYXOtnc-a~gi+5EQeTgv+2&(O*ey8;j&+gy3#}kR(gz*(6nL4^gs{J-`F_6} z7h9{$)f^S3-yYRKJgE4LW@8W{xLuFEsN)q3JbjXJYQ}>B*q1*F+7lXDeCOev)lSDn zYFklgGGL1Ro!R;PUFb?yuzGr%*+;pjPx)xDE}fkGcjWYA5=P9*8XF(>U}f*mr- zzJ1QUaG{}Kb=H`djudu^u}#h>jE%wnwa&>@)y6DbIsz>o9Wfp1XNt<+>!|UZ*&jv; z_;bW{mfEqV!_!li(*gDI#hjRH{;Swow))GyOd+4X9JQ9cBE?@=Dnu5bS<#3|XS>B& z-52Qk^rGqu6fw$eKd;HhlIT9Rei!UF;Chlh*e_YF42n#T9TES4R=_LEW{<>zF-D2<(IzueTpRrV5o!we<5^MCctYtcsN z`Sj)zo(b7VDVy?kFF>v}8Q+eQR<)_)9dxvPNSwY}pNo{698c5SJN&tz*z-veBVx$| zOQd0YbE3w%Rw?IuAQ$sQ)vbxoPD!9Ns|3XqH~1b@Q59rieSB5|jD&u#%7G0Mv$-Oj z(l~JmY;UcpCtJ{*V0U7p62_S;wfNw*rKt-{Dm?p8-8#`yz8$|}IbT?qC)AJKa4IeX zyvu{H;q@BO;-;Qu_B5rO8kBO_#sijm$n_r+bOJ&Zq7{Ze+Md-mVCF}#9B;i7m3U(S zVYo&-kbWvdmv+l2``SmU{}2Yun$v<6b7uJCif+*RPD&Etd;%P{UPs`)= z8y*8mAqmQJGOkO)Jh>54s{rJpR9dccL*n-97wor+5gzr0=f>J)mfJ6w&sp}Y-SEPX z!?$B$5wRAq$I+2o?6xRf%@ljx&|wLlLdl-|!h+O`7l!;i&~<_8!D(i4O6U)S4PkE( z29xCYL&__4O+X?wYt=Y2zhcEu3LOq}I}>_b-k?2`gqtoIJ8+KlO!7pY7Evyrrwrisv`*1^UsK<1na*mk<*02383D!A5ff-+XCv~4G-PSzE zG+2;MhmU!)lvoY;XqL$P-RQTO>~Vw4W)U;Uxigrq#AI)i7}`?crqot-3|@Tm`A^}J z=q2=x&EpE){dYc+tQdCYg^V`J)CRVpj5J+*Q`fLTQZC;N zgSB6kNUb1f&6}{6)HsC3HN$csx8{Fn*Lc#-BWSwTB$G#&2um!cpE5BlREz^cBN}7) zumYQBv)cCZH#)dfgi(HV;tOY1;zTOATuaDKeit zYa0AQ-MN4W!4DuppsC4cSQ}g|MNBy@&*lbl_0ZW-BKh7CI6a=lZep}KrTB@B)VL-% zK3ii8pTuozsOjz6dfT`Im!}zwpEd3xib&wlj^tq?wo+7v$!?*bh18KV`|~mVUcD8b zOGBnH>Jqedjsh7I**WRmGYFQ~87ZQHWW!1?sGduo8p!@f7Y%LSN+H>s{0tl7i_Zw& z>Qggoa||D0SKxC$?@wP<>9TU`(M+^3ULLPDcJ6^z{BW0F&7b*2|Htb{9_%7Uisz!_ z`Uk6z+L{TzQ^Td$E{#GFgFC-c&wZ=EP*sp#3Gnk%2ny=inFF<26UB0PH~04=|6f-^ zahjj{PDwKSJ&D8Vba^c!&oC{s{FvFWuU@#V{ZF>KxM_l^NXkE)O>PPNzoKaL>9d!_vZfel9C-6 zW=7Q!y<-3G4NP()vdq&=nnyo4ruF#z%5fs0ctMb2>7S2^cqV zlbTpA{*N941Kh?pxbK5OiX9$s!pE91Y0WQO*My?Va|mBW>6}kF<-8MGofjyJuEF0e zjg{nTSgA2RBXn22AOW6y!N9=CcNCG}A>3r0iudtEhM^OMKvWKZ#IB`;Kv>=%@9xPw zaO6=4h`X`d-ISc>F~wTwT407BV@OQS%i^Ij7aKjeK2}mS5%` z+Aea2bM0nLPWuv7BW2;Zq;5@5*KmC6oP_m)QPcG58aX@X@^c^@ZxQBGoZSZ|w}nvw z2sioftxsBBzt^1i0%lZF6coNHR9enrJ826Nj9-S9F?4K{N2!4aVrOQWHvA@OS zRb52+$}Puqk|M+10Tf_h(753t>l1e+MY`O!+Pezji&3;)?rpLWbL92?KC3efe>H=v-Mo*-buAjUvOGU|*_ezt)MnkX_6;b6+M`GYsriAn(R zj~P33%lcwtP%&IpN<7i1=^w z^qh@`kpfbK)5>n_<3W>yR&|9sW>a!h7K26LeWZPUAy87HC%{DXZ=zYMlWRvu^2HKS zA^p;Kb)C~Vv=-4RiuDh;E=NM*0X{tnCwAV6GRfT(JJVdD+sfPGxMNdLqi-D#O=%*Mn4&?yjva1#6O z^udGcAJMScjJFV3IAv+|boD z&ykNP{n_!qnYu<{=GnQ=5zS8j4gLFjEVf27#gd4+z6}i2r2aiH3mEuPlO_!3+vFsMTnf|V zy^&<;Md$Mq=blzO=O)B|mIk~BD!4P2Ju`k|B2ThX2T)@ zL}trIAfuz+*u~)9I6i(p?93Cp+4!W_*|V!Za7UkbYT7VN&~qs#H?r!P+R@+Senruk z^?D=+w3GE*Yw{W{wZ(Y<>fjr_po$7 zFTDMOLPA{=mOIp-rT69>LgLBh_nz3VB>NwTA+8&vPj#oJzpA>*d60PAI zsp;JyR=Eqe`S?pSUcU%4WJ{#hxQ499`%XNZ5^}reWGZA8{*sCH$dEMf@h+dAh2rjR zQ=k=d+-?uY2cO7K?nP@!iuV8~$3Jxr9HVpGiSkGLRf^9SUP#{xPQNqSgN!cSPkKv= z@gE$}-1>(}X$w8v&u?n9IL;aST(iQ8*L*@SE=Q;|-Qb8;@xyS^A5Ry?GwWQ+un(kS zdav0{=G0`miwkv6ZZib-9&g8Qezv#pahr3cWce;fj^5t0Jyqa`v9b0lj#Pc?L^of< zS9rf9#8O#=*^{Bs|5Kv0OH<)e7|Y|YE%o5lbsls!!c?TTo#tmbdM@ zu6tXqD(Mr)T@*_ebwy#0;EoYjadOQvuc?CJ*AXkzgoU>Ks1eENQ}K$TbIA(LJ~v7R z`zy{B-uammgs$!i=_a!doc3-VDETzPs*`xFT}Acq30I%G7KhAS%I>JX@Jh!+h(qwd zc#4=74c0{}s>NE0<%yhG94ZM0^QK9qKrJ?FC`>}nPPstl6yjJJc@fp6@y1dXzl_{> zDHzMrhq03Q$cBp^=^z+Ed2e{QQbZUMb$SL*@9v`~A;F2=F^eNt8)6aU%643%O}Jlg zPt&`7wq@i!UX)v^t8FY8L|J0g7yK9F0*)YUDh}+-xxE*|8l;?CP3K+d-Vn3Nh)(4j zI>?0c%NKVrPY&xr0)nsj|zeC3mxTX+0{EApUSa%;m{9R|x z*Co8(r`Mv)mlJW9bYF(KW4h)2nUPP{HP5WyEQxxE;MR~?ya@a7TimhS=CHgHl#Mg_ zQuRTfrvDh=Ken#`@(WGID=c0mh{0X9$4yj^jms3Pp9iST!DK!{E;p#XpV(LLe2~N9 zd`XQfeaYL2(Be`%20$91W!5O7Vo+h5-*sxC<;Xa>LI;9pxKeF#<~bErxuMcU6>1pjkvi=iKM|_15pZi7>VaEGrZceQ!1$+4fDV-Z9VG{(M^OWPjw8+|69{f&v ztWribD9Y9XG{hF3~y z1%_!n-Fw`(`WI8jbVmyRn|f%MuR`j z_LDH){x#ZvQ4Jd-M2D%h#!PWXZF6&TL`;lYXK)7dyLazAZcg&W1}oltto(}>a2e4_ zNIn!5QTy5H*r0H-Au8up0aRsX^rYI&Oizz2mP_5wwsv#l0c~!gywW%x{ig^4+(9bn z5db_*eCj+sdXUf$>|9<6*zR;CR7nVHKF$Di&}w>8jV@{i+2 zyr(lt24qRcyphxD-)3T1$Xf%c;EwaA!!v6^)0*fzWkPW2>rr7)rKVo2XhkAS#Vk<| zFa0uFU>%dUWJX3q9gplwK-Wqgf!`zMCaT)5nsB_6-W*m$rF6hehu4Hm-_v6Fi(t?X zrPi7|A*nG;YJ4Ukj3J4RsuUhzMT=2|st{-3@Mrs13$XbLF)dLv@@Xg?3wi{A`hUSg z6m9&6!z`yVWwAL5!J?DnQ{0zv`=KQrs1w`5rl-TDd^%k#3aWJl!!B)D8lP^4fFeff z$1v_zsEL|55tsLRgoNI>V?dJv@=e1zCOb>vEdVXOmg>LmoTp4h@d_;Afl zhHib*9;c08*-A|D7eDAm;Y_#YJ0|9&xl_}0*5~@69+aZIZk4)3Uu+R6v2Tv4q6A?c z8|)e0D^=ZY=OlCxv+1~UP#`8n2H4HTa?lfU7XRmbT2Pa3QPR%Ae&H$6wV>F*8`XlA zzv~=x;51R<+uh3LGbrcJ&}9BuV$SlBQwUwym;cMrN-)_=wVp5ey>$;Q1(j*Rz0L+b zpo{LCqid-7b}ybgwXb-`qt>6$h}K}O*3W2#2|M9+;|zNq3wS?mf33Ap6Jh#}A7bzJ z7?oUDq$LErG^U>@;Rcu+ehpNKjtuBrea_l^kWZB#Ki(SCQXKLvi4Fb=O8uvX?yL{q zwVTtsj-J*cqrwJ7?-|Ntc9?xn=bo_ED@!sCB6O=I@``FmXY;?&{qq89tplsJmYQyM zUmmuqB3%Z#w43S-n~7syjb%jNup_ZeOs6S`@?+K*NLbIjxJmIST_&(KNDuOJB}s6* zfB8`_gM5?|v2=`nH7S|mrx=4x7Gr*tG|o*}!$5$TZ63E;YK~Uh0g{WXb~HlvL07#j zo7eXz5_dDuigu@vd5FKbSkQN0EDrgUHcQx;fzn?^Gjh68QO%bf596rg=IAK;H9dMl zcpoK1?Mf<}2a4VFz?_cvogTG=tstSCn>0vKMR2T&Bxuw=+_+~P;aha)2fmwv3?;Gb zD0hCS2NDc_0mXMOaZFQWZTcsEVQ=gbZEaKD@2K}#WOpsQHDX{A$E@qPvRUb4ZfU=h zBwb357>qC}(EpUu+CmsT{sFrd9b&r8Ne7;#_dk9fA@uM@Gg{pG=)&=Y&2zXGsW##H zhrI&^@=Xm$CzUUojj^^9B?{7Q^#>4`e(52Ko4g>mx}*6wZx;rM+#*k9m^5B3ntn9Y z4{oj$s#~wYns4?)@zc5$Zt;{Qb-g0qkL?-WtZVW=r%OReFqz(q)WR#3t{LyZ+z%P= zT3WGn;5lR1Qe*)z8U;-|+XtJX60_c+{x^@U4M8s==mLjx&pLfhA$4si+}1zUQ86Eht$1#jp42ox0+7g zQJF>?EYITR)0camB!UCf8d=m*T>W*nyAW4buP(^ZCA1KM;z811l zX}2Z6JJ5l$y?1+!^5!K+!%D2YK&WlzvzT~y8~@q;;K^XQjT+KfaJIj0!?{r8cU{vY zD5fDh`@s^^-n%mW?oa7_?PW+oKEabk>drq9GUG;hEsP^-Qg%K)2*>&^L(ME#kk`7g z`9Q%L8Sc^E*fgOPxhb3;eV$9;ui+0O;uVwG{24)Zin3~7YOY9pZ{cCTV$o30<4ag1`@mU!W()Mp2YQjl; z;ko_drd7lbUsJatDj_J*E-DUpME~u~98_$aK@X0D{bRJ%SLYX$Jjg+Vs_ybAHE_RZ zK%_gYMpmtB_z8@6s6bszL_`Fel#^0X{x&0Z;qD;xKXsfJV2&u`JL%rzP{eE#w(mM% z@?O@lH)-?e@oevU!+XyFFRQld{SYf8&+=6GoLp*7=O24B@Qq5j)mk#&FwM(g5-NG132lxB^1$uR2D>QeJx+(}sfnt!gW5|}X zqbs}pQvmRR{z^E>96dUt9LP3P>zvCg`Er!Uoe+2V-25%XKSwb@2jTh;VjE$(o#ih%Bl$vvkS9LgN4dMY zEKpx==)s_0|Im`xXwS>PSnh3>kLO>|D@q2TkXxSdW3t0}*lmU7E{ySv6 zk@Sopd7%ts8kP!=s_Svzh!*<_TV|+5ZJIC*%-!^aO;vBdVaMGI`tN!I?8xoh&`hw06UM2S2F*6>#Ai(_O z!4x00CUOhQLuDYrN!0;q>SA2ZD`ndplk7{9E2|@Vx1g`pcw7;MMk>ICFMx}q=^JB6 znzqlIB$a9s^v5-|fXon9<+fGTH~JqiwYNrV`r7F3B-z31nHqFVOG$H!`9y@_rEr^ljt_m3eo#cTv3&&}L`+o1Ey~tvg``;SrN7!c zPLCTuHUwJDm63|;UJts|6_%$3=`?ksIfpCsgdM>6x1D9qzcQy=U8?@3`Y_-zvb0CE zN(2?&8D>sPw#J^Ue?w~OeLe7P+cMtMhQa_nyb<-76XKvoB&Sgiw1V{b{yCDna~TUR zbr&441spOuehAmx@+e|3{V3@lyxT&D3cd2nYl2Cqr_44E@803hwsRBCRK{88OPg+V zEX8%S;T+|5O*yV4-oL+yynsQr z(LcA^lNM`i#cM~eA%FaGRdPSlQ(EOrBypwz2~p_c30X-b;@7?YX;0Hp8D(;w$)F?t zmNWj+m5|3W?6n6{SxzQz` z%N8uGv=Nu=<*vzkKndf8j=?2+!tanww)U5_7Z-h+**lFaI#W!1Y}w7aWtnnLUTPT9 zO<|~F1#@`dEOBL9E>?|D3V+xwZGg-oc1lRD-j0*&zqL56#6C}RV)uve_xBGDl2KH| z-Jh$eIhzM`KD@d_34;GN?gCRQeHG$0x^>${yTiU$%*k=fr1&q{aU?_iWCZb50%JP~ z>3pYqf}XLm_dT~H_VAZk0*Hny=wILIn0*bsgz^pTdXftfDKrhO9PGfn)2v}^^JY>N zWRPyUQQ*z@x>pL})aDnzm>LsrM2!w9t9pR0KOTgi+(kpG*X2WEweh*(OO5f^u)grz zn5fzbQl0A;-wH+Q3Eevo7w>kw71%+r+~L7y=xorJnNt(C1E)p+M;seI;@l5O$ouNY zlEk*9wHQOjmv>`ynm6`}P~GLnuP7AGV_|evLnD%N5s6Tw5t=5XHg*7$q?omYqoRBLdC8PwoS4alIU*UfeF2RKUJh&#vakuN3C=%D)Xl+8K zxXSGeB_g2jY3WcD&rUB5?Xie`xZ>Ejb-EH?qM3uSHQr4X4^A&}lUe0AHjW+^pQdjO zMXJLKSy9bE8gql_(G7Pd-FU|ky>APfBAHNF@HqQT{iK|XrLFZU{^WWMqi0sVHB`>CQe&-_Mm4Y6{_zn{nMiU-U1?fdsIg_Gt@K z1|MQ-p5gnwQ&)SO)v=F1cSNO2q?n%UOsB0?pjfxx3E`6d3P=rqhHCZCVw3jaZ7^tl zXgXwsC7=I}n-hzf#Yk8ofddVz8P;A(RWzplmXZ4Pt-?`aG2gnSh>7e;g!Vxi! zCWz9v_8Subk){d})$_#JhVOLgcyIcCdtZlrl@T3oSU*`5(06X36thQQDn=46$Z>ea zl9l@l5!-w#j6@?)Z(A?=K>CL3&ldiX2-&5ZIr=Cr{s%}^H=TATippyi_!}tmVO)}x z@nJWuEqE0T@RB4y!p_G4KdYo!->8%+#V>b5Tcawwhjn!qF`c~;)oG8E07j8-Bu~%@94}V6Y^VT(Uz2|88l=TGt1<(qs z7Fyb*<_ue1_BXpXR#pmh8NMHg@NC}Bjj7matn4Hf+v9D%kE8Frlq6yAcr{I1aPZkZ z8ZS5Oys85B;B%DH=IuLOs7vdW!MV(9ip8%qkUq;BMm-YEf^QvZ9*{CYG{`n%L%Z8i zWNKf&3?r#+Q2ukay347`V_x`6_pQYSpFyBRVlk*Qcu=VO+%8R0pz-UhZm0GeNZQOI zjM{1vQFM31e^Q4Fo~04XNltk-rl^j>+ffQQ_+%R&qa9!jAt|RuY#fQ7la_*S$&y<_ zhe{py2dFbcRtT#ip-na@$bG)E#l<`sY?v*Zv7xhI){Z^au$sedRxMO7K;c zYZcXoe-!Se*(P~w5c6{B9eKwq5BN2d>(`1Y$lD~tB1a(_Rsn&Dw5ATGcq9TPVd+C4 zyUmjKpxE@u&KPjE^X^c%`(f5;L^Ck?;RMuHb1apJT#W_w03ts7Wg6 zw?{YF*#Z0mb4N#)hTs0-`cNmdZ$-?#3OJG(VDRT~Of)Fe$Tu7@b+*7dYkHe>8`9P~ zKN3FFp82|*CkeKg?kT%tYmmnEKW0kT*+gJxN-6cV@MUK_-g+)+if5k?c(k^nj7b@U zF30l(lZ%21iuLnG6*|Wqh&l<&?7X2gO-Bm7&T-*gBKl|W5h~_>)N@`XeWtKbvBcvO zl9%){zL(93N@^%I!Y`+Mbq#OuW0S7jigg!H6yCL8ra1gB0G_(qo)(_|<*V`*(%k@2PcyLP-p%5Q(0xF76qSFY$bi+vlx5^05r@D=H|_i)$~ zc<||{)y@rGnoLb#^1FWj-%hiTN|GDm63=sRNRVR0!xQ_1BLmS)(1VesQD(Q4X=@&v z)Fq&7dS1r7TZX5aT^%CJdg~Y=2N&}7L+@4NV1AQW^69mXO~)*8`zv)n7k9O7$IylH z2gA(teYXhP>?pt_EKtoHnmQevChgX0^R4c^6*8jz^RbYTFqe}vv`xFpJz}tIbwxy<;31#tgSz~ z^`|KfbP%lS@)EHaHcA-%Vhfq6L46*eI-Tw(Hp|ip*g!gCGrx4&L4HH`$Js0nkUVflEj;KMp{{!t%WJdi>oKkIqr?epeb_;^i4F`$CcWqy$FZ@ z_|!a2s{Pv^K&VYiXer9Xc6N zAmY?P;iEunJJ398WB;w#e+31?z7TLVAd!X^{^S(AhA_|@WFx|6^o>>2i zhpy7f669?sKG8#i|I3hCSbebkQ$SGT;&-(#5)3Zg&&)qVI;CbM+F#~dJ)Y{{h&=A4 z{8ms#+FbpqmF?NZXD3e8?C)oww^-nV-Dk)z7B|8yoPNueM<4p_?}O5y zX`0}hzCKAdEb+gaZO(fKR?N;YB zTdnDbH7xxLKRjq!kdjaXuiW$4t&E6!*1WiB!gbSWEM}0N4Q_2pOoI?W^S^0H^*&RK z@3w_?{S{>56E-sCz`H}bMQY;1GJp^D1E`rQufJ%GXr>L+aI2Ma(B*EWo|HhgHj7uh6>Y6*1u(j zeYuY&`J5I|aE#8P*o%*WVH~rSBh!oTpCHAGjm3onRDpSocK3X{Kf;b{wfJ!6kiu{{Uwu?-x@9y%^hAbt2 zvt+f@5WUA~`}yRp0k*kz{e^QPxqLtV#5*QT+QbW`-!?JAT;QSSzKB?kIrbBdV!S?I z$6Y3%8i-OIY|g`Yhj zP7wmaSV8)yx#lb>q=pMKgvS)A*+S0$LSX+%;JpR%RynZ$Bhd+bRJjBQo2JlYs`*}cE3F*1NOFff1}Ew;(R2N1U-F*8px&>2<7#s)d&Us~-q z?`wU)3CCO4QTYD^y#7!ktpQy5qc6ln{M+ydGRJ3SJzOw6DFQBX7c~sH7gSajaUv5D zk|cyGIGg#yI%N9~6&oSH+OJ6gEenA@p!sfOcHl_35d&na+b?mTsiEW5p|&bL=7<ST=xU`twK2j^6~&OYKTE^g{q%FGR*?6Rp{7;sjP5_!--3x&%crM=%m-np_C< zb8YgvwARKA_f+jN0~cQ{R2X;v&TQr>uLCWhwK{zGJMQ)w3&1e|Hi1Ay90s}?1>K=Y9lu~Te#JVfR7I)F5SM88J@!C-8t@V1AukzuLq=;-J-smY<>?c}}51KRoC ztUW)416|$3PwPSLo-EjTq8;F&SpSCZjHU(D$^jqP>anFqF+CB&HtI?eCIpo8o8Den4b*Lu&Bg9 zC=>qS;e1^AAuBDd%!Kt*LBJ(EP(dZ+`dtRh<+Nl`9UVeI-G+0&pUu;2cCt`+!%YFB zHx|g8oE&9&`a+MYuRsUqo69*vSN@oLjKp$$B@aSoThD)E!dF4=dY^tWCDK}%b3DpmIbrvdnXEXZqp@7=b4AV!VR19S|4 zoFzv`M-S)?N9$c(B?TINZZ~kuD*uc*MF1)*J;i~40M_&d0eE)Oc(LK#%|0qp+lvG%w3Y#4xCP3vVhRpomRCW!t z?|j6KirfoFA+p$)G`|J2E~zXaH5KpbXeAoxC&&mV^~(FoCUR%6k6w8eeAr!4*!;n} z!&XMr>+m7S^?%|A+EGhk{Qey}40a9YXcj+~q5or}lPp1hsyjfYaxj^!zjLtsCKGjh zYHBzj&jg0PmpBX>RaR0omT$qFOKKB6n5}j^oM%5=sD}%NLzA+$wjQz^CZCal7w z?-Xv|w|>gv+}^u)P?MkD3Wa<*iuA_(0s;z`V%;udJM1i*gB6p9~m+1wAzeI`%zD@&ubHx zF!Chkl|IB~3MTG83?a952o|lPDEsdD`JoR!G(dy$YyGwLfM{h1v zNB8kUobr25!OgcXh6MJ2cl%_pR4{z4SSgR`y}p1bi#Db<)=rNL*Hj(pP2g}l9v2dC zhx#w2c}zFXtOPqxENwD$$^4ZvgShKperiz)n-;vt*2d=lR|^0$3S{+HNB{^URV|&BAJ{~{{_lg)5n%GepkLrFYL4QS%U-}tr6%K=*tR%?Gxj=( zs&f^0N;;Uh=}6QsUz&jWBDLzhI`~L}i1ugEl-*>J@U##A--%ZAD5BP_g@>d!vRQos zXxrziseE1FP=QZiW7DEw4j`v6fj~VhaEeJhE@w3Pw>9WJIHNyetdmTCbTqH{VYcx(wFp?v$>ZH!bKG#Nf6G--rndW$eU9DBR4mQv(f^1SJf{e=9vN1#+3_w(nR zqhaC9HO?Ui7_hW+VwI_u#)1!Ro=g;mH;!{|3ajCXd1iWl4@jpJD5=)5Z0G!qsmxyj z-H1g*SyDHXH4WbC!Y;Ld0;H0!O%^g9AmXqEcKW12xd%}jaoEw=EI2C^?YJKp`6WLl zXo$@)pkZ9vKUuY>gTA$Q8t&MRQ;I(T#o~Zb1Uj(;W`_0T{9ILd(feSQ87Vd;UpoUZ zC@C6+G2vjsA|Unk^%->s!7P^Y)!K($&wdXZ(foz3CGdaqey5JCKbi-r+cxWP^&ubL zGM5qI8lu}L$}$vQAFxtv7xKVkNLSnN9=v>bf3iW2B}}8m1=!(lkWtr)yMVPy=d>&U z$js++Q=8yy|RGs@%-`+$?+Q`D(s8>R_=Rj+ulK(DSW0MGs#$yHb;~9p4E+ctYJ$jL;j1m+S z$Z2RKZwW{N$a_(68e2a3CY}5@CMm2d|Af`b4Z9Xv??3cd5`j`5{Z4pWDJ&B(;I26UgY0)Qe^6Dv@0!@%S-M|>?M z1uD(;>)Flqw@ZiMU;t~3mkjG5P>_DBTO?Gsxp7wj1h^I}G9{`1vm0QhsvnV!9>4-7 zt0g*#PsnZptx>HL3P6V>2RnH{GJ(J3;MQV<3mbm1A<${G4h23<3iOdyI__DcSKa|@ zZBLxq7vTS6(lr{0A=q2`%9_DzZ?_Q0@#^>VEGI{;$0ox`^d3jeyADqeo>;8R(U!K5 z#1#{Z)>)@uGesvEDDwP(1@v&%9IO6Y-ac#~ddgQ57Z-Pi)QiKYK?hg7DGs5E4xB^P zGMJP=@P1(sscC3703)y2p=-W;4!$5GLC8 z9oR_eeBdDcy)4SSy(GmfK8!}|8IA;os+sllI1p-`?fkp$oa8c@5A&uxwE|HjN(Monot=?N7J6XIpH|-kP;%qfFI%y<9N537XUx07bbNZa1vilf zdYl5~;vOR?DGBLSz{+3hax>wBC2kro;=_l~>}(Qn7M$tuBaPhp?ru1scryJqw8g>S z!S)dUtz}-hR(y8$+8jXHSI$#|;gdHhcjDyyJrT{xK}{zEl=Wf*Js2<%3wogYKVGJq z!wgx0HKf$c;adh8@O1u}T zM}I1KWCNcckNx9^%*L(gW+f#h9TnRw&6b`pTyzj=H_wQk5^3;GD)NWsHwuYKtUY9AK>!OT%bdq0PaCWI&m6mP*-(w>buS_D)1h_V#VoU%#reWTn{2KZ5F3Nrk+$ zXrT*vq5}F|7>1!{sRrSEiC34B%?UoB@b z^mb<8Ew^Wy9>(Ftn@i=_m;K$FGrIDq<0GJJ3oXZUBI4qB!zt@yUQ%`e>O}>E38=qN z4uVu+b;)={VtHvvF2qfs*1yHFI?9ewc?wgGCCTnmNK{*ZE*UBQ38hSV zCAOYTXGeKdd4f!>^$bInpeH5}uBbPFm-?g*P`LW_GGH{>=pi;JRHn|3ZIw5Nc+F|YFp8uh7|ees(t5K3VC+eTJzZIjAS6cT)Uhn z-Hwe%M;l95_u?MR`n~3^C>T9`{W|jz+_t;@N^rMy962@@SI95>JPtx&_9kM-w-kEq z^X}o_VNk!}jbCy^xVmu0J5F0gC)-wUS7>S>B@0*T&6nr(Xx;%Ci1Rn3H6S_*@TZwY zFk%0d4@{V#prBf(ZP|-oOL)L#)H1EQ0-CU)G-T}f2r4t}K6LH;{QO}oy;ECcz_ag~ zf`K+$jqc8FlZ7wa52EcfR;^d~CMLT~vMh(SzE2du5bI;qH#LqqARQpSi*4t^J!Nu zysQhabm#t2rJkKVrBX&=@%JW;GHqU(a0$?hB8|_nphdrF6%ic4_&;oYb9i2h@^xc3 zwr$(C8=Fni*iK_RZ5q2tV>Pzj*o|$Q-%iiH=brODzyE@Fzt6_(!CJFsx@61;{`NI* z{z}$AR^S1e({81QbJbhrTd&~?1sR~dfl-5u{7)~)U!KVdsj{j{SzxpzS!4$==UF5c zlj%2+4hE6!zj44Q#%wHHGXROe0@es_Y-~hjfvB+2z6nK(n>025qzM1M$U0{JxKgXtm(`K0iaBp@@{ zQ8S>U|LX|>R|9-8or2+dS1^~;4m^kTyrDxCGtn}5X8Ma_y@{M-#nzVTbg>#7N_Y?1 zaKDIhM=HeR)YLlg*I(dKK(js2`K9kWgp{SFA|wgYYbX_=@CktIkT5VpQh^pVcQUu1 zXn))`#cl?-69pa~9$mgI78C@XgyC$dRx+nuW^Yfo5MXYXD0e{g{8iEcoLZ@B$JEpt z)WII|9zWs@37cr!HRcEP{yOJ*kQ)DoGyIS12avS4#0yA!)-v2ynBU;AzBef1u0ZZD zv1}$%94RF$*aA!SpV#UgL=D_X2Cv3_+di0s6*U!kMx1aSQx60w>1D?xK$UbZ8W|#S8<+0}qFiBhRDw7*u&*o-*3ek;-LJ_p6 zj6c0(TI}Z;=0tNmlsk&fm2~&oh_;Z>VzA!b=U@6_Kf+I6cZb$=%TOg0PeQ({v7SvW zEScy1EDIJUloNq+gE6h*Wq$qAI$$G+?F0$gDd8TrxoW{>I~qBld5-M5Ot%PDCoYtA z%T$|&c_)ALb4m9P)QJXxcAEBP|3GLH%ae!(kTJuEUelB)x(<%kc;S?EGY}73j0-$) zT>%$lZkIz*$9=TXU2c(q(O|s9iI?bmi*G*2X@Ymi9)Y`tQW=g^2Ex_~E5oAd3hY;} zYw|U&BOS->9L5V5==RCHsLQSMOVg#JWoT5S{-spb4>wFh28c$LQ^Ie@<%wZXK;_6%NQpIGS@6oWs=U;>i83^W7 zryS4|Dk*6(XC7V%^=*_v?nT$74OLdcGbUMhAd>%>swjlFkI(snd6v<1q4IpYui*C& zb+_=fY)PA%-GI^zLsg*}Ct7)P=aZQE?%GDtVd3m|iVFjqq^`CAI9{ybOM&pQ4m(j#0gdSPDJX!apEItC&FU1A%2=@Iu`ZnM3Uk;bm~3 zscb=6t#`M_R4--C5x$${=oham_~?SPFFWY%k-WpGJ^c*?*{-qrgT}qL}rv(Z$qa(_y=HZatjH zmuz75$UUJ#ud1YGrB7!D!g3^OGhw7o3c7M{x58i8nNl(62RFgHB*EBatDCi}M6U0c z9x?_x!a-zJtT-BA*N3yh&#BVJl-HT=h-yjVLJt{{T)roGqtq`Mv3(hA=c9Cg5L7fK zS^u{Lc6%t1%j>38>swavte#)&#er=ve>8<*B+iE3r2MK)Kuf0ueBGmL{nyL#^?GtR zd)0*C@1{D_1W!1gP#7x;GxRVg;y@(I^%DhaVe_D>vwH-y5?qKTGP?E|(azl>qgXq}E56-CLvFoa$732-2~{n_ql~II z)m;6}Ek#kR9UVozA*rMiQ61r^lw8446Q=Tv#IADk6$+)fVs-4Pc|~*b1KQI;dcbrr zl_Jd48~h;1Nv@|_AGmV9fk0I&(is{qY%&NrRUyz&zdGYx)u*JS7+&*RljCCayP^Y0 z_n*N(A1KL#oYSLQLSRRukuFz#H?pNi?c0#US*7*Pyv1#NuQ;HOn33)3r{dbeEvq#D zgo14CZ22^fy`@H0v$0HsQQ6YP0hC$Gr_n_eP*Zpc8bcNQ_0yI}0bx&XP7;?O$y%I3 ztqO#YmPzzFsLy?!T+0L}tjZ7=kw98*cob;te?<#t)ktzB}Z7`=Np-FR6J4*M+faV zuyyg&_v5Zzj-k*xY|-6K$i4gVZgY;xv^w8%ff6E*)xf{>@a}OM;XC@s3dwhazJP{Dw{FrNkI>_LkIVtG zCwTjc^m27*gaS2vItwy->9(#k_K?of_njsoI7i6e?@sDudwJEU*9}ycR!zv(5eE+! zzU#1TX-2Rw(poo)4>4`g1o>?5bOlo2`k>=nh>XFsP6XJX+vO3a&5vAB%CIB}S|6iQ zX(6UJ>QNdV{rfH7N%j}|LLvWFo6%`jzH{0cVGcz38TJ4z1@17h`%Yz z?5m0bX%8?TfXU8(WJC_AIndr})mG2z5ne1-Iv+q3_t!8EqpQhFW&OM_EW&?cx;tHV z@|Ssh0{zUw0R?JB_&PCc=!tMbvVnT`>+avPC;oiaP#x6P z);1Xk&jkt@mg?JPMl(PSSiBOV^CwgMD@Oo+L`8SM-%fJ4+>r_0Yat(NG)% zFfZ)aD8CK6sfC3`Qxx+*uxkx87dQ9%)&5jEgG3}Mr%Hz|1cgF6G|)2IayiPogA=gu zwVCWkWEDFu1U-ZrJig6dsDhBtJKLp(9CE0)+zK8Y8UdjfNb%wM)BE4ll2ib1f%Eo= zDs}xEopxzIQabp6NtmrS{m zPSaP#&=p2HapgQlc@>Fzj~K1bG{jrS-4c&FQ>PCfT&n~lsfpJAkM{J$&cn%{Gac-I z%;HSyjVZg_9qX_8G*xK)#zc1hR20J<>f*2Y((wj zLed_dRZuRhOU^yX;$)QG4*Oie_z|VKm_~XvaKBrlYybI6SbJ93*Dcw3mPQDg#63#b z3fbb~fWtrLxmG0v)cU|8V28C1km}?dp>Ph;k@3xN5;*C0qhBZQt`0Y2bCoW7Ozw=W zHQuC&Mj4XpQ-Ka~v@u^-JNm*&tNu;;OdQ83JaCt0aUdPz%!pbXz9hG8vsBl7r*1yu z@4GpPjt7+2m-8YmL@&%Cw<&(tbBXyLs+swZh(_lFyAutk?7UJ{l;g2KZFR7ymD>oFbX|Eb5M%GkvMUs`5E zr!AK2=QY}nQg=EiXFOnKV!NSB*AqnOZmO5a^SquYJ+z=(a(kS>)arUh)#NEpyYQT? z{HOu{de@P6=+{&|VEig>DkFOCi3$$oKpF0X&UQi=0|{Y3SJ*6JCg~l7Y2XEC!V{9S z+>o!y+=`3Cx&No1yn^+hJP-n6-9=h2`md4@77f<>VvusExxmpw*ejXM?CtdrDIVg! zr;O3CjM-6(WE!+H`c?Q@GnE;7_2>beR#LjkbB&3vnIiKk!Yw<-y02?{!u|95*gRXk zz)L0vgq3malhMGbVfUVGvP(X~j`dO?ewIM&u*##+jYE}HF|mA_Wh>L>lp=G90n$+L z`+mtt45JCk(`;EI5A=SCqmHh6!S3bJpH+_6#!)tF?>r2l(@8LlwwXW9X^dn8@RaNFQ{!>GVqkv*d1Juuv>AJY{i)f4~34Gd8cMz-?AYWc8SeK&aQPn+ssN;nk zO?WH{ae%Mz`ao|3sZZT5F<;yAy$T30L2?d79h z4avHSA+p!wJd(%H7_FDE(|qU9ZY*9Gov(^D@N2zdB(nTyxxAz=Me8n-v(B#xbKLC~ zble%{5&g^bdq;>-tXI98*7P{oKk=vv8`?8jy7Pz}=%Uy52zJG-Sr+PE6~x4WwXeU? zfX5RJ4!Bo@GpOveHC+Qq>6OR*U_;G~7il_GC#teh-c@@UM%3P5-tjKauqT%L8YSdg zkgyg=12S#Vk-oNFZM?Ngj8b#F1vn^l;qw1dr6$SF%q1m2gV;-?X%u7|=t+KGZVM+% zqJX}P>MC-I!1VkmXP#4dIL*Fk4ed|J!~Hl5vOd*{_{+!>&JEp3fnk zE9XOg0Op6@P98k`i@3Z-1K9uZki9VN34qcozeXr7P_^ZPCV~x%$q9r_Eh>uNA#2BvqPGg<|$U04GX9LcE@bR1m>rsau3EM zWkDAu#ojbi_R}1)83Xg#4~KJwB_~8SN?{iiHJ3{ zDX;S4j*3pPF~Y>k-1urQyl~+`BkE@Iyz%3sOd+ZOn4OzJ$Y8t%v0eE-P7#HOuwRdO zx69dtQ42#6^41@67tLMf4f5EVDZzw9B%u3@Y-wo&ubxB$5}2k|jPkR_<-NRi?n<W^`w{Ctq&stG1OKfKU%>;@}VI93Xkm( zoP%2dnMwZoH!u7EuS9b$@fweRb_-Qu__41t*!KFry#Vi8mK2zSq$kKxm0$IR%f1=e z&s6yoS0yh=fuMt;>}o^bw8b`fdGawb3=j{05vIUwheq)oRe8}RJ5TpXUTlGZ^v2g4 zX--8^#jAl#GB!radvb%Z0>luzeUfEC5wR$E25 zCAG$kc>F?MYJd^JQIvcNvpf6TY&=3~vI>7%mWGg2u}EC$iq&k-ihlr63cN z@%Mdn@aHoZ6GZK?CWN;_?40NPw~L);2zY)zIazBz*9GEmJfo+#c?#E?O#h?MeM7%0 z;r)S>*cib2Hj?JGS4w_H+5ZxN1(cIe7tbih>a9%B4 z;^Qq=jqVD{qg#ydx>f!VzS9>6S_+VhA&@gS-zJS8B-9z|+eG_jrSsXY;%WwnT*dC- z8b3^(m!!jV0tIqbbC;_~lRx~lFatd)^F=;(eJ|7#BCN#s3{cL!$VyK>nLviUK(jOV6@qjkQ%gnP;Z#-j5!+X8D+98c{F8V!p>d zU0u6wcD6`e=;$IE`$TWUhCI1Ra>hY{Zdou}$u>#Fgx?R)uU6<(WO#qhH3>o z_|PT3F!m88ZdgaZoFM>Py(ys~5pb@UO$wQQqoSY?wK1w6xv4o*Z=0V-5R?~O_Xir) z-)pXrU?Ap3-k(~ARGLDS(2i20|5Of*PXxoWrdgmy7hiwKM7VS9;ajp6gbBot@aUjJ z-R~X<(X44eYaL#&A8h7(|a4Odkn0o~x0*C^BOjj5p$r&90#{5z4yQG{fs7eH77ZRTC z4X*7cFQbkDeT!^KV&(kgIZNxH>99`@8NsntzT!j|u|gO{8o?%GgL}K`F*cWK{QBqT zaIeofHc9z#Gsqz1q(aCl(&Q%yl0tG2BX*B!mjgM3w z%@lKfSqq^f#V0!8)}fIQLF#o6lHv$2LOWcyHk zwQe@Ol=10Gz|y;W&z~-@+`j^{^AJ*L#}Bnjt3vGh!||YT@XmM}e<0}tJ(S1rK}cLe^#TsZ0}^TBZ+Hhi zON?jFiIa9giDdfBV=_ACGXnxehhOv%ul7jZmlJ@-762V*wZ;QVjKGv@Z*TCHmX_-1 zHh}Z%H}^)UPR5(UVbl6fgM8NjO}4Rhdziyw3ZI%Z-%4Aez(P)J?$_r7hBV%dHb@=O zV4m=kj?-spIe1O`3LI^K`5U+EGm62uv*x zFBS4dhow9Vlr}!aUC+L&Cf%9ad-3itNupbWT#SSSmg3;R8!0K|J?q>XflipU&OWdq z^Gu@}$Q4%%T%sx~=+finyyrAzt6;6!C)WrJEtiB}Yu!!1$>gwS!G6)zq7A&H#X#|z z87pZJvN_lU?X&?CVn))ue}qRqLmf)|JWh?)otXcP8JLtIDM$S|jp<2nN!kLwT@jzC zjX(K^J}$w_XZx{hBQa);D%Y=eu34EGAx6EyQW&QYECJs(E}6eDRku^gE3$sw=1zOxzoZU+m!4JO5W1?=T|%;+%3jr*89kj6dL8w6?; zXYJ>No^smQiL;F$&NCf@(Q8Tr=zWbjSG^O|D4#TSS^bmer;(soP9xQ^OsuALg2{4* zesj9btkoZ=RitdY35%tb-FJQM zhDN+K+vD*d>=L76X}6>CyuTJ(?KC+Xjut_l(oIQhe(Bjd`884KpacKB?fQ93fc6N< z?Dod&rnb+I9Jk7I1N=$(?tqb+!!$5aiP9<~v9F2d=u4x(J z^5-q7^73K16Hj$%X)PCW9n8-Oy~`P=qx(0DqvV6O$vSBR5H`A<$1U!$UgrFwd%krT?BZOCY5SJm`igU+YtMDNaiEyqt|w~yFjFIv0oULKhvP(HfVYPEeT;}6GIVq)k5B+Ure=~bqH6QC<$IHs5P=x#`V$N!ZK**RVUPn^l@5+k!$2jtbN7iy$Voyh2~@7|h=n$=z!S)>6F#P|`R zIgv%9`4psyz0S2C+>D~eG{0APhMgZdZcl%mehQ-=>%cW&(1SFxGU3h}7ug@FvFu)1 z06%c4>6|Npqr^-)3af5_CdBW_T${an5OZt50%cfL@IUSIBf%M-6nE5Ha2_Q5Ivg~! zMp)^bP1++n-A!8GHxD@)Qe2q#tGk;7Sb?A<`I{MJZ@qXd3M)p@#&f+>1te$?D%r<| z`Iu`sVf4rf=?vZ5H$`9I(X{ku6N{!sqR+-*==XBP8Bcqch~6=;F{1fNTn-G0aT<@K z7H}I+p||A}R0?apuaAU}EjJxN&q+?X{+0UahRyydqGI;f3JOAfVw`wrU^x#F13??RTbV8I)4;{sy-)=5VB?FZ?D-+brkRhT+k&NB z%kd~|>yxGE7p*TjzcB^%8p2kg=7i0fkW#f%AruN@cpnr}0$vCn9C->pnovY}2f6|K zm&XS)H1~`qh@VK6M9FymDr?dg+E#^pN8IVIPvuZ;8CZ9wY#yF8 z8iC4K<-ygAXl@eu@{ULrbI|4Elz6Vzws+y;IA%uFsPSbCl50jRlHL24;HlH$Pgzke z-!>Ix&GZyh$RdVK2#43mTzo{(q6g*|tttKd)8jqDEyqRQ?xGL}i0e-Jb7f%wuiFVy zyrqO6-jpQ=@%Q(@suXVUyQ8P&-4jmxD{o^Mvg!jFw$aZWC(cVt_&k=WXPWMagQ1Y! zQu1I7tgrDN1_cpQhJZc-rp?g`x?;!Hq8`>_=bMwU%9HrR&d{iRrL)A;H+_q>MyyYp z?Y-}YKM1HV;3sJ$xdfIG^QvfNEhAd4LYXhM^%r+ytd+2LUm5ff+r(q0^QU(8lD<U#-y5+amY=i7BgIl1KR=5D)5}?mW(XSu8TXe?d`K`%n z-U_E4$vSo5+}FaMwf3N-(ZJynI93gD zd0TKOD063h4}+U)P8@+d*Gn-|`tu+UJ*X=#i?E$p>))>H`D7Czx*y4AfOy(yjG_g2 z=jvJWn^@77Tt3r%X&1l;Ao+iQjxyFL1lk~rzN)J}=fIrxP$vppWhXLcrlsKm?O8-C zyyX^ERaKqCNsQ>|c{gv4Lt5zRrN!+uGrjCG)gerf2W17f#o^{mY74)4q$pAC#~M>U z2PVnBJXNk3MP(feT@AZB-2n0CGj7Z0r1$cyxSCj7+-3PLG$Nk5;46LKMSe}=e3QTt zCl%H@cgM#-h!007jYg9mjSIi6n4dL{2RYDA4cMj`qQ_e~zQeP5e=9sb`k6_M%pr;i z2HEJ8h~?wWzJ^#^OErrL^41n~Q0r#r$Sgch{@rW-FChh=1()~=UvZsq(tA44EDw0m z1A5_ZSq-M{BEH99SuOL3VvUoV$)hi=0*!lu=S7#0HH{7sQ!>MgX++{HKiO{5C1}3+Y=79e+ueIKG7X zd#arGw*-i!xW*G30ukK#8|P|QhWd)t*RUl?^h)Yxa_D+a(^K@n3ls8($|JX4h8|SI zcAML~Z`?I%Dm6s++Jd=&)}XdB4T2x4rLxqArKJZnbQ%#rQECnuqj=TP5Li@r+zy_# zpfON^3~QzM7AdF*L2PVn-jsoou>`^G?d=!Xnxgc%Vbp0{5y`XTGqRR*SfC#xlW7by z&zNs2pv7L!$4GLE?T@&zpO<77-j{UPPk)70r30x0TN~AXYI}su?1wenTY?dls46kJ zLWi-@D3w6}tuymm5_u{jL-`;YnhMMxu&F;yCV=pRCHb<`Iy-D1N>m;U8F0g-Fon~h zz8!eucA4ysH&UO@PyG6_OnAJg&6QmrzdFqh(2!&wfos>>M!zx1rz@?Z$BVUz%S$*$ zgvXIZ$Wvl6|JaiA*Zw7CaCbg}w~kbR?AB0CnpWh7i8Ikw@FP?Bdu0|70Dvbb^ox|q zeog3TsqyCyb@_LkFDAv`QDx15(|UWnfR_Sp81PA=3?YESCqfBFA|POBMV|3y0+soa zsG+8Y4w#9_Z94Udm6e6X8z?~t&x0TaF2Df_>Iwzf+AmP2Md=0X-X)GpOjPsvN-Ph2 zX`wo}=j}=K^W&|_#n#}AOhv3RcD{ogD=X_ny`4eWlpw7(pyLSa41}VkkvIlc=*4~M zm@ZP;=ck|q7JLHd+=~jZ6|TK*GW@`WXQP4lymX(fcMmd`LH;aaiz!O}SfXB*T~SfN zr0!5t3kXkOhvVNapH`4pvBW{%q_$b`u}YIgv?pxcuf=Qoc398X*kqOi4&2^5 zdQUvx@pb7+*Ve2NOCa@_Hif8IE+w`dCH?-dk-eRE6r0~Kah@KxU~FFx!f6f0dNKz#h`C{uR7MS7_5^cSkNGk~ zL)O&p=%2V(Q2Xv{xW4o8_}gHLD0h};f`1&klNun2+y7OycEO(hyX{?Dkq-0P&)x>* z{rG;ebiHO|8nBSOq5`}oC#~_z^ay^pu5*qH@|R4j7!y>=%`uH!T_g5}_xPZBHYE;E zt$0q9{c+PlZ^rsR%iVg@0!vCsL4Wvgk*5Uy0~VU9!Xyb?s7!wS}o0G4I8KrqmIXjjdbFAp7xAE2RD1#GR zPp4i;c2zjpcMoFn5;K9O23}5SE*~M}wGyj!#jdx)9L32pe<-nF7={jKI%R(&(x`-i zlxMXe-L~;=YTjcA_VY45@!ZDbSq~0UZkvm4yVy@px1?{GPizqy&E>XssUR#@7y^p4#%7q%0G>J)88ToPH&u`O@{_2$*~S4h}A%AhMNIs1yAvffzG$ak$)QFTC=z!*-@X z{)f#W`KQWv%*|m^Dx?=KNKD%w5AX0#zsqZ^LEGuE5MiZ9QsHsyYdB^epH>&Pl+oT- z=Hxe^TW-ZWMsYKdU}WUtanF5C_!)-wXqZ}1>EaxeQG{{VWM*%e(vpr>rYsA#ma9m5 zCc__<{0xz*sgt9e#f`PRM**tX!Vs3~m{NJvj&&(;>)-4JcZIbV=}FUM!R$`*q+1jB zbi=-Jjhh#~PrCFu9b)}w9@p746soyPXyiwJ=VTTP{930`+la1PlT8l|xyNxjG4QC49Zf&fM;=^|E1ag>&o@Uza!y})Grj{k?gAH2br1q}0%{F#dzCU`zosBO1 z=on#`G*qy?&CWa0S~k9D`A~$&>4?WD=1QUEmP0M}5kvjREc|Qqw)edyQMj73W!$rl zcw9FqW(5I0NVub;;~fPB zh5OABHl7wz#84<@c1=uCL@>U!Dj4#EHdr8E8Z#pU)?=4PdZD zG^WSTRNy1b^apI{&K+|Tf$x)|deB@W)POw|X4TLiA)T$A;kYfm3(+DeB1GJb?_E_! zT5m7~IE@?wpfne6@OVGLoLxs}C*j4opU2CdcXWZbD542_>(Iu|U}HTPbtYzwhl^Xo zVRmL%i4&R%^ep!uSd90BSh8%15g&d(%q@Xho~9z(6{i=MmNNCN6tcEm&->PhJ#D;7 z98+6FZ#T_Gi`LxtzKhUI*51!Xl7r!V*dLmC!eMQ$C~^_jt3{l7+~8k#Lre(8zg(|* z0|@_H$ua?#Aeq#sbKb4$dy_1%l5VR)EMO_F=7{e@JaT25wLg$%-nV?Q+Z^a@4jXKR zlR$IB-?cOESX^P@oE!|zj3>S`Qbhi+_e8xqiAzs!yS}!5cGM%@1zm@5+r-@Ba}*&V z6)8_giBx&B5%!}Yp!<tqW^HtKqkxY4`>WGF1Ckd?95%*l|GRctfl0fx~;BzzjmJSnZtgzhUCLM>LHTl z_I6OlD=#AmoiGtEwD}ko6^4cNz|ceZ{Ogi5t0|-3sB08vZ+TC#(5l(+sGJ{b_sCyb zFsf%w8Grpg6ygq9ndy1MywsNZaRm)M^yRMjH-q=~6lgp1^JJ7xXI_r>Xln+Je)9RH zMbtwzetObgckwo*g=Gt5e73-4=dObz{QV<@>{Kq_z54RR?`z8R zru3k(r)sD#T4M2%=ZBe;(8K9|W@f04i`C7tUUoj=f}T4e{!=e~gTB`1`)raa@7qTF z3;z|`fZC2|93$yg@4vkOfWm62#Y05`uDDnZl+Tr+s^+%}jnfnC;qRFlcHS@F+S=T| zSmlt&NtkjqoAva-?sz6V+gBX{LnI>hNkkqVsl@sUM1BQjl(2o>wYIdy)PixxB>+>V z-)X=u9{!YvG>FW2uAmC{4Fi&jnj93aRD}JIt&dGV_@Q56gEq9KwK^rt_cGNcYbMk~ z57lC@Irv*+Tf(;KA&FeLm^&MyOX;Cdb5Pb8@%omS^Fto@`{O6Vi9vwXg4I*TQxl!kHt20L*xO8R_5?lOH*YBiCF5Xi987!MH$q8o~XARcuQ+5^QX!0v4dNd zCRX970W%V;AO62|6nJ^hKw$Rv_k~48!2qCv&|VcsM$QjUMH}khUhfU9&;pH@jUC(30|^kOHOt6FB(B<80v{ud+o(6q5{GzxwFxbZIU$ zRkR7s3gSwOhm(bs743)_&|__}P@Ui9NcLtu-rzTE ztEE6blCPbd!~ptb>JpEcSq6fBnc5izklv-GrD{e``r+*b4h|0Y`-^h+c#bf$291wELg(k(7-4Rf9MwF^r@*8M#uiyRF9s$cCetPh8r@vg(cm+Ljb?wp?n9bNG`KVDZd9m13Cl=&~q zj4>mJ)bc*CKSL;hg0a54dXYhtkm3FB2kq>c>QJO13yQ`F(Wm^Gc|@@@ilF{3A+KdBgwuOd*|EZ_Cjh<|+K1DwaXkhocFg$+0> z>(3<({AmuP=KOv4N)rl5muq3vISGpsUcBM4miQw!^4CyCxM@3 zM>jJH3$Oo2X)`$Fl$rhpQ65n%#ovzHiPl|T_=Kgd8z%O-J~wIpdPb>~*9*BM)HNv7 zi`6-!1<|OtkDeLo!x5^$N{}+Ym+@YRmsE2TURKrf(dR6Mo|y4T9y;cLbVL~gR=!Ju zvkKq$I*6^bfnVr<;7mvT^UckcfeFK(0w`S7qW6Tq*8n7?euFYbbmuUQ%O^pUgDjJW zF0C%KL>gmbN^Tvq5(ExED(+=f8y=Sni)U`kI6%)IL$`~aZl52zU;8OWRPRtk{0f6N z)UC6=>(iaj9AafOf7E`Ur-|)ynx>_$>SJk=+c{AuioWXz@;BmJA6e`sO(>IVKV+^c zOSqfTvQSLH_q~2h#3AT7G?#tcPkO^}Q->I@J|YpveRh>Dns%jA1|fQqJR;Yp!FRc* zL>8-D(dRd%i09ZN*@1V*B6MxZ+?cqOMMOuopw*@jm>(DBzC)RnS%ho+4(&XZ@TJpR zfWYCCPyRYyzhQ1*8Ow+2?xABmyWktgQ;O;Qo#Q*~zbrddrlYeH1Q=gXQgkpU)jG(W z$ZS(|3tHv59h`1KJN8a5sm3U#h(J3!IV36>6Z*YJu<3KbS?N!RR{>K>qGQL6>fCwR z&p@F)n0jaaOiST3N4C zZpsJo@RTn4bL(5OY-7}0ldEAGEeapO*hW_&!z1_P>kpl`>de+-h_;dh&B}zUlSDgsd_D7Lcdt3&bA7GwF)B40qI$YhF{OGZH zQ$|Ty=+a^1?Xw#VaD>$B%=glcLFPtKbH|C0cYP7ARjc(%} z!n?<2I=Sl?6q9=PzLn0|HEgWz@j}jTtII*eh+EuZb|>%g+2!5oT0*x(1C72HfFz~7emxYBL;um4e7=wBy*-Ph|7&^N7JYm~ zUcM{nGJExe*P7s(04{`~-^R$v`=<}Xm9Hh(<3r||wJDTUY|hH#&{?OpG_z%{dvU~8k(59~1B3$op;vG$zVX<~oa9Pc(9TS(~C|5~mQf1f$uPpCB zMYgORO`tIlfP~>x6F4oRHCagnXpWMCoX}tS6{O-!I~r*JO4_KB+1I^llJA=<_&vVR zhg0`nukyj6lbuI*NQbZK7ORTn7t2R|hT?KOD++dK$%^^BG4oMJ?#&MlN)SM%^LNrG zR7*kRDreB@saEEqO0n&JRGL?sUc}y~&dJFM4gt~G(II4%VPkE5cCjrBu@xlci5fu_ z4^vtOADJmkUz;S?;)_0tM-4Vz%NAU>^jklFaBx;U8PC7cjW2m2Rrp8G7!uw_Y)sHC zq+L2cABu;hq%1ozEkQ+hE-_1$f30#nYD0d6j2+Q0fqj&X)T=LfhJxB*t0y)ASzN=a z`55m{UA<#CLLZ4N%mu^T9980D{qCMUPFMKvaa8^!B|;FWRAX*Iupt0A(I_oTE?Sk!d1@(Ohf zG)+5&KY+n-4hebpn*ZUH3Q2$b$Tx$QmHc*4FA~Z2Xo^50B34S_>C1_&N4re@(bN9) zoT-`^gZ@NRp{Vpz4$nVg2^9zk92{JW&!ajFT@f|~z<{vs6kXJ8>E!IDrzFn#=HHBj zE_b-xX{|5^{b|9Bz=Ii0Qv0g~lfp!YWen^1$7qrpo2BIcGA|&p353zq*50^2oMWF4 zNX_TrE?~E6llpyuq*R3X>c@S?s7OdA`_BW;l#!U&*u>=IMkI}_T$rkRinh0X`p^uiElU7VFa&pyyb5jNN_j$Zg6RG%fDuiHf zWzZ5G?JKs5GGqekhq&HEh+?Gua2P4{ui`hPaqAn%-us{gz38E7{&V%^8`2`@yB`g^ z$k*>{aiL{t1L?y5mHQ+4JHGXZ;GLnNspA(q7pfM>knBK&mf{Gq z@qh9#s5^1?F8pRTje&HH507Wj;J5Alls6oeRZc?B1;-PohX{9+#Q|gU(3wX4HPm;k z4TZZ5?hm*UzCMuQIDEnIm?1X8uaK@59FLYD8krQ645M8Ggr~#YZmD;#B zs`ml$R;f4cFpqS|n=SHmpM(&*-3t2Bz{lcXSpms|>U9TI5fM$$u;{QCKLwpMsyim8GdbAQBm%k5s!+ z4djks>UmPvL{V>Ay}JMK5f5#;>m^UW1ozwE6ogC2WEcgG4V54Z)3S0G_AVYKVF1YDbV zu9oMr(1^WGCp!JIsIvHhuV$OBVsv`<_Z?~j7M3Ft8y&tz!|n()*K z4!VS^1XQ`LAUWGCgVOsz8NK9SQn?=%iVSyvyXY+%-XTU#96qZ*c~UT&!$>94$|s>} zvK6vU^q$5>3uZ+MMrZseU7K4@a7e1R594FP^i5Xi45Gjx4{~>D$_~9GKjI_M z8!)1uh$8T21Lr!M_f$4NBp2=SytiPA%K@zaFJl$TM_s$T9~c-YymGL3N43T~ZLhuW zR=(NR1eH3YK|6!;|8Xv~XssGm`vFCf7{(HaUWJ@Tu^w+q!7i9R!@eb^37sQ6LFo2^ zdy|=yR!z>h*ke%%6BW(!TM7Zj`&;JHlxI|u-(x*Z*Rsst<0*JwX@o?YV7z~n_8CBd zR(-Bvj)}sF{$*^gaR+`VsnEe)GC1GzXbvy8?7yv}u<@Dh|1tI!Ky_`)7HF{G?j9hx z6WkqwySuvtcXubaOK^90x8Uwha0@Pfb8^nP$$j_#`c|wY-nrmilL^87 ziFxl4i!k!ENaHgrbhojH?M4wi$@fDz^bywsIzuXUv;Bn+Q0q|<`{5o`u`qH}6m>BX05cL>m}^ zL8G#v(}`!v(}vLs%^{~y|gUFBceg(J)?9XVs~{}=6|d9p(Pi+1s- zSG;3KsbH|uQEk{$8L>rJpC%cV0GlT-+DTBRfi0q1DeP&LkD+2yZEg+Yt<5&{p-Dlj zWE`3#jtb`O{Qg)}Jd7JE-O-L@XI0zn^mP{Do*B5Rh|q?jDmeVJPe6zi4Jn?2BF1!S zDT9%60;l$MZ73uJ9&hftXkl3Hsk^+vi#r5nMqaA`zySl6S9%#bw>m9ny_T~@+xem^ zV%49%4ONntth8R$kYZ_u;zYU$ce+&O7>fhKD~Y-bsD5l#B}IhX9BL+FbIK5^->Vw3 z<}8T66Gz@uJN=&B6#yh+lDcEBO+vv(3=oH54i*m3zRcXokfTYW1f2F>p5!OFozS{l zb?+>o-{e`2S0Ps&KQ^}`UdQ$z(sJ8S;He~e--ZwdTbu7zv4aTkP&Hm6v!imPkT=?u z6)Gmf+ul~OV_n;Nr@*ku4zmAfJ~-rKVS*ZRkrkIkLR!QJJAH>=H#(Mu_6TQNDtRK8 zn~yWK*8hR>f+GJ8cWjP@=#)#(rRLmJ4Jy*&9-pel!yQpCXS=gP9v$T)C3_ju1FfQn zLHTM(sl<)vW|8lw#GCKKHL>Z`fMqr?7p8RTx>@zJTmMKXs4NksUQ2Mw_ml|>gGhnZu5T&Ke^c<1wRiaWLl+?tSt zRkgJ2ibGmQI*_^B$O;4=zN>KHMi7^fX!ccsySR02ZDW96P)`jqIwa8o^U6{G`Aroi z76EmAF)Pq?L?5ea=T}s?vkHs87gDyOCo6zHkysS%wAJgZ0m1Z$Jvh_JXUU|z=Cfde)3D1 zqDm3NO8#v|-p`OGW(f~qLZ7K$&yC2-^eI9)L$z-?`4(azO^l3yk&!P(fQcdpV-&?v zg3L=Eb7Ja1R#M$^d>&tICLIXSZdt~o+z%b`f*?uUCR$_#7|kv*=fY}sid}T3;E7^x zJVc!9O~Z^V_lR6ODJ0Cv-S|pauLqP@Gl)71z}Ov4LQZ*r@L=t7MSk%=5K47^HR8zE z97f*x3B?;B#!_wM`Ic#r&+E(v9a;)I&!=BYsZ?>>QCFBbwBCHp4xVEfy7ma*IZAkf>*)f#{Fgu=o zu%cXlr6x5dsEg zR5KDlZ9#V6OidoK@Q7IF@;OGZnQGUROq*cc4mkfuk=9-gS!xwEjI3{Q5LA^=v!&A* z)6S@e_#7b>IF~oWMuab8=Jg&*_;uOw`Lu-{_zNjx3Z^LUs3`bytv0nQ6w(Ml+X-_YUc(IU$q)Iu0isJhLy&=2n zjOgy?AMjG%WrlH~Wcq`_G4aLu%Y# z0LduN9cb@S(*J^70La1w1VCFU2?+`5!>a1)>bm(wMMaIy7dihDC%r{|fKoPm$~W~D zpp*?EL=bhI{HN%z{fsKcYlEmyLNvy?Ku`6d z#ERhuM4KxN%NhiwN)?R%dZYiqg`uyO0y+(%bj6cj^bC|z%p3auCv5#?#3h8cVBZFw z=WeM>W*&5|-iVIjw!4rApGcGD8YhR=JqYi6exd%^J39}7g@z2jt09+eoGse2{B-Tz*s((2AZ7Thi#PA<8!GN%N2mCRXhpyoDKm7Z*O_yD z$0rMNyXqnj2NEGx`h(87@WJ;cpTY%pH~{$>flt z-x2uDR$>7ae2*Er`m}w>!k@K|LRjygT?=6_{q|C()KO=Gqhrz{l}26#Y;0_9j$X9= zWLYxnuvSDOd@uG4Sy4!5kzC&AF#q=*D#!zi9Vg8Nrbc0p*7lMVceOr~n&ezU>00OY z!(SDMV!Ys=eq;<>FMylSlXf|*+uS?@ciQWK#JBD)%;2K8@8SBUsTn!`^rX@fvVfSf zeIBY;u6IJF&1k&?H7?atxyAqSQd4(Q{P@9)Y%aYmcvgU;yQdAaS!yka4uF)7lS243 zJtlhV5K|uE1};BYU#72>RthAoE@NAr0-8?@372ND0(o(MuOs?bjhEc^0-+OW^g~t` zaqT!YRLhfV(&-%I=}Ybhy%d)t5g5!@(u{q5q|Mn3a*W0;>u({D@eFvkFRb-=b$n;i zWdyHVTYS@%aHFH6)!Gi>bzy^-qi&rYFKiZE*HX=2H6_<|zM=j1PR&D(UUwpEt1w&e z6&URaV|CM`oeO`3Q^tROJ1o-s0q68=r^4Mq#pFMzj?+}#cKzH8E$(!s@?BgT(sPrf}0l8 z9$}=QoL{h@Y2j|bEd0wnKU!kI9i#jmm<8`f5%K~<71|9vPB`ovRKh6f!0?f0{#11| zXapm^7#h%l+m~*lMCuxr-qW(NykAD=H4llSF^M>CbltzwA#NvmPj_;TnoyDClV4?Q zTM}JUerf_c>4RUz!8-p5H9&V=nj_k36GoD)f27qG&TIbCSDA0HMqy1S)t>e}V?cTt zGUqdi{!!bv95}LZP_4CuM$a4k30ZkI8#!cv*Z4gZ-2*|^q)*X#wS82%^|-6z7TQDF z^SnVgek1pMs^Vcl&HZ^HFeDu-OUlytI>`-b@g-Hsa)E;*R|^+ycKS_wh2F@z+${*Q zv4%TPE*^=|VnfDhX*uECNho3Aj@tqkgf1xAB%uQP0wfMz9}px$c?W+4CxXgVi$xFH zhHXalV~nzO{!Nv3djU|TL1f}|W^B|aF?XP2sc_`jbt<3F4zab6LoG*SO1EsLYLjI9 z)u0}$dxk86II~vX8WkC9&qi2o9BaTk)P|*l%%1rJY33p{((YRnpZ9qlyUhWCG-LWv zI&l82i-V<7+;Jy8zuvt1$$ZRXkFhUh(G7a^!F|?}6Rrpt{`B*Eh~iqM9OatA>MIVi=&|-{bXE?UA_| z_HRx8a7beOfASKb-Mp8lQLS9 zcNAWN`AA~GJ1^BRk^C9;uSzs6i#}hTL!F@>UKmEhFTO2F^VcZ8s_^b0`Uj)|n{BMm z70x=koLfkO6UMJQRqO(}Ybu^j$jxZCbxlbOw4!CqAQPVqId4|3gB&;1?KSTpuT`vp zRksbJ`u`Dq^$?~y>_nuX%_#`szh?(-{Y;ytB<6omh;cqfB_lGV|74iKi1gPPitu*6 z|Mk+DlDwxp$M$p1wl2M7o0P+CM4zm|;Z|6D!@^8|e0GWbTg~K#9!_>cA@!OHqz+!P zBKiUUp?~aRV~&KyDbp6#=1Ie9z3KLWa%u;fHw$0e^2^CNZ`NqVyDd? zgF_$!Ykhr2+}RFRQ^hd{53;oDZ@!Bu{Wq!e{8Zv#(81B@Puh4-M#C~GPojnU4CbcI z#HUWX%I|C1__}V#>f+YTtJbJ?L#OaZ)*4_3UM7;a+C#EasD%4jzw9dF{MEG>R83g z)jmnQ8sbc$xpXb&l521RBQP0o?bXJ3R4VqF(iyowfND1}`77J8)T)Cq+KohvnB8qG zk0Hm@^&;;%;7)935u~V>_|j&u{oK1Vdek_0oeBK$19Dv0vGN8Zv?F83WdwLd{QyXk ziK%e6y*7omZ~K}uX}TK{PKwHOif4$GsR9_0SC?%Ic zG2Ey=34rj^?iQQXmAeXMkZo3Dg>BT#6s~89xzO0~{eDctq~o)2c!{!!Y5x1o15~%` z`%%?=KiYZknLj8lKnUbxCgMHtop>0Lzr@isQD$>MH+osN!zl&F5x(6d0}B=cO?>;2yzV4I@5=*Pu7gNf`&G6I3iz2I@(ECDjQ>c?_i|qK) zxVVDq{%r&=`;Vj0~8cn`=;)zN(GE6zI{{EnMRYwec zp2|Y#yWIN2@x?+cW!eFgGFghqg(tOGLajP~q1Pjy#22oah@jKUm>p$0O( zPL50VD;a0dFG;6s!x@Uk{mx{*z2-wH0Ma?+7O()R(%l}XPk*Zs`$Ym(#0-C(68s|? z1|T;G;8=J~&)^tSn19^NAD4s!!ueX5KkxrnAT9QWM)K}VZT`piWB^rPs;a6G(9nJv zT0^b%d6ITUMkM_F{9@+9KLNiV7sKo7%HB3GJQ&#v_-!&CAmS#>il+~S;BPz_YS0RpO7RB(7a1(nFROQQcmv~2@B0zzeP-vE8Xv&H^e zMdE+|geb6me=VUYAa?V!YsA1Ae^DHRLXX-IM?WVk2b6I+dmK?@d_?im8oO2&#HGO; zFHh_7OZu|(FA(<38(a5!PZV7Ado))`Nf;9vtS)=A$=Somw`2__y`6N^cO1o4f z%5|&CLPvcZ4A7iH=OQF=P$4TyE*0uuV#mn0phNe1-Z;9jYvd%Sv|fCgH`tiRL4-?P zdbBY*W14K6qWz*ez++$0`C}YO;%%Bh_w3K4y4}b$yMZ0S%>^DeLguwZ>-s!1nWSVo z4D*%+;|g$WY&X`H2EKLgbmye*G;LX|EyA@APnXt7Rd*O`!QXCFA}9reS+BVIuK}$m zNYz;*xc%e0mo6D&9Bt8rUz|Ji<_(!h_>2F@ivaQl!)HmqGdT$>F%o=g3<@5~+kn=s zeH~2|S;QyVvY2*6qr75j`lIbO=uQ=x-O?UH3-o#@%$$_7=9C4@{~?CPe9I}89Cclx zs;`9_9S@*-ff}yO!EM>5-)V@w_s@IJ#P*NkXOYpM2jJd_aq-qQx>wy;Y(0-ylQL3$ z`PMZB0*wUjq?03yJT$W7_t!^GOV#F}*gP74rudR;N<^p0JsBhZN9f~G^i_%ageVWN zm_GcAHj8P2h@Aj+1b9hdJQ4*u{K$QpV(ke8X7fdU?28pkbhGHUF_8mq`?~h{+O<}j z5pXZtReSvYI}oPBTox&p#0hDUqqfCz|4sOmHmr2Z`_;Dt!AMw4=pB&RGc`tGJJ|sm zKMlRo$UyLDC7D&|A(0IFDX_cFxbohn@=Swr__P>%(Qg zLu>30dhrHY<2}QL4+7(%ucDhh)mIqd*b88I4on0?9ee*ugKAfJ&J|iSW{7^Xc(6AE zl8hNZ2F4Z%cH~|4X}ODcip4Vd(=fr+i5IKa4b}Hh?R}bU+fr7!kN=B8y8kXGRiLre zp)%_Qaf1QdotQqFMHt%Ke(|D$vlXG53R0!7tKOQ#fgoPK-;#g7WYFg7EfRuO*&u72 zkwwLZ*<4vx@P8#cT!sG-NJf2$J}AroZwjNxoI9MY|D!NslWKAObZzni5hR__oy~!F zu*fieA7kYgDv1urN+Nu6T@Yx~^%_;Lg$P5F;tkU9_)0UzcSc{J!|o1ygL4Nx@-WB$ z)Ur}GeC&RZEHFM{)rG&n&_ZxJn(BvJk(^QOJls{PGxUv+>LU^-k^TYtfU<$+=LYE& ziDKC5>$oN>%Bomp=!~($t-U_48lrWDKbCkfuMnb4N@**xH{HO_%9dg9%R2LQ@z_8B z60De4bU&f{(LC6$V3hO20b>L4;rx_PSQl~(B6g^;ZbeM#I)kD}06*i~(i()P<>LJ{9Kg!AT2N$VyZgfeKho0w2zalD6j|wgN0> zpD7uUlno!(56>~V!88wR+$?dyvs-4-ou4$`#qjoXVrWnYBqK=Q&~%2o9g4!Wgd)#} z(;ru43}#3b2_<;^kh4Sx_&hJqd1fXzP%;X|eW<4X;aLNMFgePacAB6oFt(gvX{2KjV|^a%W$cIp8Y`BWYl~TI_$c`4LJADF`A6QH8+Lqfu2Mh=*_pmU918;Nm9niIn*DIlH4vy(rKFhsm_Xc2_YwE|EnrJ-9K zAJ7uAXhWkBOWOU_(%fbyB52h3a{zW9L?%ynO&YWc!f_BP4)}%cdiRQi&B^qdMA%MC z&SRYQB;Pjo&FCZAzW$f&E?~T--JJtM_n$}?Byg1_@f9uQTsTyBXQk695Gr(I-#w@? zwM82=ZMKQGbihfMpO82|v9izbKZUW9u<+3BCU@4f=PINgU(uC4tAwx5Az<@3z8fDz=_esbLT*Aj3F~9%Zee-XPH)Cy z6}Xq+d0r>YoA~`xRr@$!c(lCKHJwI2jXQ_{hCx3;n+{t(8Enxp{4+n-JzYbckJ1+9 z$0|;xP$Gx(pRn2Ek$Rs|&jd>-@kmC6)XdWAk?XE;!cH&{I=+{Ha|_ zg9~69&LecXBTFU4MD@%yPVzwKr$&aZ{5Cpjppw~YkAnzw(d6cJd<9XRhCkX+dW8EJCk{OYVq&BS!-AU8?#B%KchoN!eQaGj{!%S_P z7q4RQJiWs--p)CRP!UdIF9NnNM2_p^uAtEH&F>#3n60DEJdY#YK6P|AySYqU9|ubr zk)9tVG+^WHwl_zXNQ;%z&)VaUItqJ)&W=P8O$#`(xip)&*86uTp}?hyp_zy6$UoW? zFJR_3M?A}%Ejl>vgnSuCUMF}*eN3x+_EHe*klUSzxL~&i14Ml!ic6ps1Nj=jCtugIGEMDnmVb^76(pczK^M zBkIGz`@9TvwAJyaEGBMMH)SpkG&@2FF#dXZ2Diq=GvJG}01ovK>hb6 zDeVN2kkdb+DFmNb&|*^^wJ8|~%}JYQ41M1-eX)_fyDUv;dsWCg#_0O3DDa+6%sbNw zbE>B=Y~`UTdfm-KbPvQB5zk9mlHM$>zU`e#XtfEV7Fd0UOK5kqJGoTAU9rVA-HE#$>Qk*Tg;Ey zPzp)J;lGk6GT1(VVoksp%kb8@$)NSSkaSQTyeXqyqp{Y zpt1EQY3u@$;mL`}z<>l-=E4#~C5b+5y)EZ*X9{yAr-tI=BwK0y`RUXxr(Rl?B zwx63Jk}trP65V8mE%aJ6L^_Ittc~m`9b_mXATQ`^|q`{$KvzxdOC!3`;&n6!hYzZ|hY&)t{e0tHV=sNiQxFfZvHBAwYr6 z^u?-kEPh**g(0BDk~%3dF+P9+O1uIBKm7QhpVO0)f&l`{IlOjKbhu6?e}qjE#*s0nI*;ngSFEfM>(J z8yZ;N#8qwKgyw+j3mHIrJpdh@{<`DB6;P81)7=|*)Bm#K+l4m(BT)N=39*?vrzb#{ z!!U?x#)I#-^El4U+{fB+`;6!Phw-L0j-M1;n8d^>Q=$Yp&gB z;uTb9Dc#j!7G2<<&1dBl`F{)-sbv=LiWO*jTEYEbfzx>=cN@iCLm_Tx6Ya|kQ{vN~ z_l;MxC=9OenM>R82emnQP!^Y-cGp*2OMV~wNNABs$^T!w>l+xfy-%LLFW^cp=c!UqR#(nJ=D^}VDDQw{inNXxjR76w|1gl8^b-c+{}BCK^+duDE_Y*;U}=g{Ci zv0^;qLDLHoCc=+6>Q`0*G=F$lzT&i@V&i>37N4uAJkV~QFk!B0-R|}&z_VHD3|;dx z?yzvVo5D}cJ%#-{AY*AQ20Co1SZxdiI<|hs8sBUsb|6i9T}qTj)}+ zejZ-JkE-i{S9yevn}1O#ix~bRSW-aoImAx744=3>;;C$@XThn}yKuTw35Udk+%CbM zT-7iFEsEwyOz@ql6;N^0qp!z%#8Yze>L$(hpqt*NNT_rDWT=vYASpn}$_gP4n(r=7 zWHKTv;%rP?FVfIGAJo!04SJqN4~IK1NnXmoJc@}&l2TdT*E8lsfkwzij*1nyS6N-_ zTh@l^>VjtA93fEh>is?V>s`5selR}p{^{3=MiUnr^hjMEotJkk!N%l|cRTBGs`yzy z7GbD4vA5-Lu~nFEg*|5cHeV7&^+4hyzYGH{nQ-YrHM?Tcg9PQI+BvN>j`$jo3V?dD z1F=EEBRrpDPDP}2&p)s{xqU6eazHvFDoI1t;H1j391|XdJ=r+@5#q!}#NX`~BwBan zeZvaJBknJX;&+5eKG@!btFC>~HGjn) z^j?cDW|E}QV(z6{^|57aX`OZMWlQBzeQYTc*4)dgdRbfYn*{T3CvFx6Vqw2e5oC%d zO3E2DOCy!KZ&;A4-s2A{`?I14HHnOJJbP9VcScjzltp@X$L$NlWy2)59cIun_m6y9 zL%n`JZszU=37UGLq|yU0{R~>&eP8^m=$#D@As&4?-oU! z)nJ0!oIW&1qy{Z!TTLMLZy~0#|Cn3W3~Vpe%YejUv`+xd8zyPbC%NO4G%+))!nY-t zG=aD@u;NxAOEi9Gcl8vIVS${j<_g@3f<4%`eGqqgXAy)Dk>b`V!GYYcT_and(_dZs zMU0GUP``^>zMAod9Bo9OFjt$geAf_f=2jS#`^86GUa+ZTw0wuUuJ|%`{$*Jl02WZ<1{3`eRVcM z&gCaC?lh++!RY)SY-r$761*Uoh)C-b5brUoL}^v<$i;-jQbdbPb6jBqbygP%RK8xm zll7A5naI}Pn7jNCsD|A$gCQDjOr#WDcd7(}#b6&hP|(XI^%Fw!T8C)QqO!j=wS}%T z_5w|#uQXo-K{F?IN^7I1dkswu(pFSQqij~UKoAUZYa6Mvp(=P1V+^m&Ncz`fFWBx9R)R=O2|fiKG?JL$U!@e{O6j;Mtp>$>L3Z zVGXgDB4~CORC-K~oaVlBFYgV3$3Iy`NWDng+Kj^*(0^Vznr3xRi0U8XG>GD^uFIm) z#_P=8AHQf_7~kHm_LHm1N%^Usn|EV+%$?B-tPS^hz-jA_!#HV}ffSv7^7cH1nq!u+ zJWOeIIfsT8I(aLbGlOZ#YX)V0j%Hwe%cWkAL(Y18Z+eST$8e}T=?H*Vp9V@3dh17T z&fr7R4v8X@SM)<3C$GxtioTGl2p_qtVmETION1W~l%uK@6$vz-DA zs80YTo_}nLvWqyqa|UhOMk@8BzvOFRqG}zz&a9HVYD0Jx>pG&J*Bu_IYkkmwlrcs> z&wK7Cphwq~cvE@eWVA!4&eC1{oGTq#XSQSkg%L<8upV2Nn4~o`vU-vof}cX{)mBXY zM=U8em{rI@B&?fTv2b_SSa^ z*rk8*vtN3$%LUi|`bdA&#}7mKEW*RRKC(_a7azfv0TusN$6Otiq~2%tfyM^shIDQ8 zBb;B+oKB+@tDkxp$Qq6aU?L=949x-4s=%1MKPrW?!>4l`ge5z2(1b4;Eje=+Dvw8i zXpdsZ&gT^%KL_#O>HSI`#vmt{I3X*s3N)E)38{n;v*CDOKn943m{~8|prY zb9(mqNm^nbP~xiF4StU7x>8=8sIv`hLwV;yPVbCF>tECcGWs(Pt<)E+7!8q-dJl0+ z5Y6TbqwX?p5v8p&E;a())$2_Gci(3ufEzjU^PX|?zs-i21<1R2+E-X&PYm9N%y>Cc32$|s8&eEdS73teyBRgd62}O zRbHeJ6C0-1e`7<9G&1u2zWvmsb7BoO(5xZ@{OiV|inHM-t6sax1{(d3L&V!g79gX~ z?dV{6X1DPuKJIfbRFvh!KX~g)X;!|D6@FvXE@9m;cMY0%Z zC`wt6ib(zkE_6P71C3`iAHe?Dlz)9-N__{G&$Rq%!1cQq|BFc4XhSY!HkSY-Bqj=F ziO%oyqUt^|Fl=mXU9P3`K>>(fu@78a=}RgO4m68GpvCWisHrjc`xJpzKMTFx1g|84 zj3uxv!w3nb(A8ia170n>o zoIS~*oaEL-R`ZmU%z$L2*yX0|E+WA+uufm?fTC)?p=F0D2E4nXj=E2HTYUdGt6<() zQW-7~c^b^+_f1_xLq$7L=Gsp;atiGk$i&+Vt-30<<#*zrg5nAllOC2)cgRb84#*v) zu>&0D^WqS=x>Kwi*6SwoK6$q0O7NDdpm(im(>)#Oi_UJ6mssu&CAuKLKIXu3nziI) zln@=dS7IcB-5*}q$2gc#1U@_C_Hik=zHW^CQqtAAi_*MfN+3*_|{zq{oC^@=Mf zTs`PwKszc+;-K)nYm-BF!g@a`V)H;w92(bChxw%jvggo@j0%c5kW4#~5l6cU4(mBE zr>Gohi$XDhD(%sVZm-|I?`%GEvu~t;wWF9c4XVnd%l!O9(n}RgP;AMmiA^5AmhP|t z-`9Jk#CvAHd*=9i=7@WxZ=*!oy6kd7{~GyiiRBT?d`DC>ot0Jg#Iuhm)3LOKHK&xH znc5H-=w*1dMn0g>WlFRM;)#M3YVqEKuvkaVq(XRNp0<9i-2aMPxlG*y5L4D5H&SD_q35K{`oC2v$fToW@8R1W#LIt)|S ztF9K3p*tT(i_mUv9`YsBL09+aD0ksYFCu{^j*K_u{t7$>rxk;6KrP=sJ&%6Ru?%S4 zsh^OsJh8l?P{^y!*g*!8k!7=22>y64pM~aWJQD`JE+y2MuCo4(M4vHFhDiNFc(}=N z5)(waI+I9PBnZ9Rx*y9tF>`Tr^|;Qol_ku*6-(UUU z#t2lz%)Ya|1+sWGMeBI+Vh^Ac z%7-y$b?UxrTGx|PMmJ%(!>HN&-nU}i!OxM(LLpIbU(P zPx__8)?%HjHn|3_eSsjp@n#ud`ied<1}xY)p`$l-Tk?D zUXZq8V}WPspl%0x;h7DbL(*7Bv4ivJ;fUNIL`!F6(C3b=gfziw+2w=gO+E)X!`5zb2ai}z14&+-}Cnvu8ZfMcM_T%(5W4k5#XP|b=F)y4;ITI zakm7RWK&+hqXt4 z?ruKlUNYc5lIwGJyA59)|J(L7BjoidQivvOm6Gxc^ueSWrPkeF!&!A@4vG&XcYjW^ zIhvy0fy}M4y3;9brtseQPOQOl>xZ98SZa9)!P3B9IYY_ppKBhnWMx&TUj*Ln1FNyR zx_P<>YKL0|OwRgn#B2hu8UBL+cGG0rKTxw@N5*bQGNE?z%K@u>@jgrx9LQwf1%cJN zvXN|hI3R(JI8Vwyl{+9>W9#oxMIM`S%6;x+4rOg@&S)|B4sQ*QE;vePsw8&-RTVu` z>L`jtD$-=ZoIQ}GHCQt!Q@~&WEgQeR`=xC%mVC5Z1bo572Eo;V4(!&RWiI`?+aI4> zBs!JL>=C|ezRfv!K|R!=@jedfWqV3KCczN}TiR`NxsB9TN7hbo94q|nl^pB%Qg`1V z>X;NBvE)NPElI|UdnRa-waaM3(rCltXanYGgZrL(x|91OH|n?MKXMof1aF2lYrZ=_ zI-9thn>X3p0(zD5qceU5*{Lk5p?TpRY;naL$HVFC5}&ud8&`LB*oBJ4e$37&F6f5( z#j$Z|5GaC5;~N>>^HD4}ibzWbYZz|HDUQ&S00S*se3q}V!LkM-;cn^QHszNWfIdD@ zVNO-?v*aY={a%t7?1!6XafMHwfr*1_M(`qp11)S$Kvqi>3xC{0?SlY+bJp{BTEUYePu8XS&fig=%}I zo%B@0#;803CX&ZU_1BTw5vx_k+-P}!WtqNNm=~m02PIrqm!&KY(zM7XuTH}o!nnh^Z|9^u5i6+3bs ziD8LO_#Xns04S;0&pTSFuxErn-@A<$P+0160)1zi3&DrWk!@Laaz{QD8*u|jkG@d; zheYEl@c*4eGtweYbOfIqM?G5|3GqjO2#EC#(|?8bCnOfZGCYVK7f|K|emZ8iYF{+` zOp%v^eh&v^qU#0ecFPkVE(WD7tTXQN3ADDfr$1SB$}})T(|@7iT>V(;&|j;}>~pBO ztD_)k4f37C$TDoy7j4afS<>PPKzA6hErIoYR@aSs17uv4JY$3!=SaQ2SGb+n{=#CYc_p(n{nhfvDZ2`OPO|Wn++U2gf>G8DC^&YLBtMbK=llf;|K!7AR zRZ|&j7AjBml!MC^-4$+2R?s{#&OL`@Q-S&j`2XPeCUQP3O$bj)O`4s( zK1l>uHNMzyS~|FiSx)U#O`vMlYJ#9!-(y%0O|pgs{7bfGO17@~AGYL-%o{Fl2c$lC z6SdEK;CVg}5(1xE^n6eq8X18Og2xYxK}KTH50RUKz{$(*p z(=g(y6}87MMYI=Gd=SVS97*JM!Bb|6sTapD(BR0Y7^cY=1Et}^R zT)KQj`NI=b@)-%#>Vy;&#S#o_u$&=9ZI9XJ#G#nI(v)qYGbwhg!kL^Wl#>&1$&q2Jzma{S}-C}4fW z(36Y|4RvWawy!#UKp^1ZMN*k9DPT*n3LsLM7hSd%hK=jb;ozPc@h9bs+0ApT&e0DR zdB6J#;idYHG1ufMKtj^3o6)ad8r~`Ox~GzkH^fhTlneRoWEbS6_Yp%)!sBv9(I1Eu z%H;O2x!4jqI4CqtRqDeb6Hz40+Vm;kCdn~ZoJzJ=jC^-xiFZZ)H?#HYUVT!8vgAPX z0nOE8y|0J9k}lL3!*gfS$7S27?Ia&SIx`6a%U*E-nX4btPiea`N(~Uy0c)exMud( z`g{tV2Q;;{wS&jW^0I1Oxi}4A5y?1waMDuuf`svD`%gQpKF~gIG6T3UL1>QLw&@UjXa zLH(uAZ?$R9H=WSW?Fzs2Sn+?yh;WnUi+)B4|14uH8W+lgUgq1M_4RyO5zh1eM~=pG zK+_bwzSsgg#%PCkBc1ZWUVHa$F!Ti3d<9A?_0(UF&6P9bX zEw6|_HERf{6u0{3^hjgu6b8YnM)pAUWo_BU^e51WOMMSneiSA5Ia$K#hGzt-7fLk3 z1ls*k_iIdgte&L@LKA0J&x|QZZpjv%({*wSn1sCR)CJBa7T*--t`?O5D5S8t z=qNPqN?K{VUcz#}Tk`pLn(f0^?=NTC3}GE@UA8#gJw1~Z+B{E}BeZ}K4a|&8BZj<6 zkd|c70I#L!`z|qPg%j4qtkuiXjyA1R)z0f~xu{G%PFDd>%UG4rU>NI|{R>7%1jE27 zkgm#=C=SKm*7fm=O2P~M+=~kmBDPVEI<6%IDri0yT*SoS0qCAr6==)%H6gu8AA?Cd z3!EvC&18?N!%n_Z?CycUHIS-@Y>003L>pEy@MopSfM=hg1-%53dm7Uks03pg{Zv0;Y*osP5znvqo0R zxIis9EW}WkuG5(L$|Ysgp1SJZ8n82>ua1E-j52%DvRu!v&%J}(Jg!&cU}PQDVoX~& zl>!mqt^Ok)XUgy%w)O+|dAII<1xq5877S=OrF$@u&4fn+1aQ*4s=(|f zx2x-oj{4M3kzPSe%1}xw6zW>5_ji?*4FO90I7q`TJJSDfFIW4OURT0T^;Yccs#j2c zTy5_KDo>B)KXQll9(uZ4;IqF^)e}ejX_}hrIj9hRR_cSTjK^!B1L{EoOa23l;Y)N% zEC>h@$fCLF;uK6q45oyHo6gv*iQsyZABWS~*30(3b7k|VTIh=~1pLHz?GbHTvYHMp z;XD6{bZ0}o#e7U9Bw&_mP5r{dVU{)u)wtjcU=RycfH?)6oEJz4ZxqRM_#(?9P#_3U zs(8bmX`-LB1kYCVlXlio+B`!O!XYS9uT$Q49u1*t(2gNehT6x-u?@7(AXn1G^?6d+ zin7t#O>_)LFvX-Vn!(B0kAozfiw@5Z>l`+45?fDCk9;jJ(}`(Kg~@NlYLkTOTyX)h>|R$eDG!_;px0mW@^Esn5?`0sblrt%R&Wi*d7eC4Y47XzRbEhmcyQi5R3)-|{bt=ch#_^=__Gk+ zw>xi5*2vEo)(qxPx}g zb!-|YLcOf9|H?d0C3^dotuEsdlaNFLo_`daoY+7zC@Zu2RuI(~?`f{P!`YL(2&n$# zS)lUBzAy9A@`AikZc;q*s9D%7cFj)qMc-B%r86fsr$T4=wQ}*UDy90K2QuzlL%SMA z9Ja#mY)W9!M`3eATS5Dw{nfQY*q-*x>L4pdOm1*p6S7RG2L0K4>m*(_-Lz2HTn6^U zu#^g9ma99xat5Dz2G6Lk@Qc6#@&|ervO;{K$Xf%QSB(gEgyFHX7_@p@g!#%n=_Rf` zKVHSX#T>36k;Yi+K7?sd1aF)Yed1WX9Me3%NZ^8rkK~1Fk7h18-#R8b89VQL@1UiF ztt+GN5l`3lE8SvJpd%sF8zqzYPv{6x1_#*~;1d%^WOzN`H8>qf+}~alF~ig)Y_9Bn z@`_p|_IJ%C_KBv~4Ckskq1}UCvvl&!@aTK#piIA}Y|FJr&EWyLqAY8HQZEI_On6HO zoTsu82_RY~%sgx?s`%|u*(>=CI*GwY$H%}%H$Ok$yzI0n_$GIdwwv7V=s(UCkRG!b ziqDb2EW)qtc1jLdNQ;S{VRY1-4ygC)zPR1^I8nr(&i-ni=IjP*wW~|WmT?gl**&Fo zER*fFet}TZ_t&GmitwKN+BiEqi_7oK(rFg=a5f_JiklV&dTbT`?vzE@p8f=meExdl zc<@0JOY3K~C`y?Ea|c+T>4goF%C-O5d6Wyl=V7k%C4ZAV35Es1YS=)Y&Sf;ZQI%kj zZ5`_%AzTKggyUJk9*UWBE;GI?W6=1XC++1CSW28w?r8g|B>H(4;u6ubXC%zhV#2CA z+OK>1PF1D4E}7hGak5kRT9?AD3yhCK(dS8|9WNPMDDy|?w7;&Pa7GaNIB*T95KuWp z!-|?_FfiJ==&GEjs*&Fr3uf$de|eK%?len!%|R47k-XUzvhjOE0-2C1lCv;!BXoCl z!8AA?`1<$=n~a_b>_+`Tr|8GATyDn#<{Fxe%h;lhOC9xxU4eo;Im_JM7d^yMF3FQ3 z6rAGoR`-zmvUEom_D2M0Q~Ix-_gZ?L9!h^x@5RfuJ$jimK83N1cXaY2>AWKeqZS2r zf|-?o9~0Z1@l?%A2kB2ES|*hW(`R3UB{CS=KOZ2Dy}ICd@YMVal_~Q&3;{q3 zAV9g&jrw@FNKsW4Yp%vJ(0n4#aBDDm<%I5p))2;fJqFeAtv|b~y`8I>lfrM{itdTr zv@-7rkNx-pv5z(63(a?4Qx5#e`i+fwxVw!g{yuY>#>a-_#*taPjFIMPB=S%UV^WVEf9enWz^vXjx?Y za_u(RrGG-X|`a^AH43%^8X1B-+DH(*byk<{3!uyCGJ zKidW$+$pe9V=6xQUu+h~t!>;YN z;)4(8HA3NwJuyp{I9gX9j0Q{z8)C_b8sds7lV0vsof04Qa0$F=ZBUXuPjkYcifE3{ z4-IoG+*2N%2_zBvWa1~}t&nZH!|zB#T($Vaqna3EuvvYF>pf9I_$>l~ z4bJmU(hanA06%<`|s~|Se;xZ z6id@@;1>GfL?SSC*0(rHyR@p)`wv#f*Vi5aIbFge|2J52@os;RJk$>B>HO{n-`wKPeQu!9-h4^jTg{t}Jg@_U}uqMnhf-h>S`*I z7bYH=Y!%p4z^@mP!M77kA7OOA(3-xw@`>P_vACg-kDh&B9n~SHmq7*YW3;kqdzFIL zw&>}a5}LF!f@i^Fm#wgk-5#4CdhSNIM_#J5FvG>VwNDW60rQc&OSj%WV7^Asw}IY3 z;Zw1o*3!1$3idaa)>HtP2R7VnFgY1(lbU_emAKmwFgw+3p}E6Voz0M}GXvX}5-)Vx zy}#GZnWDY0)LKH1EA(aqaI2#Ab1^Zo4=Q%?Fn0#s&4n>^v=ZYRt`}Bm(_1Y8NM)}G z^ZV(Qbt0S-k5CZU3pglC)V9$WJ_`R3f*Lfn6m7C!iks%N3kVFRF19@RP(_O(Ko54- z1kKlDUk5mTxH^vu8*WUw{&kSbxH^eJ&Z$rMq1wLYFtIEKB8J#KIC}jYm?(X!o9Seb zLTTQq{%}E_*GRh(uU9Sa2_Bk~;U>|^{)?$drxd7!!@yS#S!MbVq;!zK60fdnPuv74 zG_nUh?>u`yK>7wWQH7`N%-NmG%UN!57=Bv-*KyAreXQt7a=Jx13Cs&7cB16snbCoT z5Ol^C(B*gvZXXKk&|ohEArNkd1C&J(Nv%xsHfXCAIoWwU5{{?!tRihbm7zNM(A))` z{-#vAz}52W<}9ncPHdN{)8P)d_r8HzAbkirKIvuzN=c+VJCmwnYFxlPnTU8BV4qo zk!0I-tIcu1PzT7&!8*L}?G~%n;4uGZGBw>f`%$sN);hyuoin>nlbpDGE?%?f=%GSpJQ+$fGiYJ-7ZYq*h_+ ztglKqaaADdW}fBz_S)@dd|niX$#1agLnr0EoGpp^6A0>$jw))DtH8XJ0<Lgn|sFXWK4$BIVamzMkQtj~XSzb!n07B8i-;fqc%PZ55EPy;$e7TN%HJDG5?e}(c{*KF}D!7NSA_j^?rlmBw1C%ZY~aA zVF|i%#9JdJI_2>Y`$4*T-50t`>bY%#Tx!K&O;*7>Bo-N25w<%f)foS>=s0D^JA|T_ zm#HtWOF3FJ#ph|ZZ?GiZ-e0*X3H{_Pm1GiTNr@8s6Hh55fp`c)rzp%&v#69RGk?~Y zuG4lw-ot&IrcKtn3hB7-$}sy(9JeFSKs=d(rMJc&DES*xs)CqL>Rp3ZfA3zk8hx#9 zv+&~Ql~m)s67gXvUPu`UO8aB2P1g~H{@d;q6L6`sWzPENXaL@W5eJ=3<2SrJyHWh+R*z>FS6Z9 zZL0>gW9^L4q#ZZsp=O%#e^D<(@gb+`#_HzPGq%AtN3+f2hN&QHrYoV6gRRjmSnC(NKSH6zZ-iO$-HQAzmE=}#p)k&$ z$bAfErY#!}%39S$mIuBrsIzbKTV3^M!?iu;=vOl&#DcF^ciCZV{nQOz74e2+$1Xd# zQcT<5nV{+H-L!u*B;vk7>OOM%7=3fZ?>~fT&>ryecx*!0ucE~$pbf#DjUD4_9YEGx zASyldN%CMKlI-U6FDioLWvJ5wTNW4|Yr0$C!0~ePRp2bkYpUBP_6)KI1=$OiDWb;v zS@2x%0GS6&h_46C`d=E|#_3JWcuS8UJs5Sb-QAFP@7fItbD>81wq?>!-iUbzxZzSe zH2ASDA+H>5hjYsMm@d6nw+hkEVP@KWrU8e_VZ9o8+q_I+xq)D_4?gIE2}RRFzSESX+QV(=s}0IoWaKVGR3&%?o%uDbOidCn;xziJoR|}z+DE%8 zi0f|5Cgy_`60~*lsZ5JWJ~g^Dm)F>d&oogV+Zj#Nh6>6kTlXeX9{_lgp(ROmTKNS- zK|bL@?3KGrGvQj(fM|NUedO+^)gbO(hy>k6vNUNz%*Oz#OKSI(YYP^a>qcTfC5FhvQNQNmUqr%*W{OxxhP2U4{ z<%r;pq9G5o>K2?~t6fA{d{#!uX-e${!7`v$O9t)Z9EqD!{4A%eR_NNkNKV(^c*y&_ z8651js8~Y3?Xt=&%XK8Tb>B?2XjSyeSiLoI5$bA&v=xKGvqPz<{`=5k!5pLm-K2oT zNPS`BzI}EKW-CTZ<#@c5te6LkNc|H7m3i1(gf*|tYE@mF&5cCPL}$v3@YZeO&dmC= z(G`12>bk^DKTw;Uy7onXs(ymUX@&yRgV)Yh1*|X*IjeA&?rr~RgraGc^iv{D?Q<*O zoQ#f#7kqQJtzphLnd>eigCO#qHEsumLOQ*nG9)P zVWRTpp#TI_iGjeaxZxDhm53&MI!^);sq7F4axWk@`PQ;`V_$3*x?Z`MzT@+BoSI1C zDAj`AsA>6f<^Qe1?Su)7>CrtfhI&B|KeTztB*{j9>Z^)d*#@yOfvd};Xo|qmqbo8)a6)C;lE@hgO|h#v-4*7~01nn(0274$Is6@Qj1ZuuP_dpIaGYtE+ z-5p6%hJk^JiRu1uvrQMDD+08JmKr$hOm<`0eIW!s#i2q-N=m-7P!H8eKZOue{-&6GcQy*$U3h<%uNn_y26_cOm`W*Q5JbNUs3V zz<2YtjKirsDu7H(_TM`dgaXvxJ#y)fK_Dusa?>GvATR32`B0GaKvq-8v#2*|TQQ`df;biS$%}3B?bT9n$eZoM7qM8t}TF@AQ|_?MgxyGD0XQD2R!R zOG~`IyE=*t3k$Qbq{sVH5-J8#14gb;CZZqRhYqw7Df9pWgnJFm&9z{vsa^oC=v08J zuQw5&7+_y!Xp$p|KgY{ecFmy}9dUAyMHBpij9MXGXKYH@1NgQ8 zv@)R})CJgu{7NuB+#S(LWs*N#_B4eH1%U}v)Qs8(Nq&st1CZ{?SXt4n=WD6hfd5cM zhiq!pr2E42kEaSq02p62RLK|-Xn;@A6^b)4H!ib|40t!vDzvt@ zLjvJ-pX+ycCpfZe7y19MgRq`D2umS0?UipUP-gI9cbp2CQrQyUWhF3t_9TE3Vkksx zhSuwob*i?n&RFq(N!LD~K|p2n=M|I6if%Ntj7V;q1@7aU$!g26iM~+_=}fbc^zQ(5 zz*zezk$s4o9x|8lIApa%D72^m-#!p)gq77#6)?7Mfo`09f>2 z;=MXpZV_T*W3%8yt4#mXJFlL4r^c-h{8`Lkvp*hJ(4D(eQc+6bZ}sr_`+>$n3!Y@i zU0C35G8lkcO=koVAEl&FaAaJa*JE=G)c_emVgO%$#EJ#K21@&8aE_o9F;V@mm!yCR z=)n@EbV@!84xjULRVy8Wh=HEkj-hTOPADhxCT?^ka+Hz%NbzW%uA|<^H&Y)^bH{ao zQH!H&T|Z&5T@z!_s)TN9YYPerQmo7=oaJs5Y(iT1tn+uegvA!g=|Sri--z0p{F;8#w}Ay-|^)d{)rv z`p!kY$jmCPa(lUEEi`kcQe9G&>vK)I5G+Vpf{C~>K}!}{-+X(&DTjAm_8q=%U#Y) ztIa21Yin!SEY>;l(i}l-9}&fQ#u)9@T}}+LRK2fx+kgWdx5Z~P@&c)X#tiqhEI8H zgkp)ops(;jGtmGr!_LaeigCyX>}+4Exdf%ZU5_G$AK4F8gF`V|L=)sZCk~oI6(22F ze4#R{)ywV*7U|(bI_t7_ADh`RNPMhsrCJ{y=DRjn<+RF}Kue@nXzk8tC|8|41b8k2 zRXB(}%v}SQ>=ia0Z0^(FvGFV3l>g9~Yq&Lg3>9b*3Jj=8u<%GE*OieB{rH<00D?gu zEzWc;zz3#uzt6KCTQm~%D!Xm@y78K!)K$YT&wpt1FSyg>|0~CDbx<-oaAplVyXnkg zUl0h3vhTrR$_LBT92|x0_0}7T?K<3=C8(4u zp)Q=amK|LkkaN>Dtz6Z9eDipkWuU?hK1ScQXc3q+`Ip4)4gp2y0IME|QYn6AE3S(zir^sshB0p48%8%yNjtNml0f>*YBC5G_ z0wd7K_`I^d<6P2EHjJOij#@&UKOUi7>VbWs&}Y!yb}?c;*Mgwx^wS0o8{)=u`<;`p zsGc^fNy4Y~pHM$GcPgs2{S)Go^)H)N-i!hKbecylGeN`P6_poX5^3yKkc`3z0pN4)#(&l?y%&P`(mzxQ&Rs;Tvrd9?F?N?zfCp;E{lwk>y)mk(ukqE0M0LRIf4|VI{87qc zidrlA6ajhV#Sx22!LD*lBC*~Kkic{M)an)qZnAR+cz%|v`#X~9jx|qH|NPL80P%p` z#c4~gSG3?zV5wTS_hC zz^X73Im-+7#K%>hI7|@zXyD9xBvxG&CJT0V>A8lv-Dd_ak8@19lXo; z{2_^`o}$aH5rDe8x1XKtU{j}_UCsURP+l^NHXd}MYxA+SCY-#W-^m>j)$)g_z#vL= zAAHIG-05@X%chVpHN1k0>mH7e%@GtbUIr0VBTV=qYzaJjD!{DSB-vTn_n#|GD=#+a zvEIc{dw=Cl1AT2yK3vEsSk5Urk4kh*H-p2tFgse{YU*{MSU$zzxXLTr?{pu5+9uGBpv4` z1>}%ec;Kgu(WGQ$JEF)$GXZbT*)|P*{TAcl#u?`aZensoGw$R<%P$_{wQk}b8sdA( z7|goBc`4HsjobN{l$?U%N&jZgP!X?0N?JOaP=ortX+)t~@1izHElU-!wg#vRG$xpml=kFn$B+FO=NKC@2yDj;@=QZ2t$*etJT*S&}Bft!|{{R!bj&Cn4_h+jlD;>jr z0YZRY6cG_|eRtGCCD|7=14~6iL;oi3^e>&K01a4W)ZtAF{oxA&Tl?ebS?zZe0sru? zlB7@aEt%bDqhn*yR{mJ{_#uGokWSsl-0tu40e_Oon=}BN-n>FLmx88*uB@yqH|&7z zg4bY O_>&fw7b_Jp@ckbyu=>RS literal 0 HcmV?d00001 diff --git a/img/github-cli.png b/img/github-cli.png new file mode 100644 index 0000000000000000000000000000000000000000..c3b0e7707ebfd6bb254783dad12b5627b87888b6 GIT binary patch literal 26790 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 literal 0 HcmV?d00001 diff --git a/img/github-whitespace-changes.png b/img/github-whitespace-changes.png new file mode 100644 index 0000000000000000000000000000000000000000..9a19a10aace0d0e7174785af8e249a42e44adc2d GIT binary patch literal 29217 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 Z!>CWeMlV-~fa)ZYw77y;rN}q`{{f|}@SXqw literal 0 HcmV?d00001 diff --git a/img/llvm-cov-show-01.png b/img/llvm-cov-show-01.png new file mode 100644 index 0000000000000000000000000000000000000000..35f04594347a398ca8321faf85fa018b192fa843 GIT binary patch literal 416748 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 eb{ffNh(JNO) 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�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ℑ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%0Arl<=>f7dzSI3d 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 A5C8xG literal 0 HcmV?d00001 diff --git a/img/other-peoples-commits.png b/img/other-peoples-commits.png new file mode 100644 index 0000000000000000000000000000000000000000..e4fc2c7972e998819fef454494a513682d75eb54 GIT binary patch literal 301512 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⁣qx_={3ZBm;IJi!F-<#-h_qD)!)QjXJU0tLWFk&PD9|^Y(BwC z^%sMQApUsxHH`6I-Q}-&C&OQvgD>iiS^L*N9&dZjUgNcX7T`G{zK{HZ&0O9Z|&Svui9JG&a}d*j<2`MX#1Usq_pp+0&smQamW+A8TR!!7`6lI?gr&Fa@dI@@_`+ z)cOyo>e1KOj(M2yE@+KV8rJ=I6nmA8qRNs_7EEC&)XI60k4F&!BAR-4KnwDCjqo#? zS|C;+s3-j*3%>4yO8${wZ`)y~QBBzeq|B!LE#xg-3^?^ z0Kbz^HGPCcme`TeHz6)Xvqd}BJF%nyo)8JO69EyA$Ukemo|fyK^t$Xyd+!&gQx?sc zE24%Xc4pOqPgwcKMqp=NoY5&STJ7PRyg09L(ifp*;^eTCXa106MvP?Fez~Di36P6Y zR{LsL07ZK`-oICJl9_sMfMiNVeh_H*k>13<$u=#}cb(!vu&eh^nO_;2;pcB}`9K#f zT`kjQ%jP<4!Qtb0vUkB2Cle0S@6A)&-Wue(j)(HbvO8jK^OEQ$&UmFz4^<9->94lD z*c!I8QoRt~bg)e0C$4p6vDLgzm>J(*-8%3pZC_WOVwcjTyyPpGt(pwJwAMe4C%%dm zl#og6H9|J*Q4rRVl)c8>eDonuaP9t6ZZwuoZ@SnI6EdS#m+a%=X115Uxq)PtNP5j) zUr%;xJWI4a&&TIf->3yR=Mg4qd|~HvFdU-h4{x~EtlWyMo(JW zJX-HUp<`0Xnd#ZT%gcYj@(Wb*^F_ytzt|iNr$BxT(o9WZWASBq-96Fd;XLNt@yJ2?e6s#OzCX#0v=O3mwp%$jH zx$lfR*~wK3E03Hs*iOx@^w*RiQ_Kaa00sWL;$&=j>7+qr68uUV?ES9lnjcJ*Xed3~ zeXJ1V^bSm=Ku5PM!nVS9;a!$W*r(Jq-rjD3KI)3#3lg~4w>0WVXfl( zHZm}n0Dr=6<-<6|^E{|skX>-w!E8B)YqN`RRsTmXrZvqjrk-ZrKbsfFFS12TSRGNp zN)034;?OwQp<*8LE}l2gY4*gKFAZoZVLc?PBXXJ?&SXb{q&C+dJvhp!%zq{kTtRpz zk>f~rz-fo;1KYxiSBVSf-MNFlyi@QL}x$->2lyblTLaJtnH2Mg>+sw3aAxPr!2E_XweUlkHg0oBK1W)tl4&tB{mCE z%70=LQ(b7N#jiAoP?9SsB`hFKE#CcbmGKnTAHv5OnC2r=6Ogd>4O6L>2KdNQf2~sQ z6zqU(PV+vDAn#Ur29hX zREcytpM<-%m)DUB2@M@(Aq4#EHjF1FmKof>2J_c(ak^Kqoi>xniz{Y&l3jnaRaH}y zwcD}D!yJ8(Drl?B?ZicVZ3cFGe4=g#X#L{*%!2QA#m@^<+f5bg)uY@v@gqo#_zg(KRXNq$ zE$2)2=q&2fv%VJ^y-t~z+mOXN1sQ&>C)QUDr4>rNcK|aKN zAB*Z+P2l%B*K=AZ8|syDwpng!UF}z+WVsk3B5_xRdF+_t9C3aHy5S`SJnS`2$uv(C z&}BS0z$n#2MFu=_gK_z%%{i`B-;V`~ZQXUR8^d1b&?M)iPv9Nfr!ShPE&h5ON}dsh zP1Gme&R=CpeSG8^&pqLKrM_*M_7pVK0Q;<|yTM4fxAJUHLpg3N6s~+5jo11ww9uW z&!UA7nVbSsP~Loj)?3!To!3`qr~kdwSq(iq>kecoSMfprl>50@NTGR6U-O6*h3R@z z`jOUj@XS(MPkWSXZKY3;pCD!gHavESH}z2LUX!SIZsz$?PT`>GR4QayGwJ{haXC#{cY1E3+`Ab4^Zd{#yb#)Z zT}pNZT)WBUSHBMuxhd_hdAbHtjh|#X9$EB4;jrs@!I>c?%yXU54u4yO`ip>hQ z*`3m(>LKW^o$JxlYN!&{jScfdEsb|gsc3r-4w6&zd_zxyH5hH+nN?x6vyPs6ZqV?m zdgb;;x9I>m{2k3#LaB7kU9TTquCP;Yj=aF5{aD#*WF{IOne(FQyQhARlhelpr$<1V z%jjIOfjcskbx}ad$s~XB&T!a%1Gfvy?ZL^kw@)Clj7)fwP|Nj|vEpa(WhbZ46D;9f zA6gncsma`UE?s{TG5#bv+sO}}gdSfh%%aReF0Sq6oso_YW3ml%mV$;R8P_m?P%ac| zHCa@WZo4{We~cuN$skrZC^xQdWdEc>nGTGB+s%8Y+T}H5OK?~K!jdhEbWiD0#hS*? z&&QqZ_;*k!Dqj^giLPatX0J#djmsKLcIWmOfWOJ=M&IB7v%L3+Q;WA``F1;;UJqmQ z)5u=+)(v4O-F^$mKaH<&2iYNe2YczMnPJSV8+AZzjqf;37osiLey+A)Y z#Dz(T-1gaqm5G8pgz&L1+jwLF-ZlJ6bn;@K3sGKCI&y4%Y?&6ZF+wCA4%0DeB9B|l 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

    O5(6T@Op14LU%SyW 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

    !A|wK(862M+l7iKarVQS|DZAAV1&39pre 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 literal 0 HcmV?d00001 diff --git a/img/rustbot-submodules.png b/img/rustbot-submodules.png new file mode 100644 index 0000000000000000000000000000000000000000..c2e6937cbebc1f39bd5f62101c0a89453f7137a9 GIT binary patch literal 26028 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

    ( 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 bcf{s=f#78kpG-il?vVaXlV8ep9HagNIT~2a literal 0 HcmV?d00001 diff --git a/img/wpa-initial-memory.png b/img/wpa-initial-memory.png new file mode 100644 index 0000000000000000000000000000000000000000..b6020667ef00ff3a1efbf7007e6df8344baaa5cd GIT binary patch literal 312637 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

    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    Fuzzing

    + +

    For the purposes of this guide, fuzzing is any testing methodology that +involves compiling a wide variety of programs in an attempt to uncover bugs in +rustc. Fuzzing is often used to find internal compiler errors (ICEs). Fuzzing +can be beneficial, because it can find bugs before users run into them and +provide small, self-contained programs that make the bug easier to track down. +However, some common mistakes can reduce the helpfulness of fuzzing and end up +making contributors' lives harder. To maximize your positive impact on the Rust +project, please read this guide before reporting fuzzer-generated bugs!

    +

    Guidelines

    +

    In a nutshell

    +

    Please do:

    +
      +
    • Ensure the bug is still present on the latest nightly rustc
    • +
    • Include a reasonably minimal, standalone example along with any bug report
    • +
    • Include all of the information requested in the bug report template
    • +
    • Search for existing reports with the same message and query stack
    • +
    • Format the test case with rustfmt, if it maintains the bug
    • +
    • Indicate that the bug was found by fuzzing
    • +
    +

    Please don't:

    +
      +
    • Don't report lots of bugs that use internal features, including but not +limited to custom_mir, lang_items, no_core, and rustc_attrs.
    • +
    • Don't seed your fuzzer with inputs that are known to crash rustc (details +below).
    • +
    +

    Discussion

    +

    If you're not sure whether or not an ICE is a duplicate of one that's already +been reported, please go ahead and report it and link to issues you think might +be related. In general, ICEs on the same line but with different query stacks +are usually distinct bugs. For example, #109020 and #109129 +had similar error messages:

    +
    error: internal compiler error: compiler/rustc_middle/src/ty/normalize_erasing_regions.rs:195:90: Failed to normalize <[closure@src/main.rs:36:25: 36:28] as std::ops::FnOnce<(Emplacable<()>,)>>::Output, maybe try to call `try_normalize_erasing_regions` instead
    +
    +
    error: internal compiler error: compiler/rustc_middle/src/ty/normalize_erasing_regions.rs:195:90: Failed to normalize <() as Project>::Assoc, maybe try to call `try_normalize_erasing_regions` instead
    +
    +

    but different query stacks:

    +
    query stack during panic:
    +#0 [fn_abi_of_instance] computing call ABI of `<[closure@src/main.rs:36:25: 36:28] as core::ops::function::FnOnce<(Emplacable<()>,)>>::call_once - shim(vtable)`
    +end of query stack
    +
    +
    query stack during panic:
    +#0 [check_mod_attrs] checking attributes in top-level module
    +#1 [analysis] running analysis passes on this crate
    +end of query stack
    +
    +

    Building a corpus

    +

    When building a corpus, be sure to avoid collecting tests that are already +known to crash rustc. A fuzzer that is seeded with such tests is more likely to +generate bugs with the same root cause, wasting everyone's time. The simplest +way to avoid this is to loop over each file in the corpus, see if it causes an +ICE, and remove it if so.

    +

    To build a corpus, you may want to use:

    +
      +
    • The rustc/rust-analyzer/clippy test suites (or even source code) --- though avoid +tests that are already known to cause failures, which often begin with comments +like //@ failure-status: 101 or //@ known-bug: #NNN.
    • +
    • The already-fixed ICEs in the archived Glacier repository --- though +avoid the unfixed ones in ices/!
    • +
    +

    Extra credit

    +

    Here are a few things you can do to help the Rust project after filing an ICE.

    +
      +
    • Bisect the bug to figure out when it was introduced. +If you find the regressing PR / commit, you can mark the issue with the label +S-has-bisection. If not, consider applying E-needs-bisection instead.
    • +
    • Fix "distractions": problems with the test case that don't contribute to +triggering the ICE, such as syntax errors or borrow-checking errors
    • +
    • Minimize the test case (see below). If successful, you can label the +issue with S-has-mcve. Otherwise, you can apply E-needs-mcve.
    • +
    • Add the minimal test case to the rust-lang/rust repo as a crashes test. +While you're at it, consider including other "untracked" crashes in your PR. +Please don't forget to mark your issue with S-bug-has-test afterwards.
    • +
    +

    See also applying and removing labels.

    +

    Minimization

    +

    It is helpful to carefully minimize the fuzzer-generated input. When +minimizing, be careful to preserve the original error, and avoid introducing +distracting problems such as syntax, type-checking, or borrow-checking errors.

    +

    There are some tools that can help with minimization. If you're not sure how +to avoid introducing syntax, type-, and borrow-checking errors while using +these tools, post both the complete and minimized test cases. Generally, +syntax-aware tools give the best results in the least amount of time. +treereduce-rust and picireny are syntax-aware. +halfempty is not, but is generally a high-quality tool.

    +

    Effective fuzzing

    +

    When fuzzing rustc, you may want to avoid generating machine code, since this +is mostly done by LLVM. Try --emit=mir instead.

    +

    A variety of compiler flags can uncover different issues. -Zmir-opt-level=4 +will turn on MIR optimization passes that are not run by default, potentially +uncovering interesting bugs. -Zvalidate-mir can help uncover such bugs.

    +

    If you're fuzzing a compiler you built, you may want to build it with -C target-cpu=native or even PGO/BOLT to squeeze out a few more executions per +second. Of course, it's best to try multiple build configurations and see +what actually results in superior throughput.

    +

    You may want to build rustc from source with debug assertions to find +additional bugs, though this is a trade-off: it can slow down fuzzing by +requiring extra work for every execution. To enable debug assertions, add this +to bootstrap.toml when compiling rustc:

    +
    [rust]
    +debug-assertions = true
    +
    +

    ICEs that require debug assertions to reproduce should be tagged +requires-debug-assertions.

    +

    Existing projects

    +
      +
    • fuzz-rustc demonstrates how to fuzz rustc with libfuzzer
    • +
    • icemaker runs rustc and other tools on a large number of source +files with a variety of flags to catch ICEs
    • +
    • tree-splicer generates new source files by combining existing +ones while maintaining correct syntax
    • +
    + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + +
  • 6M7POL5;Ad-1AYzZ>cxuv!VlsA^fYE>p<(Aa@$YeF@h|4c=#&P%8w_xJMK`;BgC z|Dp5G3!nR?^jYCCPJpOaU4Ei_TLL017AR)p%1GD){Of}zAQnB{hn|7EkuXinR~ry* z*rI7hpveEpRs(#VOPQctel z{O!z&5rzuf*a6C(#;vA9db8xPBI3~ZAO_1wn*&kS+P?`5c0n)VdM8z(?}In|$O$<+&v_A}q#4CkcBb`Nym7-Rh`>!5hTj0l7%Pu~#Wy|t0R!8_H$n=%bweJ}(+C_YsACuq|XM(ew zY)YR!SG617ZRon6Qcai8bQ%xgjat__(fL|)r zA#;kHzD&ZkCdsX8F($S4)$|wIcSIm**0Vg;e-{|n7Ebr&SxB#lbS86(6lLsCZ;S!7 z6e^SzBQPQ*Dr4OJFOM+iLq-~@-vij4D}J0S4_gKm z%*;7^sLsZBopl!FQ7XQB(`v8U?Ts76c;Wn3Ef`Z4-A~@1fbyoYIsO1oXYG4fST9or z4=ZEn4uDBHVKeVX)WE)D?CREQVisQCe4}nYdMZV##-Iw8ZjOHdy{BfsEbBX0Hrx@T z%pY8L-{gS%Jo9!*_pRSee4A-)k!RKY86a(eAIE*+(A^tzro?4?&&F;WRl&&%NG5{9C#E-%9?*SP6iaD?otQ|to%y%uCVkvE zFUKiW?ug5f#@KvR?FMwvR1{VwsvqoRK7zPDB6xo$8p{Fw=rz}WYSbobp1z9X>QE8g zvRHFub0YE8TRg+^?a`I5iY;pb!HCApjt{S{@_c3m%5T*8CK(|1nH>Y7=AWLrZQnuW zMF5{h-~*es0e_c=ebr;xx?k$6MPA=aWR9Lf6b_=_r@4Y$?*2|R-CEUI-J zw`9XlJ~?u_AT|rXPSsbL(*I1x+*E;BdjbEu-X}|y2 zdJwmer4A1z0Sp3u6!))SbR+JPaQNMgRDy#yLAJuh%S?@DfIc_|T_@vS^wI3HeT>d) z*42bwF;dUrT<1`S_3L2^lVXq#;xyi9+2d}w{zVn}+}a;EnXw-Lu7&`FeYNI7SRqD?vNpM@AuT&ib+vw{n(a9} z#Dx9U{GiwRIVp3g2NX@*gRl!XQ#>E@MbI=Z&#W`H<6*6a*THavM||g7kMLf+`|0H= zWzai>Q^fFPn_ap_LYn?|DT_nY+0Tjhs0F@F*DsSRr3OZR4MeX6-2BgKWRZp6^)GNA zj>G2n68enqpHNWkN-9o^JCGEOTI?9UXD4IQc^pRziwJ0|Zy1DJ#wYvXrkomvIe2o| z|3gUKe@P2l?yRm#7^=^~I{d_R%`1F_$2){wkh^Lfd+S?cq|b?}ES5(lr%BVNa%X7QrZl80c^(tj{$CKa;srNT z_8G(1eV(jFvCLRH zXx;2)nU+z>03g<`q@*PKMA!P+JZ!H1x+|9NuO-N?;o5;^0iU+R1PoWe)&KN2RZ%gbfUIT@N{=qrY zf$uFA`FEGSf?Mt(#R&9~&I!G7)wLl5gN55QBN1b{^RFO_+~N~u-{PLcm`F2))UK0% zcG`FRIY#^mR%1z#2_{>9@vuT>={u!*)r8JhwKc|>S;w*?T0WW>TTa%c67k4>Kr&d6 zG${tr8fw4{D}1OF)$N8pKJ;yJe>}{@Aa3K*3&MyyL({*UPA$M- zit0bS!KOJKTtxfP)CC18G@3jnZqqVc3LTw)cZub=wwih+sb6Xmx2_Y(8D`kP!_Koy z?`a32T~2uO+zb-;<2@8b?S_clVc_)Y_zW9~W>&q0KRP=#|AqBw&~V$k?_B!0=?o)R zQ!*xFTmy+NMg1B4DZ>}(0uyjMVfHz8pdysFUbVWWo3EO(ZoOJuROh@qk_M;bHTP*y zQ;HPO@TjYUp_D)7NUAB4EUSfz#(INTs35ZvOi+@|t$NaO5PIpH(Csk}m%~0^lTiy+ zfIt-P?{C1VAl$5U?ZPddD1Fm!L(pm-4#p?)fKfjEq8h2g94to{jjsu2$(HZ|)yLK| z@9uOGOH6kxch`2~V~XmL%;TzsmKdYqIHQ=t3=PB=y{Zr1O)b%r8ms+fr@lXE4~+9! z1lK~ET1&im>}d1izyx1cj@r~;!hXQkANwvG+c*gQHd}Hke~hr8GX-vqTa%;zFN@LjTiL*nv?kU0pDGr z`%ys?mS5Ru62^ie2oPg8gKI2&eMna%)NJ-zu#{v}*EL{DIg5nh;hwY)bUvO$lOjKf zmrqCzRcv3uPs#2qHJDoeMard$kAYq@I7xP0C>(ccPYTSp^7{ng<@mgGn(&7gnX^N~ zerYh^H(S>&P=0<*lfx={q~9oR9W*Od~cp=WE+XAkA5;5I7}t|XvRW%)2cIV zZS9wullR*j^~1rbk+?+L6?9X1EeGch!9A zv3i(AAXYLW$@JB*GmkCxr?9hW6?qM8`XZ*ikkT%-&CPSS8noX2<=zPYRaDy;9CrbS zLav0Rl%4u8R;xnmb${ex^=QR~*oKj!xrZpF>Zd<=!`;aA$$?K8Sf!h;jE5ZXK4BvY znV;LrZ4LkQ{fAdofS|=>c^|Olmz4^{ZV{#`g34Dq|4JQZ{Kj{q2oisa{d$z*Y=Azy zQStr}Cmx5irKkfJ2b~fxcXZylA{x{lrlFf8O&|9B4G;q<{LCuQoqVY7!I`7J_au}6 ztGv*!>+8tAJs(1Q2%1oOPpnMrXPc2)=u>DSZNPo~Xv0Y}&x@~)a2CMnVFUS5V~^AO zcnH z_ze*Tx8fq)6%>kxbE68ClDFBi_8j;95$Jw;L5ds+4ejyT4qKogLXVA1x@CQHg)2Y?9XjM1>i#H1M9@s< zjtrN~2jVbX%(roA(3ZCMbp~)hxtcPhZxJ#9ZHL@Ak-mdh=|E6|*MQkr(c|0f83P0B;4O}{m+b7Q{+dN2e)SdM!)iEiQ)yy; zfH8cI>G-U>txfxhD(1#Nja&dLNP{{L3>or*Q_U}zP~|ydM5?u{HReM1vJ2=n9AK6s@+$g=FLqR-97!kKMzj-?^P|T&rMn&E4N}-C^?Jsfj=3RaA z8=ylI;V2^}ok2E+Fi8Cc^Zc)%i>((o#SG>AV6dQq>R3O0ikGOR2?5Xn&-y~+CM;5t z_=@7w`I`@o`wo9TfPYh(#ZV<6Bv&n)#ciTFb_+j+NO$8HrNC@Vg1LISzGBZH(tM%B z+);ah4eawX8Q9Oo$?V~2>?~3YrlzD>Akxe1X{0tS;xYJ^O5xh<6jtJQ*j;DJc`1$$ z+uLdQK?cmLBzJCp!N@E9Krd5;P5Hl2H0fOEBOtPL{JRo>RgOctu9~*_G+#%Q0t{@x za8fyP6WR)Rd#k^dgh`;;;-f=Mso?(+P)UaL8@oGi@2{w3dw@|f)>mUZA%lNUe`&4^>cH}qIb!`C1s@t z6-LBvqyR!NADKkD9dC*my|UiKEZtaW=I^<*_JtL}3o zh0ASL!AmjN*T? z65>0pdN!ud_Zaz9XC5#PU^SCmp%3sksL4+rp-fZfnba{DrZ}rrgRPC1%ggpbM(!zq z!zjEC(6MH*rChrDI*DEXbO#tIcs@C@bzm1``3@8`#YprtqRKJwlsPx$q%ZKS$tpQF zMNr@5W=5#xwO!S)C)Dz;=;0^e{rTx5e=aO&c^J#&{|@2`dN6_|C6=iqZMGI?XiLh%`D_b z2Vt5MJSG`pk#ByS4(|eUkjD2^|AAX!`??<$yMs+fLBHD@(s8WBAxJ_u+l=`f8JI;S z?!Y8+4P1|Q?V&2oJ$*`t6CFPGbV>JpoN9Q&F731lQc4%hvKUOtdqta7n`H20t(Z# zN>^KvaoihKJRL+V0*8pNa6@~zK@;zdAGt$2D9koAYqlPj2DEtV@L&YEdEdrX+X07k zhKJn=gz+W-j2w8Q3H2=014r2D3pBaoix~NI7sJ!jyn<)Wan(~KuTmoXCR8LI%2iEB zy5Y-2MX(1yMcjv4{f?ZEOqZKB|!ivX|!!m4h)n=|nq$Odo4RxdZf0XuIPQ;~&3!9d8f3BDCO}J|ddqi3w6&{Jejl+EJ(;YX^GN)srfL{|8fC=gr7 z9&rDN&e6xxe0_2~_{5?T;meg+$A(TT}rj3AELinL+e$}c?Q-0SNbWQ9Js0$mz zJlA}Ebm8RPMIZ)p)texB8-?R#3^1K*Cq-S}n5nCpJ8MT-j3!-MUG?98$90nslV6KYh%&)_q`3k$L;UzEwjUtq9{4Bd2Bf?mA@LC z<4eT0_6`{7M*DIJD{Ptjdkzai>vCZ9N586Ma(x^*mB6;IZ~uhBVCx-(Z2iFb93uSI z%J`%F_qJ17Fj=EO%_$R~?2#ya=YWo{`VBdGn@93l5XDX~^T0V=QMh|QNTRm3T@0B{ zsPR~<&yjSFqGtqAo|im!US=3u5SV6>Oa*W$fX`}qppbsWXD*%`e^>M~uUD9=&2E2u zbF*wHP5FDiXBm%^taM1-kq1&0TF}sMVQ4`Mv6ICiA(w>Y%AkcD)bbU_^DXN;_rj`Y zC%Abo-^Z5KaIbrMmhO*;jLFBq{XhO>&rA|%wyHkXF6?!@%SadddP34)4OEJ?fjDJD z0j>V!FjOb^>zXd?GU#(AF?x&H`*!0ox@@1Lm!Mw7&DWROnz|BbNJV-MFrDXxodK-~ z%PSOu+`Zxq7&v16v{fI5KER_v7XN|OM&J~{O z>LaOZ`V#XYj16IZ-bBT}>#NP_+&#An_{2wI1d@k;bhW(;G-n0-+UMnm^rVCG53yw< zln{2*M~>%c(q$Eptc-1Zt%+woHyumbq9$qf;NW%=$}ewL}G^ z(41DStm#>8R!X_p5|w3xyr;)TgXF-%gud8wVL;%{$Z~D~h9!+S)539`wOg5<>hWj- z0A7IV>vfp6+EWpA$x83wO!EY`WIkP2>o6lwLyu2lzPXjeC-0|0_mwsVO?pnzjG^6z zbtX#aq8|H*Vz5!uQT?84D-3UP=)|Qr2D7L<5a#9La1YGO{}?ZEzHgJ#ZeA90eIy0Q zmL^OH#=&3IhG;iJdbAIiF8FzCC+=pu?wX?;^n|@pv)b1)(WLx>mlDoT#5fC$u=v*f zFtkJ#r2wS8MB_3FVtDkk9vk_&y3A-uivIf$$Gs-#;|COwjE#EtC^nhNTHl1M4yGNR z6(d!AF{A-a>cod`sI${HN$zO&k7a%JcN-Zw4~dqi?IL&(Er<@~y!xy5{_X7@|E%G* z#z^y(jg<3mcrV_@D*`saYfX@e#=E9lIi0&=JJ;^7G~ip1$pEiUEk$qQBuVaQ(zp|+ zf^vB|HctcHu1v{hRB{bZm-@WHQ&HIB9DuvR(Cy!xaA3H8C5r#qSN=UQPY84-Ku#Us zmJINa=s`!<9E<3cc3-P_g+$P)*iD6?-*x+&ZEdEGCk?_A0yUg-($g&oPkU@8y+H)} zPUcA+Z3>)gr*vR1d+W&Egr1t#&X?Pta)OpNI_jeEkMj3V?L~ zPA2GEmDMEyz0@)RMs^As-hbQ=|LK}BH!Lq~?jyFle@3@pu;1`xC*TvCf_~CL|3epk zM|t;`JA>cqztjfz8PZmt6_0IPUtJ94wEq07_b|a{(4%E5;NQgj?(gj{>guK2R%Nl( z$<^2~)#8P4nLU9rvf(KnInZ)yQ#9!kuZy-gqeqx_Es1-ayJg*a@8^L z)yD)jAv%$$DUvwn73*-HL~}@Mc*YzMcYqqLw%uOf9L9tQAiri*BIh%;#ZA_l?;)Pt z-=2%t@6QAS``$cVa!LQ8Yqrc(O5Y zUHw*fe@Kr@9?|Bo-hkM2D-3yPh1DxgRA8sR4bx7nOU`IuwfBtSG7?WE%f%<3i;-PH zM)2Vm7R4eJXT5trrFhZ9w7ch?VEGeFz8v;4`cDS)rb5iuxfis8Xj16NGc#GMug~_~ ze|>Chd|V~vF+Y1~IJ-%R%Bci7EcN)2v2@6uS(0AR0@Oa_83vxAt}*gt6d?BIXi|M< z!IVfAG>2DJ^)P14Bp)3beCRT=>n2~bDRjrW9!jy$&NDL^3-5b z)l||o!BcvpG*3u(w~E~Wa`)LMZ6(3n_;7F(5e{hC+Pi#lxGI-|qe?#p7-WOxSR z{K(D4U?+Z3j?O8zy)G8Y4;mvwe@oduRKb=pQn8?(1c^%dmm@iVvkQ7CZEmBHBH9-a zO{r)UQpud~hxc{*j>zZ}VSW4URFP$o%Zfb@XNnvkoJQdTN$9BsC(bg86^2jAAhi}H zHm;$MO&+1vpxgV(bcr|pX8>qGkV?EA2vAJ3TF;E zK~ktSCtmU3UC|L@KHHcZH_sBdNV<0Sp((d z7#0Kmu59(5{_bs9RID~|?lcjzF>gKNWUyr-nEj@=QBMYjp@QH_JN>w-|BmE3O3}td zB|0DqSg>OXe|=qi1+$)qB&9sRB5@m<2g5!DLvw~iEZn;rB^e(tFqsvXqwLM=mrpbv z3w)uMcTjMhE1K&Wy~6cDM70+O+7udwg+V`MeZM`=Xcq{uj>Wu%UxUepJ*|nO8-(hy zhw8V}7J?9WM{frZwvN;yCp*3vqMZixV0k#tDy%V<7&~0#jIoJS;N{R=tfpKm3yfO3L7>($qkU zoCveiw^@qg`ZA%G=SqHg4)+k(v#MC4GUo>%y)`|{$?7q;iz+wQ2c zVY(?fU=&K%2-fLwfb&3RK*$m%MfvLOh;p>+CC8bOB9{1O`X_ZUCvEr(Ue+OB0w;c$ zsdeO;kpyt#_nXy`lo|(wf@GRa+MZ7HOQ-OW6UA=<93WPAq2^Fc=&2FtV1>2Iw5k$4 z3If!wZy(#r|3zVHDi6_MTD@_mU^ey2bYbTUJBk)B@*L4@^`$7f(Zah}r_o){Bp`TQ z=jMI6k!mhQzK$6E2YOB@*3`L4=yI0o1Glvf@9Q?_zR-!exu(oa)6JcIM7q`ja~v4- zS#HRBM{!lOE3;F#Ld-`!DRxFBKCm!Y&BDK}Lexer`H;9eZoR0A!U!t+anjQd%;p&B zsB33NB}2}c^|3(J)zkng{Wmwv?^lP3*Kr&2@k?t7wu7>Z6wtcLA-L#gY?#`r`N9=y zWdXf6P9$@8wLVuVP6`Q~aQiWTLa+QZG0ju@M((tsEF^lKFfig$j2;e|yu5&c)7+3s z#K4z??GG0-ZcO`f^RhFRi+=v3PX;oE+9cG+hJXEKHF9CPo6B)U@V0jjR>Z7`IpP17 zNj_4AT%j@u$hyn|?7{k_G6+n&)ab97QKb!#B)Di_y)a!lk`lWr>q4_%ssID8q^!2m zJ?5x&*j*of#V|!7H|;2Y-cjenzB!7Px>#I5zYRYR;2s95+Z!nNkrs0guD+ZXeDdYa zh}u{Po=g#{wWk%0(-@)EqbtK3|-~-u*;P;lDqmG%W z3^%P=N9pgkf~e|u(xiMH(#pz;2UQJ3tS-fsOmr-Y1U3T&mf#w%Or%1^gU6@;fEgU5b1_0lQ>xjfucB>DNJ#(j%2J!$KeM6`wFc5{q@9|+g z8wx__`(FR#JlQ&(@neXpxc%ee4tbPVj*tK{HRB%4zE+WxNk7zteM7D{0 zW%@`Iqw1ieY>ijNNO$JK!KMAOmQ{O^;#jRf%O5RPpNR#wm`#)~NYl|cP(!55y|;Wm zjEKe&TjqQ?QOEB`0kC?Ya{`^e3|=`5SUtQ*pL+seEp8A{fOM#zTr)=eWx^A}cR`3x z{}w47+)+|10T>FNED1P@o1PNWUe5C$bs+$NApw-R1hA+dIUhV8U+vv|@29hWV$Hw4 zNdQZY0G*+f9tKBlzVeCfPW-l$9r!)s!HdA*#lW`2f&%`L#`{N{e^x+1p%19EWSO4h zv-Oz{x9L#^@zQTWQX7)31+b%=+uL*W>k#*aZ*KC8bwEb}_?)%+6kvxgyg`BF!Tez$ zvQ~ejY#;n!XYZ~hJOghemw*p!+W(Iv;Hk*1)!=w zFr{A#gK~8K6*~A-9H1HhL&652tlI(Z_L0E{`G5;_;tIEIPrjYuFCO5h6FcF-uPj9^ zC^l}pc(UIms;=UCYCy|$0q(0XU6L^;vbYs2djq<30zN5xoqkOKEo@^ z{z-`5`qGW4R@4knBKFn1P{Yz3`3eu+>tKgnh!}voe2l#KUGl*{6>B%g<+dxvtT^$` zikEwM9`J~*pQ|if%X(YJ-4&;T0{$oh9g2^4UaQp{l21>;nE4h~CdGW;r|}&`W@!*m zznnx};tcF(dM5z#wi{;vdeA+v2S1g67TzRhgm+=!M=t=0`^cBUk%R}2U0~J`28|hA z4iKfaPku3I1T;mx{er|rL5##s?Tm>nw}uHhZ1zSO|1Gt^d?QN8tgAXj;%h6nf)@=; zgI+R9z^sdGEtQ=&M56=Qh=PD#XueBJ5xJK@1@r=5g%Najo@6oQfHi>;R{Q%G9U(8K z^)HfU41R{Jt{lN@mu^nlk^4J=Iq)glVq-zq5~YbnYp>VS3I6?jR<$=gJFADk`XX(o zpM(?9T&*1FsGAQywCDtY^ST189A`J~OvFkf5Na$_qc8fZV86(_Zdqd^@#yDJhiBxc zj|%TFo85UUs*&Z;RegI3(5d{NQV%!DLEo8;!Cgh~98StqG%3qTmf^kwJxXE-Ni9L6 z@mdwCefJ@#C$n}&?qQfR8j~|*L$qn+vXY?h;1GSp6cWdXYsIb3ciVVdBpy{$zz!!D za%hzxl^2^Cm#3*N@xH6&7259_c`5P|I5W6$B+Xw^H5mA!8T(>(A)MMDb{iKPdu1@~ zqe9+wqSf=$u_KXuw$6-cHO=q7r6JX%M9&RE1--90Ro%+^WWBGNFrHj$rh5L1Uzou^ z#cqIjb*YTzhOfT*-Abp5Pxn*-xo(b}lZExn(lH1pi%ervrpB#@`=k;5v2FNb zUI8murm(QzC7&l1p?``Vx&KR9(z2bgrBB5ZY_0H>iGp^2g7rcx7q@(bC2)dBG?sT0%z7m=J?HK<;O+vm)lqD}$D&l$f@bV4b zx}W_9HeKzHZYzeUw!=$jTrSZ97e^DQ=-oMy@%YLkwYa#^uq(hptfk(YZHs{;ysp6p z*wfM4-&5#%t3eB9u``YhA+zYv{9_W1>c3B~ z=l$eLQ|$7QVTdiw!Zgd1K|V&MaAfwtL_uk$iOt{)y$?-!p}cJ{sUoZpXU^B@>d$A6&Ff zJsTf{R=Zl`M(I*=HLDJtpzk}x z#qRcE`#_NRu#2U|*$9JcF_CqHdve1;>1fa<6Ic8;z2HFTHzpR&nnTSlilZ3ux%G0& zw|{`>zVk_VIo?P>)K*+yT`!GK4zTXNfyC6jWGa|KA-k5FRxBlMdrF2iFRbS|uhieC zfXyFgIinrMZ2Q`?*9xAekkBF-fEr)a!<2EDiwPA9P+Lsits6IQMQDZ9uT2hTGA*5u z%z4^nn2`#Un~{9etdKF;(v28+teW>N+v~>)gI`B3r>yYVN(CCX)P{t7F#%~fwo|)k!L#G(KWwmZ0~!`F zuY%lp8!Pra(|~zBr1h8WJ&xfruYAuaJY+_BEIjyy`3O`*oz<`on@PP~0B%jo2oV}H zK7|$PBCtZgloKPik&f*Ra z4@^4(7Zb^XEC-2yiHMbNx{ZP5lOERBK6@m?n$1bl&m-+6u31LK>gSdr>pQbC*tG;H zucM>fY)Q#ZE@6r=yCnMyjOPde;kTG&-W%8i8{n5v8vuUuyc>ZWXrF{SysBMe%nnse zL<{D)UA{Z}@OJi7Eo+TDaH#SE2lfpbIwV?#=OplbQRyR#1O#P0Kv1rsNF*0WDdl;a z_N@d48C+wZwIkRIv29QSB!twHzD%;LODe4~-Ks|J$ok91PhaYhjeMv;aZz|xh_yW- zRb8(6VN~sl%$Br1^M%|7l$qX-Fm<-QDHDp4-BiED>#3 z_SmxKSk4nFJsq(h+|BTFc}(~3%yR>2PR{y5rDlo^Q(4$5w%T`}*v@d8k;oyvE*wNm z%i!_1x^aC_KJt=#F@-tiv4Np#lF;e=x&6MG1sN@TB~rag`iTvyWIQrzXzI*Pw=(GufTfNgX#FI4%Vs<| z&MShD_Buye*EPiTwV%_v=g^^b*kv3RiPuOy7nZ^lKg30|5`in@go`81CF2B8#~=!m zW%(a6i>5{hJ$tmNjg@f)RmV}D92TMzC3gx6QC!wSMfm!EX$8Qlc9dg*$sX5x`TV4q zw@eg9{PI>Gv)y%C20_UvL+=knAo}?YD%3HNGf~0VB)lL#PV`ld?Qm(SFC&!+s-`1Wz0#sui<&h0|!*px)EC`_8(?D#n zLH+?4rDP!uEkCg0zdZY(y@HwD#L6R~MQ->(Tv6uJHiLfW80s*O&nRo2x{niK^$M<+ ze-Z{Hg5RyKE!-VQ$Q1aTS|!r+$iYNIC@9A0ThNB~W(UGSI3oxy8-wK3OI4x7PY}o; zttj=h3<}dI1AVUiZuUcZnh`F8OVHoet^}h3W#GVY#iDDeWgTM99cBs zO3cGLPlM#hTRu{DgfQ75NfbHx;bQ9&v&5+Ny>W6xTK&j0C}zhkJbb_}M_NNKxyaeK zf4SXMp)PyDD)q;i)km!JxpBnnvq=$-K>y3Z;5q3$vSrA#}@BmGU{ z=l%^J_gUFq8P?yDgOmzD?~yqF_LRHm!LWrR6BGTCj^i6HcHd!SPzJa>-eeT~5UanG zSfzN8#%nA^RnEk*?-0eI#W5$BobPAsmoGMPYb_mJv*N%jjaMEGE>cd_Dy{UVFRep- z{J#eDSGNPjjhHPRG;p+@Xt`XmT+21{hCIS>-y8DnM5Y$3RY`GPPyxvFBX}H6Tua?7 zhkff$ugG4uoe|wmRc>nL{ZjhhpeX{GJX=M!x|;!J|C(CeK?<@#EDLagecQwM8}}ca zluNU#vPf$1EOHNkS4GjoSxR~XC^Y{Q=mOSLK$;44+&W3W4T0=c2>wT^a(Cwf{J8#s z*$>9G+cgG!HUa5(=Rkf{;UBP|zeVoyqq~*1=PyfP&J2?HKqWaHvyV zuG13FL#}bGp1J476nM$#&FBAIWh^8`es=k)GQ}hGzWMpuqkCP(KBJf#7u7^#vB#i5 zH$uZG+F;=VD0B=t&0%#YG=s9HS`Rtu8JZEy0%JjadSYPMnH_vs zKn_aAN2jMNmPfDA2`QsPXHSvgsW-x>u3RhDhwka|{GE;1{~AysnV?c-UO!jT>nvpf zjxdsG9(LkKDtT+vZmRz#%?@m7c_1CVQBehQ0)DIR5g74>Z#?KLJP(FI-Pc|z(l!56 zpvK3z%h4-qFDU$>F`%QCc-q-Mhn)8v@eTSJ0zmzTz)c@ZS&H_6JRHz6t#5i-pBn66 zZtmoukN8Vys=Yw+Z)7Pvh&l+p{*IVb38%PVYWw}L*LfbIz6yctrHgcrv`lqSyh$}G z(MvaGw5L>Ho{mD7ZNAuy*JS`XMabmenIWboNnk+Z%bnu z$o|Uk{EiyXe6Z=^5=NXiI&18uO>w}a*Ep*+doS)6;MmO@T!?rthOpa5yG#{z)TCQE zo)S7*Jt621gl#av#$oR+6=C2{Ye|=R@8E#NkaNQ$0fURNkB}IL!l`7ydz`ba6?V-S zT$vks^3#`i)udH@GFFkb^ z((Son!Cv@1L;U>yh;Ty?O`>^;dDziAq^-0j)i2@BuSq|o&`WX({ZVcFtHp_66_P{g z9fAJA_n!e-pyR8(?K#No>r-U6Is%?&ottnLxPNRo{1MMP$0a?c&hX{>tecBX7(`fv z%-Y;^>CZ?$t$LHv+=%#^e!Igz!fOs#M(6lNPgX9XhEY1M~AkH3IGi31) zboHGMy9*L5wJFb|e&+T3j9iwr1FMHrSYfbim#)7A!QReS^55U zv|kY{BxB-(i_8Ux$o9R|GB`A%GL?x`Ph89CaHpND{Yf5<9rfvvnU6a#)AnJ|nY%j$ zVd!^XE+lLgtGftV7ZxhGjPaaFC8ZqgYEKGox$xVCFvDo2s zLUQX%*Nxh9QU|UrI(G+S3nkX+O>_fELex z7<<(AMow)C~400piSU-oHkYv{?V|- zwOPNjfwXNP=5_U6hw%3tsJJ?|Os72#U2}Evy=k8yO6}b+RWtfMs z3I1c|^H1;aSvklfn1hC03GV;O5akD-jQ_S@#j@hWKy9Mz9~{@exrF;p1_R{g`|XA? zP~i11t~i0zJ&<4k(Hx}5R=Ydbx?eH(G3939d?QB`E-_4%8~%|K<6Df1V*+!OZ#rxG*a7SE?BQ$A#MzWuZDt=j=r6Cu7a*v8iX#1z}A=exe}-}-?a`UL3d1lPB6J{zAUwSS~&-?P)3Nywcs z-QDd8jPDx@*+2H)pIykd>+p6~Y-^wGe9dSDn8~|GfQ81No9&;gc;fR> zg1DRJ#n^+#pSzCC*C`LlX6 z*@uk}2`Q+bzkO+DNp%V1REu^_wsfkivGyH&l;bmD&qE#|lwUaFShw8uXe9SpSk{Q2 z-)OIx@WN4M{En^vZO2jq$|`{mXjx2q^JW;E(fQpws9cv0#^Q`w0a9M$yWUS(jvO2s zf?r|-5XAOW5e(vY;M)f-nB&X4PsAt8@w$k=o@Ji~t&8Gi3-1D%vhAO{4ESUG@b~e& zpNFLD)zIC%*;E|-cJ!RiVKAZ(;58RHtwvYo27Z6PEIL#=N^odsXl&Q`e*e6$>rjHL zZu`-s2)D7E87>0ER&IZyDmU?IBwEx2!= z0iR&|{YDEj6Z;5+;g!hh5VrV~6e*nY>C;Z#ocF z4UiQU5fNF4pt|<6HId~HpXX}pDCk{4@b=O#cST%NvoAq8-QKV04sdmdGCzN&C7hU9Y#(;-e-2F}4-Vxm*reKRw)%fF9K9@O#y(ybF1pt|E+DRO<<#@^8JkM*mUn}>jjhYk5F z4tCm&)P{?Ti-T9K#&1uejtka_hv2HK(@LLfXQqh*{^J~`GCDd`c-R0}6Zm&X6a)^3 z(>bO)udfad>+!H%TbJMLLk!lRnIFFfZ#z{~RM<_sR=yE2$|)$Yv$K!K@q?vpNleX*c3zqQpiOZZ|;yyub@x~nFkV_Jq-M@*#r36!3M0v)_oow%{@Ee~CCt4!mID>mU)9l41ttkrv3^09%5 zHeZiy;~j7PcdS+@B>CgV2fM8nevH3|e#c0L=G`_l1O$WcfuvVmFpEBr8UuJz)QQ@c4>YoB zPl8Fl=X(`~nu5Yq3-6P|Fy?6V?XB-4Ah=2sNAyFId#^9q58X9Vr{pi z_(YaqT#IK(Yk&>+9@G>6);(^!tH%+#P!t4-uC)O!z$n*7Dr@_1Tff}NFlemMN3_op zqauQqSC&_0n7^gLoX46KVFMQ6PP!;eULM}a6EF&d%!mTknFUBKRzVl(C5>-RP$3h_yPt||xROJ*0 zJ^@d1%YQVc&n=_`%f9~vA$EXqR7YhZT=YlqD z*#@~b1FHCtX5WwF#`xA_9j0^imnO;cmpY(4-K#R71+%PrlQ%41NE}nj7*ePnmyU=_V0wQNKx7713raC@bPk41{NTp!?6?5|vH9+UB^=zz7Aa=+mP^B}s2^yT# z)|BAXJmtN9e~PeCu^Wb4PkVn88%17_>S(9yf`Ow*6HB}@ogF78^l=ymBUubQz!>#< zwEXz-<3RH)-*zq%Or0MPVJv5NICvyM13TZ9H{+ZQ!$D;ecpN0Et|R#WqEDnKTJ9Mm zJmj3`u>7;YL6VHa%wpM;-ZE;qlE|R)K`_7OR(fF73vn$x!TY z=o)z;5L6Cmu(0cH6cf{+tIe$>FO+3xy{g*i4J4_Qg8%YX#VOdu<%^ynS&R8WyLS7a zNv2KMS#KTIsDW4+u64U%DZ9n|?gWBpvtK0OT{c&r! zE3zu99l6#t*jZv+Irckm5)EP{PT&0Zwa^`bR<Kg*}*>V4-OB?xqCi zs=-01PK!29DlaS7WD&)viVlrf7demn`B}Uw5XTxi4*~5-N=Y=j=4Zcq$0`9sL!?~7 zBK$bodhj@DCf`z9zQfFV1QIjssasWff{Y^v1`7>QRqJLD55AH9@r6}qwz*JmIsSaQ zd5%CQJxurmuS|*hta92n5LqaUyiIC5kX&_?u-ihkzL`T2_eE_j%iCv7;&$3YLPnVH zBwUyc=DTotS+Vze!37#cQL1XKgA*pMk0OdGb6llFoY;>OUKQ4KC6RSL^u6lh%DmZ& z+l43Nc?;5c?hx}Jov~?L7ns*;W^n5As-Kpa#-=Hg5RL{8%yE6#zRvG;ukr^7`|B<( zcDlz@b=NtXnHTq+h()aTM&cMa6hZev$h{h*0*lci}<1lhP z4>l5v(BhdZk<>L`RL5awU=jsyM!*Yk`h06&S^oOXT0{ZyUpAws>taLDmSjGgq>1L% zP<7k6`>|jVx;mETVq3zYItuA*LyLNLx59}w42Prq1$1aQJRFH@es#c=ksD*I>t6KJ z$AkffMITfZ7q0<&P7~wfa!T?;hvi{1~Dx^|p z@Z~4yjYC>7@s%w9mVLc_;Cfd@KFZ0AW5HK*%zS7(-^+mPf~Q_a%B~AK}<55 z+dEJO`vYhDJ~9%JWy>@$k#Ujz6D$~Fbu5uCC>aGp2G?ZbpWp6I0Dn_sRGN*bAV$ zQup|{Ve?rmE&fLFo`=9t5SGIAsT>4pgRKasa25jOl9LAxlzU90Q zy$cGvwkY#-MNm8}(iASMcKKxCyN&q&BO5GTSG18n*)ipDu_dTmz}caPq7XR}?Kq;m zkxPkAee8>(8rRfcAIn`KDG1Ux@rP*kj?d&^$VA#*BkKZBuf_QkoLb5lJe%|**8WJ# zC-s}m+4Q5vlj5c82?v~RpOLHV^zEs?%gOuVIoliFpcbZz2iTZ8Y0v6_W%}sl8C&vs z2%x2hU4j0+gWRXM< z*ugcKXk1A2azmW@BNm2%1CKC`Mt-gPS}~5D=Tp>OacN;rV+?eok=maXm8Pnkr3*!S znO#z;mh{@zBD2d{6&bWiV}?PmDu+`Jv0V=1JSTGd)mh zOtWZ_jC=;R6_<|-LtUjaQV^)=3p7NiNuAfi>P>Y-I1RHzYFoYIXkVmJ|xz^7) zDOb$=N+tszUv5)3kmcCr?=UUlV$re2Z7KZhW#B4~^Q-<&%vT89ogr%%pA!vnnO4r|#%;=W)R((yC7sj=XPb$~yvg1nmj6|%oF^c!sJBJfm zr;R5A*;?}vvCL$(Plkv|a$86zd?&|aGLFx+#)s4jey+{x8nc>xbho+n)Z!y+vuV%E z>JF@Rxmt%x40F8^dHvH~`eZYCy)bXb){g}qD>NNHkjhe1Z^&FnQQe-bTaf?hB zwBcq;Z~!^qt5C1^wuSMXkMYR>-z-npp0(w0-RGudiSC0o4Tp}x@@jHkd92Sw*}ZY8bIgk*>Nr%)*B-fjh*oib*f58azLr1zT+-1OXJV zeMskO1vxoZfJxo494>jz+NZXS)av{o!SLPLz||Izi`VNGVu+p_k8sHjL+ zQ4kOi5RekUl_DU$gpPuA2+|=m6-9b4(v>RR&|89t^d>d55ClRCgiZ+cJJH>J-S_={ z`Ae@W{HPHC>nU!gfXC?Vgn6uXg4+6$bh2 ztbK&BVg=Cx=$A{uhN+H58NpBrs5{csHjcF!9%%I+S4x8`U;|IFyC!ft+=>oe%w8X z*Wn8I+O%jY#?(enQki&T4Ho7>*a_$=K8Sj5{}J(F*S6RN z>zOEKmxk1w(On#`w@dR14Vbf>(HSJzFhMY)a}#b#=!s&XCNIyuDOn*+XVm)DY+vLQ zLHW&h$0ee4*G+T#ZZMT!@7y*&2rKrqq$fe}ob^Qwm=YXMA(8V$6 za=sdLHyHmKp9RPyNPj2vrL}$c*hENx<``x*c*>i`lSbXQX|>j#f*QH(Zx{Z} zE_D{Up8O^!2AOXyO1&H;Ahi9uunaOIcq}-o_78CyGg^}q8&0W@Q%D4D5t9TtyB+T7{ZM6cNsv999{I-uP+$~4Y%abYpJ<12UpMoLOJEvU z7+BtKO+8nJwOI-g5?3oZn4roR2;}kn5te*l73hYG(KWyMd$2N)4!Tk+$4S)fXJ6Sp zi&_maPj#OOx5W<@@YL$-tW0KRkBw5R z)H90dO)g9rlpQ+cxZ`>&SPB~`&9=2Q-`cEzq-X%s~bTIohv>cWFJ}6y`sU{sy0|Y&vE)|wtB6c<4etE z#~IX!uMenl?C-w@E#aOiXXZ;w+3fCfmdPW1Rd+1D86}H!Ue&X6qN-r?w#AI>jaY9s zHcIUDN$jit^vl`G%y}O^e3&Giajr--s{5R6Ju5n!ebsR1N1*b857E+mHlUNug?kSN zV1~pxA*bl_p(n;@ylyg&^bBX0;z3B3*!GoBc}FZs-Ot~vUC71OE#!8~d2N+I$-tZR zl?Jua#yJX6$kaYul`zbfanaD||D*#5+J&=5+f#@5!|D8jBXlpF2l;z^oAD|5VEmrvR#qyuZ?KdzJg@#Bw)dS4nILk-0rsW(~3bV~qqU|@+% zk6pF~!r48!+SY;X?|0f;i<|ue53Liy2JLl*GIG_prb1p!WH6%QJ!g|$l~TlTyVyh7 zoFX3sfr3+^PT{cCo8Ve1AjmGP3mr5o3CH{iUL=XusdK>j?cKS+WFlY2Azij`{<3_A zFv{BCA$>Zl2-L@G^eUsUg=h!`wP6!5WMwI5P{*wA;_y%P4@x;#acV?;cCt9t(^KcY z3>wT8o2o1dIAQc;Guk8KL%_J}w+dc4thkR3<~8w-5(!IuX)-xXvpX@=0ZWM*8{1}z zCO&@=XFq*Z{4Bu~GHMcov=&^Z#lf?kDlC}M6o~WEwZ7D!c`UC(zKOKxA_ zN1;D3$w%t-aCa?`kBdbI1uG?_a_lsf+eAKh1$uIp%{KXkAkWsbeKhFeT_rqC#RDL) zLi9OwstikZ$o=qP;$)xC=U=FIsN8dtl=Id=6kD~?aE0+L_8z?j9^%HXd<5bAb_1o+_E(zzi@OzvTUhb6me+@ybq8o?v;mR%puwkdXCbd{Ba>$z zgS}EC;vq$#E^||fgy4!Gj40# zNM)s0fd^#Z3(Lx!!PGr^A()MYML3#GIfd*(_!UI3f05*iCG_B}%8+0fh7qZB-hl{Y z_7X`7v)dFoxTm;K$2p2fZ;T3%Q#lP|n_>r7=#6|@qo(ZT%{IX$2m_4w#FtjU+mhLY z4BK&^I>R=(X);Ba>FX2}NBffkdh@<+Rl=n$2UKqCsEswq@wDhbyJ{J0<8FA-WG~gH ztJgv$m#kxZ8athj8!|@o?QWNIi4@z>XLL}gquS=GC+JkhF^IMrn!-ktI0?-v*FFzi zuj>Wut_lrZ0AedpyI zgcT9>N#5!Fu}vY)ZHsFPB;e>z5l4{C^%b^cvyU`KW&hD7w>%>)yTbekT6G>(vDd!y zQ!FP%rFzbcOnfMAa%H}qx9A&X!IOsbk{zp=z`8*X-DaPCSE8MLcE&V#Q8)ud8CoFp z;)q~?lZU%~U~VR{I^Xt1-SMWLQzHCc9udazSo)M0I%^G6hK6m?LS_Cu-(@cP zFPbVUE66&-m3295IvR1u`FEV$MeYay2nrz{xUy`ef}K`?0XR7F7CnHQl^FH`#T~lL z6}7cKhs%dva;;Pl#vQ}H>~82(Vv3hbc6MTau4c`~;wK*O)$U}ysek1(bI`TTb=EU> zlMtT;z)Yd0Tq>1iEI_?FCiqiQNNia(nE)=j!AcpZ#@-x~&oGy7diWO!eJ`DkZZx{A>O1S44@8 zO6<<6_eOvep{|Vi)M@p>MimvT?^<>G3jqhIm0w*UW1KJACz}@3J@Ab2fMPQ$pSr@~l-M zzT{~vM2K*3qKpn;|^7D9Sc2&ebn0BV(U%J z`#sD$Y!3~`XT^zCRgQ-}eK(?Y%dF6ks33^vtxaGw+U6!2o3F)Y)_suej8}U64$$WF z*%A;q)~jUWTmx|MY#$|NgMKC`e;Gm!8Zs}i-|XYL&@ADNZ=}K2)By|_35YRra(y}~ zU`?pP%WjDr{EzG)c9LT*$%8P+JVo{Y2!rN9vI!Jy1c7{2&^u;tu}1i6BUiD%dH9z| z7`+g|Z4u#49N(1y&YKoc;R6FA&q_ezs#+kl1B6Pp4Sq|nSfa>TZUDPCko~4DFZ1*Z z^StWglm?1tCbvw*q+=;7uNSmRIqnTv*M#l%eo)_<*pfEJmRD6^wN<|t3Mbm~@?6+y zM?IM{h9!Cw;NjsQ7Ns8aihk&`i*VO6vD zni5=wr?3t|cxXEic$~yRk7kX;_6&z-vr4MQ7E}Dmj9RBO!{wcThoVf&j+Zyw zgJbdGGIf;3zBLt{;|}R{c$Mw0Mw#cHc!Rdnob8VyHmA2Lrn2ajoW{%1of~ZQsh!_s9?Yjp9Yd+3zq;O$h7* zlgxuC6{KJ{Vo-xk;e8IC<<;iY^A`*nV4-GAcY`uM@Oi^z6}sLZJo*UR#SgSI0-vfG zNDOR^dt@J#WhGaCodd;f(xzVVXeW~^$P;$)b7$V<;8Cgsg`O@o1jWGH7X`A=APnaj z!@)&wl`iFub7^-BrogH>+E^DiC z-_Wg{@#Jds;dUM$n*RI40x18vB3E zkFRz=>VD0K@nE7e-O?Dd3n8XIw{iT!*1vwWMsP?VforZ)4X5{AcyZ9M(zSWy1W_;> zrMc7L1gFD!6Qx(S9G zNQs8bhp9|4b)>ObaUsW8Y4=1sKEJn)SZ%!jMEXALqKINl(o z@%Q?nPnW^eWGolE&d>4$P$Kb9^@n!dGdQqDSGjaI$d$5q(2QBmu>JCGg(5;{fv7~T zXy{kx;W60p1og*IrUSxzX$f`@%VfH5Jb!8tB|9 z^Ki|BvubesECspaIK8mo!seMSpRh};5N4bV`B|;-v$*Jr#_0xHVW^J#{Xyj?;e4$- z#ecE|9Mz;PY@{X~*&^!#s>d0wf$DJK+VXn3%-kKAdD0?A1pqXW?BbO03FRJ$sZMKUz4b%rLZiokQKZnK9k@J1fs}_kqnf5W{6SjcTc>&HwkqJ3aPl z&eDjJI{NUbyFEN`gW_$8!xgq5nxeqCx{oKI|EfY#_02r^!K`KE*mf6VE z7dWZg*yeT&!1<6zil~Cqy0{a z{XWOA!+qCX!=QszATmVAl)5kCC*UGCiTjcE6 zsHo^BpCl~Y(XeYTICam8f1|lq*7fh|;3G$R$;GUortE}2`Bw1XpX)y#3o_OtqoXVl z{)Q)7C>^@m<5O3ojBNc5w0GwIQ;aD&^4#%YhSP|220YaZv@!no4;2gh@Oy0804jb5 zj4ZxD1-|t6NAmA7|JC2`*MXY>KVM!^Pmi8NKTRh*i|gp#ZY>ggDqOw9c$UCq>ymae5_dZ+_ZX(GbHCx#T(I328IcQ?n`%8nhZB{~(F>HVjB zx8~%i3mq$jD^P{zYL_MlES znnyw}&wL|T;E7$_@m{$ucj0wkr33HGe-7;>MTg_F&#ut1{LD!GfpdhL*2=g^*jiB5 z4@34RD3qa`z1^b=l}8aKmkB)!0Zs+N+Z%tfX3Y0dpFn3(es=uz?$+OBHn3}`n5 zyqNzg_MuLmxgR8xV^}ZcnVfPfs$^1VzDhO3nTi4S3Y3&OT>M)PsvKwaFCG*1;Ky@e zF4=X0;XF1hv$aX2@u)g%PUm-K1!l}?u(~7b`eFAA<@9(old!cWLA(Mks)O3{t}BLR zC0Qp7T7$SOL!Sk}-tR$+ls?_)=djVDNuRgLMQGTlSf^Fb<;+wH-YNeU7h8Kp^o|v6 zjgj3|Avf3WY=Uou%Mlb;t)stH94#FVN^~L5|6Q8cl6~x0*3s)1F@2AE;7Fb1&$D>Zcst=8_ z;wqZmMVp@XAyTm(mkK1(*K$VjZ;JMD2l+kEk5#t>IE<;?goMy*6Am+nCBrP?RB?{s-*v?B!2 z1DMH_xkW$orzX`NC)16Q1r+MyBJAD*j4lQ3@0VDUCmFw8u4psPZ_`$ts4sc!+U*39 zF6d<#W*FV=yfErs77u^oSmV5`txWW5W*pW2@_-Khnn|jF?WwgsCxVGpU^0iQ9J01+ z6)wbT9&RD*wz&Z%%3N*HT9KR;zx;C@tvr1 zM~>WkDNt1;t4lNINpm8d`t9n=tLT0UJL@!I!)S8>-odo3J1Kb{g}3z;=<)ld^8@As z&&{vh-qL1s)V7u*-j+9Ka4cDZ&G1!2!8x~Vyv#|kegJJBIuaznIlpzRpgrmNxinc- zE{_YY?U+v5dMg?F`q?)gtD(s5!jMqfmpk|QXI)2e~uOwLW+qJ}b%;ZZ% zC->Kd%!HZXx%fHSYMz>D3=4Wj7|)w66ISeT+^k)|FI=aI0qs)R^u30r_B0cM*SXzG zQsYqpHzDV$*Aiy@(-+6C#YKiQG$wudT|H&nmF3L?#YVDWK_fRxOhZ%t6vCHP<=G3h z+)PeyXK(7Yx{~{GkkQSez>nXrYVFfRh=0MbeiK7S0u%iMm*Q_)PszV>mwf=89N0AJQ%q-2IY+6^I{Gkpb7e~Pkw&j*pcUP)secE-f~M_P5TwXBalDb zbzp`g-*o4*+mk)6%T2n`+IHRfmtC6Ib?p^-D;goFqALb13D3^Yk6PX?e}l-c_qrVX zP;5$6VRw*PtkBrGoV&Sc@IqhLzoh)-vnkl?cQtXP9Y-(Wm#rJizcchhbi*ryc4&QX(?Mrw6IqQ} z^ooqzNqTU^<(ha-KGu`#wg^P2N01j6GRgeSOMw%1QchyaV{>k=6sm;&{07%48f$LA z^afSQu9T&&>~iHYH03S>!IMv!&!aCaFUwBZuHSb2OPuiqx$c8hiz zBX#hS*%KkHG(D?OySpYgM19ixgsN$+8`Jq7%q-bQVh&kFn$dhP_Xf%rM~+B>@n#@c z$w;XaMvr*UJ7ni7^5d8bvE!F*ck;|g27`6Bwk)yCj*85Pw3(K`i-SouvCQ+erKHiF zw9Qks@%m5w4TQukX06p4q zdqZj$J{DKUz~;%aN3)ogFTABT&OL*BxL#I5QRpn(Af-dSs8~8DJos9MEqgwmpqt8D zBox&AP2$+A^(0=gbb8T+coRV{y@`~kOkBh}1aFykjAA8R*D<|c!^o#mzr?x@vY(t~ z#}NP2=Gg`7i|Cxig=IPwXJ^NP&dK3p-J%mZU*|xrj3qp4l=`(xD{@||eO%lZ0`0yh zvr=%qypzD&skw_b+bWqCsM;2BcWoZJMsy)n=fn=Qwj=oyhE=IDgzh~}yl;{`IQeSo z1fjO%!{NQg6TG_YF8o4YG3+l9tAXHb?ZzOl1gn==SR znx|PmGF~6U-`5>nh$KYUB-W@OF?u)Dn`0X@fK?zm@=UHMZG|zEvI&}7cNz+sTp)_& zWeT-F>kN@7Hzq)xsu7nkYL1>Jw2-CIF{xBxoHeU4n`;_vQp&X57r~p1iRp zq>-RN_WoXMK0a|H=k^gBJ*m&Z?*jLKMakZ%hkuA>J`Fl<95jO7i#+k-^-N=y2ig** z{Y7RZFW5H7+S9|(iNYkbY_mz`fg*OL>6l6U_+8k_U6_L{ax(ab&fT{d)glAE>$Z-b zj$Q=Sv9oksu0lULN@lj9Hg~NYmU9Mrkw7;Uu@CG|xCBw!+k8xn5a@CTKDQKD6qXyY?y z2YA)VUVdc#rN+60r{;gSjO*O%dBz9Mtwc~jqye0qt3+pJ=c`(9a31M@9EZK(uk_#w z{qpt?)~4YLuFB~+!{n0E3R4$H*E19N3wk1D1$^k4ABMMNuJW?#A*c78dh#eo9thM6 zmGaiZ=f`2h>+*YurMOqjY(!lXmfa>k_?Ebj2?F-UMAqyl(%txZizKarM4z{q6w(;; z6>(IE$~M%wghfCkbSe}*glofUzoJK5fJ&3Qj@p6pt{}8Ja^%$8L$!p)>g%)BW7(CW z&AL6Dj)TS&={m1@&L-gPsR#?pDOaY(U(ZR-SVPd?d}+gP~W`%{iuCR3gULHN&MMOE*}$TXhgjBM3eCwm|8dXF9iJ9c>n|%!$0E-GSo1V z*!z^3xjC8XUniI&`a^8P&+5R6Zq8yl{U6QqiQeZWD=? zjceu1W|PjWn@)=3m#A;WO8kPz8*H>>{OM@q;iwHA3eIx_*xnQ=SX84EM@oA}PmHO0 zaFGFf*W(xw2U(9yvp;(_&%D&6dE6%Y=Q(VKWb`;C-@0@lF^tfzEn+Pk-hanV&1iz1I)kF=yXj&NBUDUN! zMW@7bD^$EPDjjH3Lj)(erO10%#(9|-s<94s#dDMl(+W8^G z(@mX&I#0tDI&90}c*3i9UmKB1jykui`H0>LdHhCsS~dbQoQ<#7U&{0uW?zMB50dnm3n4E#G4dj z>Hb5P*kLiqH^beVTo)=GbiV2jp_}6^LMA%O>AMp2t;^`Tc8xdriLCO8 z&eflA#^}Q*h(@k)aYPm0P*DeEP!}ThUODGr{jk13>-@UxaciRxM+h1dTmeg0x4TMo zWd0*PRk#6JS;h)}B{u^~RW8fg($3>i-jqPUw7?{-+f*GAyTEE!g=8!wa+m*@5q^fa z+MAREPr#JN_Vf2|2e`8K)C*|cHijf=R*GsnWe?4L9Xh6N^K6~*o}ZJJg-zvZ@1#{$ zu|iW%0N>!XQqs&|qCw~Usuttt@-H8c3f6O0Cn19oqlGL_%YtzRT#k)|kg&kbdtFsu zmYnU2`pj%Kp4jj@-ZP=KF7|kY37XRi#CXbnD-oo@Hqk5Wp5TM;=x&MYY&`FF!N&_8 zmRG{RY0W1Po(QthJ<^FXQOvtS-(rzjsa^={5on5abPT%*piHG^wdr!yZ9}%Ge5uYC zw${PC!h+>CLA#0d3z?M%44-3PEJyY9xsD|V%nTuDQ;J?d!Xfn~Opc6A+?!xZsN#UH zc1LZnJVu)U-|@ADcpqF|1%yO+-p@k>e23CLe!e8&=Bcet%SFA3W4COA<&)}8R~{-p z9kyql4Hdl{lSPgt_MWr(jQoaHjyME3C-Y6vS^M30=XpR3buM$hzS#dor1E3SR|C3F zf9~9SPAkljVuvuKAsGOL#uTxHMklp*j;&2$o!l=$Yq-{hUMfurOt&FIgU zPV#jf8Ooz@dC?I5w&wl|9dpFnDcf-V?`|&i@P>oSY+@z(>P6<*Z>LeTaPjxDu|9Zh zBFY}403!YC?|#w}Y8}`lvCSXxC9`R-UUp*J5=qq&RBjmf-Dv*Cw#jRXoSN%gS32bq z>UtiMR@yv|6&&fzNG40Sb(uhPXD|bcvRwx`3Aa6 zwlv;XLQCvfX$`N`#Vp}PIJ9k3X&%_3$s4MOz) zJc#@*zdn+O*L|qDy|f>J1{uF%u5*$y^I@4`2e(+rOxs_d?-DK8Hww&yzglzv@whK2 zm;&k=C|e*$r>D_?N!gc^=?2&7=Lnb2(UQA^{r#8wU}kaU#xqKC+deWm2|7h6Iy#n| z|Kmv2^Os3`zmDiJJ>mcJMqpm}Enrrge;xbFMVB?Th6KMg_JOE1qGB|MFhV6kldFaW za}h&c(f-@t9tK=?IJkMm@YiI#;sE*4=s|Axjk%;fFY0EE5GIu4``YoIT4b(iMSozm zsnwvfUJ=r)eL$_Z|19{m>z%)^8SF(sL|v;r*kbT``rQ(5r7oAyJ90Z$Bg1UE@FIsT zi+aBzEVL9oXF5r*E+7&E1K%UxHU8&h0NE~SJZ7^~%=$QGDt@3p|mP^;ms% zm4vpb67j)Gxg*kGIx+i4a-!nsoWjDTs#zLb&qoc+3xeMQ?C)=f@@=mZ+$aZ4@3k;T zir+e}<-J1@m2)%`$&|5AWQ5>fOa37IT^E@K8*VXR(He-Gm$PK$y8fL>K8-sa3qn2Q7H@{#!QA9TQEcFsj(pB|+CKAtnk+cWv-i zef+&VU%5c2d1UAKFUgOz0ay2;K(o2eZxZXOzztQ_C+{VXog99%rx-eQ@Us`6gO+AH zfn`acI>HkCq_XG(fnLU*CGQHb{MLZC)xcT5-1uF{Pl5YXI36F;5W+<2MYtm9K?g?O zfJYv2_#WHTIkgqsi4{_{x-RvCj|p|Lc#Bsv-CESjSyZpZyLHq+w?--#$V&?7R1yx_ zg#2sKu$ravB5)^rb8{2a{_@VBOl7mNUh&Cb=^07r6@z z)I2>=wS)ZNrGc*fc9e{y#DmZY27RZKBzm&(_)GX(_+qj-{FWKCz@NbyY!#+vEKg=H z_$^Im`T<>Vy>C}!HOx5w?37GwOeQ$n%#?|E@Kzrm@i%FN#QHFTV;V_I7%rBBk01F! zpiVbzuL5l+gnbDqyeD<@OcOJw)$f5foDCIUn;9>)eXNW%2Alo@3`dUp+wg(%Bh~Iy zH4?o&=t@cttNd7AuGOssu7#1sS{S4Vz*52mfcBij3g>?^+iL2gFJ9zkeU`KIDTbwQ za3E_`m5oQ>Nlr?1o!unRQ$}?G-SZz3xFP8K(Rn&%t=AV)D;&OL>VO6AJ-Pi_-NE<= zQ0Z#k>(bRM#jeE>3;L0mID;DJ=1#B^PGP7Vt6|J#1b0+R;Piubj{X~(x0{U^HH9;f zmFzu03f8t-xAJ<(Vos~dS3%PN5+`r`f8S^?(8wr3x7H1jLh}u7)z27oUiT1TbZpw9 zR$arWGlh_F(>Qs_l=0OnLrG8>1;TRNS!C&hbU5a3X?sq+`6PN{=M#>*lmXp+%k;L(6cJ&m`H8}{&dB)_`TW0zX zX&nRiMXtK*5MPQ?PZ@Q+f9?c0Nk__Ow%Sg9B$4`?Ex^VV58&G4G_~&`mOW=h$@b$~ zEqFO#siFN`oCOAv;1Cr@{Vor5Xwd{i;*?6XZDk7>-Uv|Q94ix4n9lY=w(9tL%H<5dOo4vo(Ahs`2ES}Z|zcO(@lqLJ9s7Ca|$qZ zb^%>?u(@%0%zJm~=VF8VJ5R$f_KpXrfZJ?WV+Xl;ivn`#f4FfsaV~689o;)TfJV?| zm*0nJp-Y%W?mu#ok6B-di>Q%#yxx=UnBlvauvo)%{Mt0wh9{yAG`kkQbQjCb$TKT% ze^_?qr0t)6|A0zKP3UtEfA162>!f8)l1ro=2MLr}!hLJQ)-oYObssdoJnrJ$#NDl7 z^*PcSjW0Lk6y>bRKX@8>l-rTTMP9~Ro>};O%6+w>Rz3FFaytDMONmT)Wd7Iq$e~w* zR>RjYKqgv1SDt^|SHSmmA$C8zH$14xvz3)uLq$i|xyNy7^YONL7L^(b=UrZ|CT#ndrT&ONUx6$8VGoPFN2uA%PVp59(ncn6-S2t}SgSYF{zsnN1 z5$$=fo~q32$pU|0htLkXVGQesCRBH@h=-N0-YbM?Wy zdLc76){UQScu)9iZkjImaieXKS_bI5z~#PG%INPr`n=H5hytn2w@|zfcJ6sSc;gpW zlhhzNvNU%`t4E%n9qe8MOnHPjFelC;?|t9j-o4{d zooVklc}!WY*r?dGn&RBKwTIz-dR>mB%bz0ADOAPsTrJtoPX;VV58N)90fY4XBI$n4 z^MJit%h3y@=W>T`t_MRv>^v8oSvXs05_Zn7n(Iva^1S=gtkpg?JzC&dT)ooxDK??2 z-0sb|=PDFsDUo4R=BI#gUH@IU0H8729YL#6Vg134+xu7E+Q)8g1eSy=^onmaVeDn8 z-boAI^og?6DmDY1El#fs4es0TFqNGq=L%lFngD7O7}ibHhfyi$K@$&in1R>;D4;2H zNyI(pVYw|Zp=%{=l?I)_0+tPf8XU!o`=Uia6irV}+j%X>S8YTL2s7@yvWd*s5PErV zo0)fon0fFrTU-lm{5;Z>@#LMS2Zc*vg~m!^6rwi!TwGfv5?c zkQinZmM^X=o?64CU3%kCin|UR)~%SVq?5&Ao`OOt;~&UCZXXPb`wt=p;0rV=+sy0V zUK2WCAAB>>5i~rI7(DNBq?rzrK)YWQazrTAFlN4*WSGK(AJj>uv#?|v0BM5OJd{J=I1+Glx^&E1^q z?+ZH0=|g=Mqs^pk-ejba#oAW#fuBD%)PA#qt!7>5DDAx@P-+gz72wf< zp?l0*#TUM0FE;vuF7hrb01*z}k0x&* z8X!?oM1Y>_*xi!zrCRuLRs95MfWxmiw@)8cb1?qsI2r>&7*a-yFuy=n1fyzi|X z)1T*Lm_bZ)t;+h%Ucc>i+vz7!%B5uVvBC43G58rM{S#MqiKl!4%^pKUKbZuIrnCL* z)VN<%kY@{w(jih?Z9{GHEQyASv)dOWt9BKYw2iW zbrn!##8l5+WOJG7$K_UlN5t4y>m}f%WpVQJ%XJwX>fAQD+Zn6TFqTtsW{y#Tk#6HV zS&#eDWoH4hase3$|CT0f^^_UrF;z^h>N_PAcB4Nj0qu|a=31;hyGq2JJp{Y8 zh3LA9nI)xXkm?aj?Lh;~%vOblrm)AjK@|saq6jh%Aj-A({ zPByHIHh4Jee!!wnvs`Nn^O-f-hRh0~d3Uex?tA;+e4_75JlF!KQXO%0I!fGg_8y5^ zcm)h+Rr5{it{_zEK+05ZL1bh1Di;ATGaAamDV zI}a7%r~V^Kf`yI^n@Rsz@oCmou=VV}DSrUquRyOu5zp-xl;IvHT3U;KR&E5Bl1VGc zLqLZt`S2;6cytfL)v2g1o9*zC=rEu+3ymx9;Iinb+XvFjTENfGR?5SJ`keDMDvTHZ z)z4vmO3bA3?l6ZlC>zbTj2FW6-7w6l4Xr)J`PvcqP4(KSlPB`QIV}9)4nRBL5%4*% z#^zab`)!$g%R4?Ba}1bM$`k1uH(Oz^rpC5dn6GVR!KER{+tKuoK_KC*0Bpfr4DdXBEx^uKhaB8wt_B+R zZka(a%c>L%d$JhkF4~U|%W#jVR}c?a;7^bcIQ%P{dTlq0Jy7_)P`3- z=%qtFYcIbJ76g6@=D~t>06HJV!%4D=DH;ZH)I$8x%!c1s?1(7xA|3QoX2^)Mueqzn z6d19B19$q}(N5dF{05LfUV9u5I(tGCOFB;`$a=HO(_O|=5FluD9v#H=ju~o2uIe#L zZPoSh*;T`a3Y}!08}F`70y~+kcW-?%5#P7-H2;1?=Xu;vY?Ag++-O>hocBXJu7lA{9QQa!Gbr^AD((>=Wz5M~8g!li4x3Cuj zQ#xL50IFiCYJ3dS;|(-)=47+skV+w&sYYLa4-mWO1|Eh6@bWoS7y+4SI=*o>k>kYf zCKP`l;wApoOU?|?ertowmPM+a;M7UGtXtf#S!ToTqE zIsC+AQ4kyUvN~Jou(Fr7N`F&pcg>g-8&#z5d@gy{##y7#$yi7UXg{*=;Z+-h4S#CM z=qXD@i360?*4uNO*y?KDl{ag+_>w;)EP(y;{$I)X#m{B50+9u%BN19wqnA*y%bjl^ z{sP9~IKQOGwVu_^s-yh=%vA5%k&A5x4AYDZfZT;`-$I4Fs}Aso4S_%!oZ(y*OFOVg zUXXAfmIL%kGQcP=2wFFB!F~Ar?hjd^?-xB@ z2VvK^Tb}iYY`a>~o~m95ZOvZm=s3+$$Y#VSC-E`)9T6OEw|j7e=Na*8;?+&v_pUQ4 z=2N99VhoCy^YUFoz|(AGY)?-|uR62LwcpcEy`K`vgJ{>ZYkjC*QLSqE)$y#E;gCiT zUUsAvogUn0sCCosm1k;;-u2Et;@JBS)A;-2=uq!8>~zg@_00?lx$|*J&c!Un^$urR zfcNI}vWDE83wBD1HYt#o&=J*pb~dd}-ZJ+%ho`~J&X%p4mNx6FW2 z2?EBz-6Rn(%o<%XoiVT(_Kd4gUPkvDx9LB~sM|AOx|JkaW*99B2A6EI2?c4P+P&e; z0G>PuyAnmS=9i0}PlqMnWSb_Hwd0aB!i0*`-0~EPoZ!lroP+Y4_C~uqlCCo**`1@6 zLP=hdY6FI@?R|>dn{$)F*V!@{ZVGFe#pcQO>%6WUfygXkp3u zEH4{P{TyWet^E5R<<}oXWM$mk#YRw8ZqL9m<&RXg7FiEn_ND3`I#}}#UmSjl54Gqq zcP``MiA6hHT3|Ywl62HzC9^|0KH>e~<%pdR_GcM@5eF%Se^N4JnruGZh(d= znC$q5y+@OLx0~hBc)~5S$xY#2!@eM!H?ry(a<;WF^PKWRLHD!M@3XzXO(Q*kKXO;b zHG;VR61MphP4(jLV9Tt5Jce2tBO=|^w7vz=)nJvB$BZ}01-1|y-csU#bBckzA|08} zLCGXt)TkiD&XhXN!Y_KW}@DI56O3Tr3z;mBZs_AMG%&XblUjFtOa2*Q|11S{FAAr4^&V~`+)MkUc2tC02Fyb)q zSkqC2u?m@FX}FVFPh);>3E|oY6a&R9`*xZ)7uX?pT~N>aAJXkR;D_Ft(cJg_g0Ww z)uWAk_Q4!uXZn^ie>nJ61+*AoECv>HMP1Bh-n{axc$x1CaHe|>iucfEQ|b!) z=7THoz2zH-b?dlPaF|&NIUeD2HzISyG*^Gcme<|~#B%KFXgKKR?h-yFg+Ga~9fX|t z$Q6=kN&}){BJKuH8Dp8;a(gePhu|aC5B8wHAtQ-eMtsJhtA!1DSaKa$D*4Z9_%6Nm zEPT`T9!&4u(YvYgZ0F)W>>R#)1gN65{t${s;*o2-!8B6q76~FE7~+#^7`|*(EfJV> z(A1mEcgP9O+JO{F9WX}UU4P7w|6P8XnlEwqJZ*9hj87Qfo6z38 z$L@SnuGMMa*@t9|vN2})JxzBx-nn^4ux<1D78h28YiQFImNi(jf}z|ie$FaL7);0}e^ zT!_&va_?d?Pe^Jv5_ehD4!p>~0;VZisXZA0)9NJ1rn~YGq)0wKa0l(eu~MX*(S3)v zRF=KT2PdPSYh{Q!0BYdqkF9gXlx8C`@`6ti_z>i*X6{ZgP=MUoCxB-K2yX*8KlqOg zl^cm&4ITrJT&A-AR%&+7+~kLYULvTg@2`X&}AR-bK z0YMQY*dR3Es30JqL_vZ9L}HUe6B@Hf5+z7h$vFu~Y!%4@k|i{a>RR;{(Fwk<23U{}up)kC#IEcJ%|(dfPu|EyZ%#f+qj@`94OF67>h zwTLcjD?uT$*ms5eNUXHM0=iMcV+`f-^;YK$5ph+`ze&)4uE8EfBoR^ z>jYD08;~l#9YPw2FzNDpvp7%&q@bPkhXW|AO|x-o6d7i5`>|(C7V#-5%~`G$q;-O4 zJ5;(x$xuf?JgUB2huI4?neY8&7@%`Upkypl z+bPvtqf=rTmbbf(oVX>GM>BP;xPfsvUZ+jiPFQ*9QY>;xFt^Vt0%-wyLK0GLN^XT~ z!_}nka4k9v{>JGY6vER@wYzZz+#N8N0L!9H;Zfgnj~Xv2I^PZ_rvIc7MdUDe)OB#@ z&df0E1IizaRgG0s230>j(a-^oDa2@7-zQCv@~2@m7|S?R7%NK#;THFPyhdk`znB#} zfAL!g0kO<3N?-U&2t>0q&=We=dLT_eObCOrAj%mF)gGp+$UIZ@e5<;{7(llCb12vW z`Z$BOYXZca9Af;B^f-l)nqOW$E3B6jT?911T)_TJTKY8|4v3 ztCLlvx6=&xzss71l&+O2HC!HS^By`l-4c5H5ORCjx}M2io&wrFB9QNkkd@z|eIqxy z@7v$R^b$0m&0c_y!{>MA0mR7~yKy=8szYC_`K9Gw)5CK#z z$i02Px32)nMEZIzc_S&O!~H5K4$0*TWDA@hF;b^(8sPsGw4i*><*vPdy*#=bV$pcK zP6E^Ld)ACNXxG=KUapivSrEMM(NZV*a+=iQus|H3`3 zzxW?@LegHhUi1mt&4$Ka{mgF)qE&>wWunD)t;Xwm01MH(Nd{4XT<xpC8m#)YZ| z-^5uRKfAnEZ@7XOy9|;pJ>O3Ze{}p3a)kk^FZo+gIiktk7M870@nsEIHFTz5SP2rXIA~#qZ|eR9`Z_<={JO%EsJL zTzC`i2$9UPUea;bAmtbgj}v?bp9qjA+UT>cYEH;O;B8+ z1tEx@EfOCi1f-v>vzEuI1dxNXkMH$gsqXy4R6bg6hb_n!z$*vC))G$Zz>P!EK6kL# z*_b`FB5%6BD0k>t_|%IrJaS~6%9TkrQDJ;3o~-q=JwU4DGk8w&T&4N884EbnfWE07 zEG?8((?&=qI5_}S@cf7^93{B&f2FpkpB3d0M zT}QKXpO{eNTDKTkyaXXipg_O9l^@)F4xeQ|uD!-9GA)Q6Ff9%HFpI_|#zk>hg_LPG zY^XN-AN{rqiN&WRr2vue@v$lxm1fKK>DrYy&9A^A2JXVn;iEz>)LoS%bjC;fO7I>; z>@|LZ&Flh-5ehR-ZjVA>wThs$_o)h~lSD!x+Z?HwYJ4OD+9EmH4DgqYzVJ^2E&QOUc^>|9rUL2kwAM?79h|y_EJ#8+M$N5~7 zt!8ws+d)gmK~$=;5L)zA~i^-q9{J}qxI~@)OGex$5R_^gMb*;FA_jCNTlQ;j zhZM3=QC1v+l_BQ$4nRBtox=94E9dSuK)cs8{DFsLx~<@<1j5A`F*W zZLgNvlqDoztB&6;Tf162MEA5kza2tJlJyKaBB}HtfWiKIcF{#LMc3Gkc+TUuHL%?OMvjjG#F(i&Ui0-_t7msWDy=zm!^ib~sefV2e4#b@rZk7sdx zU%5tk)TZACC5a!HRB!Dwcq#P*weKc`WU2nKY}UsjjJG;& zByq>6f>={`gxCtT-sfFq$LWpkD-EqfvyaSWp9f<(xwusznEFU{BlHGYZ+uw)&ps>{ zeB)+s_L*^Q7Z=J@c!|7e5G0Ny*aT`q&We{l7~TB?<^JV=xF*f)hJL&+P!%w!K<*53 zH_Ha<0^%3=3T(v_;lmhOTrA`UW`vD7iB$q_?xG9;3I7Bu@JR>ftO_*0^@7X-A?hm~ zZ}o?Pg{Ll`RwL7XRB}&1_-?!1W`_B*=!Cw$xdPkhJkhkzyF22N`*W8xH`_@*?>Ce3 z)06a7Zxic*XpT2&mYhvGB;oB&j@@I<5jI29FGx*|uFzfcBGRtXShcy1fOv!~VEEP|_Y`jC?;apfQ1iJRbQ24x1}{55THn7YO;n zimmC}*j*9&3@bpq3Q$lLSgZN&M45i`$404LP7$0s^mcE!%m_9IuA$U zCDhM>0BM?|gMqN)loHo2X)Iv}6!zXw9lC8gKd*P`X?$Q>ODc#VLjej805Lsk)l6US zOymy;$fIp2fw#KDUcv*Uh$_|izpdbOQ)X=5WozedLw&vtUeo{3Odx;71`jG9=cax2 zMjyrqfHB(`xt?3#r+W6-Lg!Rjy_4f4lvn!&4njddh2_q#*N5HEq#9G3rhAr68AFfC zRFI+)qj(y?cX-!${PkzTUfP3@RFF*wz)s9}3nVVZyX7vznNT-w!(G!5QWOy3ef)bERJA;1SGl~nKuPmd7x9H z(7YMT?ew8saba7Bj}Q{a;MIXKZG3}bch*hCjdnf?&aWpZ>6r*zIuAygq*X=m7YGG$ z*a6J|6ufgpJ7YdeO^2Z_xZA2s+ukB1!!Y>w!AScbyV$1NIkOoy<%H6gSI3cC8&Nxh zz^?~XsOZKH;7glV>j$bz-&}QLy`{0dVp;vQH>oqz#Vj&)cmy=q}Q3-y^HEkbO zY&mFw1%)2}pGQDH;>;W*#US!KL5UcU}VyMZ`HC%x&Iy*!VTyV&|Si5NIC$ zL*W%WO(G2w%V+=FHcoO}u5~+|ZSn>g6rwD+K4Ii`I@k>+4v<_L97h1PK>?Fb%WnAl z1Uwl8rGDIy6NnguyX4*`?KAwG$?NF@kh6Iw@3ue^AlHl6#Ph(DgHo>Rl=uOV?dq8n z-4pn8sy0~g%ic#^GqPTjSDkC%6-0Jv!d&K=APl3#Uu)G7g-R~ZnTE+f-ZO%wMdbOh zJkxI=J`AzKuDJRSpCfddN`UK9)>)PR$G5&-{YIC-5`(h^JUAD?Qeamj(+tb0zCh&; z&%f$m0L-)3EUe;;wsJPW`AEL}NyLFb`|f$|_pl%84%g7j1M7^0KUzvuLtby+%Ux+G z>5vM|B$qEEW!(l{A7qq|#RE4ba6-;P z!@+V`VbeQ?EIFfjDrZu}W?FEvLfochi(WRsF>I*Itm{Ye-C&=MEvSz`8^-+ADGLBV zYrY->jt;L=b|p+?IoAEC!{l3g76+>jlbxeh%^TlzAWy#ujqVO$=lYY7E7)HI5b_2I z`#~vrx0UX^z#%%yT2T$mkOe|_f=Owe!&1>~&RhY@5#oz>OXS{PF$!lKY8uF3GWi@M zcyWuDC&|R;wi+04u(JVe0=`vDi4pjj2mky7_872zksHb|T)ML7ohFbj+28rDH^0TN zKylSxEe}DyD`)Op@CigoJ{uR>Y%`-Ps1QTS7jN&Mbp)#Y*g@30id@6NUq$&3 z-Qrju!~mVLPvD>JGg}(ENlv_7Z%`;+Zcb}yZN-v`i_+863k!AXcKe0rf>}no{r4wI zc<@pfWBWh`oCW}Lb}!<&!2GXTGLrKiByVsv+1SC;gV5g>ftC&doeuQmRY-*lBpnij zgh#TfT3^DQ8o?zL23rkq7mgRjE?=zB5yT+wuwS*GfIr%BnevAi1jXq0&`crtuj&k1 z1cYTQD@gB1@HiUaw8$6Vap@UyUnA;jH^dKc+`)D^bkt8y8k0WI&=Cr&G@%B8c;4(% zwD=4hrpzP6oXT$ya==ejZ~hhi`7=kP6|3kD)Wg2f`aJWussK&9CtTNLFbf}3PM5Ui z|8SV8JLq&8Sm4b6Hkr?_@&phL!TkP$U(cA3`%cZ!qhcyugECI6T!v_t1IbxO&b6Im zwh4P6TAqFTL%L5}y~v9^|03-;mJQz>bNL#$2B(>g)1YO+7+jA~E{O%5h0?h>f5;C} z#Y-I%zXsG^HK2+sRmfZrR%A(Gy~&XlKCB`b6J;HvU3IAi+AAPWt3uKRWgDz|AeEbF zILH>9X$CFeD^Rdd-Vo}b08C`MN`UGS&XCenyy`v|aEM6RJ}3j4^1F^CYM=e)u2?78 zwveF_k>GmrC^HIcEgQ2t5Z`*AEtDV6QFw^8RhxN10&81--^aLE32eZ>+m#N+^E3!= z@b&p?!*M`hBeo{U%20IK0*eAP+Okw$OtNTg;V|-25MJf^2e|e|=p$YL$>uD0F*5!k z+k+HVhg0U)mR4=^;;0%p3_x9C&2L+}$JtXWJ193EOx$(o!q;d8!bB@n$wME=Jctzlnx zlDVqFjn0*vsbBKc|GLi$8_Q{V_p@5vVa7$DU918P=t_o*f#Anok5H>Xw1L$QVP%&i zn3!guRm;$;4fOm*i zWAXXmun+X7<$-L*Yl2v^s=ic6?Fu>3(tmAO0AvLln&Sb{V&Gj7p${OoL4x2r9dlP$ z1*~$`K<)R(nc%9l!c_%d?CZxj`I|l4_xFoE(k)wy)7=>So4ZS8cLy}TS13Nx@x*HA z&!F9=Wpbi74Cw1>OLsjuYx7Jm_fBZm@x4vpj%fq!7*cfpA-fnMYXIp;#R5vyE50U{ z?W$+y$CM~4O$7*S4D<42BzVvTXOQpDbK>a=_mr|O`iOf; z%5C`u63__PsZOZOpT4G$72)qT*m^cd1Svj4kWT;yI1Xk!y{bm+dKSST$6uS@u54$@ zjDN)V5CAS1a^G6?6@qILv@&SGsL)@5Zm;^?`kr4a?OII598Vjsal z0EcKqgn}M1YQZD`RQhBHl6rw~aZpQD%PsR`0BU*O?4&RRD6n4T`_aRO>x2#~s6-A= zo&$uY-FQ6$G-Bk4OG-**-3ieXZO{_}a?1ksnf(Yu^0 zIXlYwBdw;;yEKR}edhl8adPd~2`3Hl3)LY}MxTVx(+n4nfclsMemq-;J6ghJzmj!RnOko>}H>gJ!S-%^komN&K+KJkCe```; ztRp?S3Nw%P?%uU2Z@z>0K^ewsKq2_BqYn1KzOzt++c&ekVF0v@s91dYa5JIyz>%v7 z4}1vL<8A8Ts64v+fG$*lK;#r97AFJLheM@qG0?(-hJ5twnl0<=>=>)8@9Jq#92}!h zxZzMxuj*=Gpw1)dZ(@1FVXdAPb@coHvYa8V^qnJ0g*LURz37~!>fL?JobAXcpeCCME{&;8#B+OlC z_T24LHF5IABw$%~8(8j*_FiVKYNVP0ZWkD8bDaNszgk!^fLxV5ZPTcP;x~^Omu{Yg z^6&q6fA;chyKL`-V{08De88+iQ4H~e37D=G5W!D^e+gW9_Ib)jg`T*ww=UUrqBAFc26>(c#X#2vCbjnSv;mc}~N?va<*2ZjvKn_YuP{`VMhvt`Vw#DA9x3l|8Jj z&qI%pz5IMM)GCRc${z5H5HFxDPUERH;O3ZNig4zMfSHGgKfjO#RE@_PM+UJVIq5sE!o0km2EMNt&+alEK`qBsiV*=9TgoSa-ICB>8giyBq z&Pt`QFPmX$_$w1_rS=_-XgZAAr;^Z*mAo+BwUAEJaEZdT zt?1Fl<>4@v0SP-xQ@@U}FYfyfgM;Co93%1^6*NFDo3GFUI)d%O>K^3?AlECjKrGAs z9tuWD>jZFJ*|Bzo-Zd;I(n0@UuASi$?x>1p#|?3y!if;ilZ+M#8P=l4)gRwF1q*0^ z@V51*O+eVUZvKyJ+V6ZPbtlSNqd(#0hZ2&7o8=g{cih}b*cyFrLC67Zh8K@`y+DWK z30xJK0r~)fw;`v=^fx;I1j+_+pgeIm(xm|vwCEN1&fsRz9|lnnHjWGKxSc*~M=5jD z%C5`j_Yo=mbjjxs&V$$>qioByy;HJ0Ajogp{-hRrg5$y&I5jltw&jQ_h3kkSdFWdg?|j3a&+%t7GzFbWZUOb@ z0(}PbKYU;HE^N7%blGeFXHi<`ah&aF_K2B}NeYp0JmYLecDUq6({i8O@mAbwcfIO| z-%aAbnHXfUL8!danbluDZBX(wnZpCJpGNosAY#Dco$oyc&CV1sLBTisl7L+#+~6mE z_!4;Y^OZM$X0UrI<;Op}TWav(u0sBW3$(56QM9dl!e}k+=({T84ve?wVX?NM4q7zZ zeIkzio^tS;AznXaw$VlRJ5$e5mva|^3mcV#pO?;oHig&|q6mI~bUpe(c5dH3x8E2C z7Gw_}zE`oX!bSOW+1Q=gXl+{o8QSsf#yY*Cw2STYuWL~+EpX_Q?JZPwztACN5$W!s zgx^PNlNDQ^0Z<|0H&FqHrJ1yr1eNvrw_z{PNyR0B=mO>Ul?8&${ekTfR|Am7=n5$# zkYRVmSuVC}S zRx-*STYAC$B$w%5UHN}Z-xVwnT&X7I`jD@GtUp!3UNs3|P&34YE)AUdjp%V_VN;+2h#wOzrVS6^C_vjSyrjwtj-U2zj z#E_qkWw@dwfr86uo~|LDAHM@0lrxK+HomLp-ZM$(SSnGdYtNZhQkoJKH|A3e<-v`e zt&OUdE91GyJo(OPeTV%d^x$b7XJo%9Axt6K{rfRMyhzqBi;GN+zoh}4A0X!<3e1~F zkfN@GjKhR_bpumPVrTrl7ePrDGHHq*g*$Qjs{-Vpr!ockVbj4?2US+dw+VG zzR*L)#E1duxVXgd9Eh04^*yQSx)GgLiJ~j82uQ`I0`&S3w#Z4RcK_ATtFfayQ3hLu z-pk+>+n6=6Z=ZcJmj$Z)<=`B~gzg12>GZu2n^eNzpAJV{2B^LquwuX~!?~Qi0^a#C ziNZzsxYHf=3}6~C_`H{?%5VxYo0f9L$b;6|gAp6fA&K|Qs3H7Tp!q)?Vh_J~tk$6J zTrunE!#2DvMkt@W;|(l%hK+V`QT#Q~Pf+e*t;BkZSQFg!^)@sYkbodRob$gRWb zPq3svMkqB1%?(YrJg$SU>}GT3Ei{T9$o+rj!!!gDf-%kuJ*A%Wg`dFD$-zJH&~BPr zy9M(q$f5kh;}-lFLs{P`jQIJ+`wN!dLq@3*7hZ-8w7t41{@{=S02`XecGOT&#!$6h z^i0vmjRr-s!RT=mO3MU>SMVgIP6FCMJ_d@W8RP@m#jX!byVW#en_W zG`cg7#-u6t+0!E>>ACN{S*lcf2DkaN>mMk357L4`6tt?Q72CC%#w?B?V^!QAra(SL zgcRB*aT`DhJ}TqiTO=uPK9}WD6-^w9t>SL>%x5w&!_xNJ@AT}s&WaA#4 z`t3Q}tquSY;y45n!A;#@!xsW!U{H!mZu*M$u;$e;DBE3g@>=8eGSk1#zQ6g#^>i+} zvTkgUgzq_w4@h~WG2$w6XTH2j*4G7&Ay!W&6V5loWAK)dJNL-wc(4nvi&1V zY}b*WJE#mlr-fBE2}TzcMCmF6xCD*!w@CO95uc#^y#X8lU#+amg$=!Q z$RzrN##+@hCo5$bU)&bvm=NsPNN;-5^!^+n=bI-x6NKJ_rzLuQo4!RwsP=2QLoi?m z$0}l5lsCG(@tckSO3(wORHoe>P?A9_S}W~;wJF0%$9>;lb@W$&-GR%!e6^RGIo&8_ z=ojJ7&jr3vIu~f2B3)xYkUywpZqtl=CT>HAKV-0L1|9sKMugR)QJ7+=a$xEk^3Ivp zRHKLC1|INMsFJBq>Fe-%xo zp>cQHdcORIR~0YZv^x5?!0x@|P_y|_eJT#O$AYkCkL+9oM|lyK;`l;aHV*8U1XrhN zaMtBN6b5Vc9VnfkPJ{fpv4iLLp{{PNR6WjoCoN&|G;?3J)CEYBR%T_BE`EMykqYe$ z$a8;01YiEs^|aA#Kq~=(3TL6gYl~ETH+>Kbfw3eYds>ob&(P^jhRDDhSe`{S9TJE} zNHj+6(+2Jr3h`8?t67lnpyehOAjH2Yg~u5Dy&aY_*9@=+e_Kxtya|rIb&IKI;Y7gS zV=V^-8~Bp8G{a~p1rVhY9>-(L;~?IFTi7ByxRz?5zrVSuX_ZJ?3lF!gfBS*yeC*IO zKJnOp3b1tvJ+mYb?`mFUgSO2T9$k-p7bl?R$peywHd+f>#-YFNfBg#BgNql7CNT>? z@72`Qq!lkG7Fr5iL7QExr@du=jgg(3uthyIcusI!Q(jD4iP%`yRnXHu_ZqI$fU6lK zD-htL>9&|IF2e}7kZmigJnS|9)i$ct?VTT~Jj#?%P?Akw(#KP9i~UfWJ1x{tUJW!JE*K6A28L7s5X$ zo4-Y`frymJxHd~=0=G1@by=;OCfG6m>mLRp==ODJmAvz_F150o8VCcgP$*;Q6Z`H~ zutN!WvW=l#UbZ&RZ=i;^9zihgUxmHC-VgP-eZ+xqYp(asI=De;4Q@L4hZsPn@$L`` z+`Zpj__xRjp6gqbu{v0yp#liq|C(>MGyBgpO3-*(?Z!J+T!1WV>Smd2F&6}aOdLyC zA`|K$-2D6x%-w+WbuB5k>}V>E)K*d{Y|0b4DoN+JOt<^o-F(_E%k@DB!M1>59 z(Th|m7jQ~lg$?%Pch>?muK*+9ejNr`F^ZTp&9~|kto!AOI}t@|ojKo`7UY&acFT~e zwLVOYT_GEM6;N{9MX@PD>n#vAum&&%a0@g+uR~JBw*tpYch`Qo;?UQRNmt5UHb4f3 zIh?r=f6J|M;D8!4%wSwq%rP-HCk8(nZj6HhL_ivR59$$#jzd4Z0CKAbgxz!m+Oh6g zovRcTf1WybXMKaZpFuneh)>qr?eMTqJU$Gtax%#5k^dUa6-pq_1QA?dFxO!YQP;ge zKNVzYIB3{)dfFq>4O)*MOGfIntvh(PCRiq7ugb&Z0MH{Yq#2*$2l5$&GvG6L5`&AN zximQ51g3WYy9=agPGa#H7|G`OrKP3WzB-9Ynk`>kA47*SNPuo0AYkpHNR?7b@D+KX z)cFB(K>p>9_}_EYdMd_Oy|d-y93ob0q!H3=8paF#LdFC@6o(#rKm^94Gn5jQSWv@% zA!C(Fz(E!m2}oVu1_)gBY71iJAPAlt`ZzST{@rg4?)Jdx=9dNtFKx(dT=lIp552Uk zPjzgsI=;Du$AOOnEN;s|*GGz2rbo?f&S-pXR!dsVrMjVkmU0aOvEb#Qu;Ql*Iy?10 zoy-oe8@?obd$ZPh@&HtM2pAw@tHfk0z(IUJv2MQ10;^gtaJbcVkcGhXHDsv5gS*SiLm3zIDWs6Fx_v*o?Z@Fg&Gh(H$?>5Fbq%^z*V@Qr=kt3{JA4tRO()Eg#36B zBh=})zn~dx+s=o>_saeCM@Epx{LMvoZrQs&_X#bJ%VG<1F7g@p46&41Fe&U(IPZf$ z-0E++-;XGEA!%3duCsziH(dvFy72f=zi${L^ua?O;t0l9VQ~<~LS721SI8KeMuRB= zAQuoWuApbCkIC$?2$SUXX%r==f?W_o?r5U;!1sV@!$8%{F&IgrrVk7z!XE!@zpvSTSFH4{iz)o}BbUmI7g^H(eSOJpvobC`g^l%CKD??-YQM$ERUDclL@_%Hp4qSGA zb@ZO@HpWAy7bm&eSCghwN(#bEKjg}GYjCoZOOZrMJ5Tmz<2$Z&e~UIv4=U(=xXWu! zapuZS7&6;766Gt2JHCTVCeH*nRimU2B#@-+*DX(Vbj4PPEj`M*9}du>vR-u3#81E- zwj3hxuHYm8`(QEZlY!VMJs4$l&fJF z&iZbk>DTw!@}BF%O%7R524*AS0`gx>hu&5RaB)>yJvn&RD(eDIt$gn;*;S4Z)z{(@CboXaxH#>{0-WS^BvVI zFu-F&hm}!xCAo?1uT_l)Do-JS2TURmQ9k%HC&gZUK-jzFiKe(rj-1%QH98Ftktj|d zt=>VNULo&{M+NA+Rz&kafiRh_9da>Hqwm+GQq(*=mG-9yjq#) zvpI+eY*OGBEjAy%hZ{lJtamnjG}8kIen6HOaAk#vC*+RmQ=1ajVJ^D$80#UI3(Q@( zenDq4M2o8qCpQ379@rvyEu&`8pom|$3Ip#Eq;I6bU(D9EP_-5qWPH|g84TvwfJ}X_ z!N1F~LIOyK22%@JHrN6sjopgp3@+ejKj%MKD!FfP-fZ9+QKY?epa0u5zJa?fwv#Sw z;sQNW_I7Yzz@qO1B{{>^yHU#nqAHB#VT=vOGY5mi!xghjecanBv#$R*@fb!qBH-4Y z1O`Y*eK3mCOx+a`_`m|)JO{_uU>UqL&_52j0R}#Om3G^s0+cZ*C;U=&;y&POsPsW( z6?;|?ZT*%88!;RCk>8uyW)TR1SUAulC~Z(6Z}gXjm)$9gEW1DC?ABIX6b zxNmBtEy3^N#82GpF4D>~3xuAQ_5pa3m;PP{y{ro%8?)xXj9U8F8VKOulzJjj`3tzA;0qKRSe~T|D)(3+X zP_cx$1+GCiF*ktHe*5$Nj){G>J_>CKkkWnpBSu;d8zaN=T>H8w!Hmk4n#k|`aWxgb zbpnjKfwXpvyco1hU>E$GV$3|rW`%kMZ18{T6sR*1$v5=h^>u|6NJFr);IB^X$VG6- zx<#!KxK8lnKwSs^5PwPNVg$W4xNvF7fCyO%0#@J`?uod^W65LwtH2z$;`zh2_le%j zt@FSO|HXDnEZy{2A$2mAc?84(@Est7gn_>8Vt0a`Am>GXS=P0I@O<-7V1RxW>XDs~qOZC%42chrro;xmA|$9! z5~vjYmp=%2Joqa+#+PkdU$c0|e9(F+VJi87))pJT+gldEj~z6;B?1mfe75YgKNRQtZbE)UHTLBo2qs zNgcJyAq(AXcq2HRB4N5*>{<|0*Uaxyc?x$|p(yMH`+j;y+u6C2NX*!TY%OtiNEZi# ztxzc2t1}K7&TEIQdn07XZxoeL(x!d{9)4nqA)-nM!aKl-)od6ak^)kLf9q*+O|P4n zLU>vg8qIx<4wGC(pOrJ_^x75pURw{9clWAPJdb*Ig{t{=Ev@MC zOq92p6nJowF;_;3^OL2y?-DFHr$N^zekyVxAs0{1R z3`M@zBZR_9*mTWqGs6Mlr~8HmglhsjBELK9xbiDBig8aw*s7W>?F`_!H~jdJQQRVV zP%*T>$&96`q-p|r0qI?HR%=Z})v_Uv#A<5fDk{-z!sfuptt%XORlWRM)d7(n-NaX=cYVnRZ*j%vrH3*oKoTIC*3;cEZVpp-jQoa@uXU#RJ1rf}p zu%xQ92gZIbOeYUN!6r^dt&}IREwtwv6o>7fFHmE{2*?pN9=}vYLNTg}(yBL8EcbDW z`gyy0IQ8C_RTd-ETd@^iS~MFsb!52b)t3E!IG9jxO7nmlS#i%B=K!Zx!`eCXkIzqZ zDMl6*+^LIlaJ8j6vbe`b;%?VjWY^*+v0YZZPgnGvjg=b5U|*`{Hh)k?C$E(oN=ew? z8SHLN_+XGU?cJ+J{Agi7?RSO!+09=^e(m2WU?XM7?cfSgpk`M{|G~Z=kEUqb{lYxQ zOO}PhZF*pzxe88NF)FMCey0vSlpC=Z_=vm^>Tk-k*Mx{BYU=Hl98a9N*xD#hj2l&R zGA6r;G=uv?x;$ql#ZU-Kovy`*M;6BnF4tg3@~*IN`Ci~K5WT1$cnEh6*;Kbx2)x;& zjk?aPMW!q1k|UmScWDleh+~@;dt7v+)a&LeS3C6b%UqjQJ)NnuDxJ z02`qd=LzQV3^_2AcK(J?^LVDS;owV3^-7iNxc*|Iu!`&8o|*2?KISSoM591m-!_vw zwTq*+OKhPkXLW7 z`dabw&!^#W<{>zET>Wt8DPslPoPO70tQ|+>PZhSy=64e&=nm5)duZMJvs%u7Wt}>PjKgu<%f9m5L2*7SZFAp zSCwKG`MyFhjrHQ;ddh+CjU-rKhez<$vy5(fWKN5Fm}aHi3t^;c6#`EDP?`eG1KHCg z?S(l$j8QEmD&nl8n?c;7l#9M{^ojqux8!qe25X;Q`84%)FTCMhB(fH+JWPDoWcl!-t>vGT2k zOO$;Bs$jd+!u*anzGh3RPKw0$WMs(AFMUk9 z?>$=NHXDkgDQV1|)0tf`#hsx4-=Ff_D&;UcWIoq#BfrEg3e(B`40FjjWZRNsmy95)Vda;szs81+C*{u=|jxYPI1P) z@b0;Zcc#6{<8(!47uYo8BOrLpnC=f?(ikX9jvFKo=Ob;9J=<}m=#jIg(0Ue)XPmz^uwTpWUP%tauH;XD z*S)-1w36b%6ziiWrKKFVJh@ggBl~eVd??mN$)Awm;8UbBFoqxJERw13A{GpPGnFz-K0zqrl3Q~Ps&k#Vi1CBL5&uU_`V2{V;QN}QTQSr9wtjAV{KQR+pCKfM z3D0~V08UoQQP&c&1%8mLC=k0Ll`K)a>N@O^qv_uM@$TSAarN`_Y(M#Pccm2K>>K|U zkzzm1ocB)Cmva!_HE;H-WavV19K+#32&psN3tfZv6E6Ei+>!&#!j^CHBI4AQ-iWeu zqq2+oUAc=5db0eY*03je8}Cti0<;8Gv48sCT^m40MmS)Rw_$Q^fVb5mzkOZxlDNG& z-LY(itvGG6j%OafHvdLh=?7iHCR9o2hpWt$q>!6Va-cnGOZK>sIY3k6VDZ+mbjA~~ z>uD*m064;n-bNJ8rTw9Y2h*5OHh+rCfFohAoG<6|_gZm46O!5hH5DNuDhf4W+L>iF z?W3ut*e2@wqbkYyjF^Mz>@Jgp&Y{9|->RNdy~idevgaP%ep)}ut=#!zIqexyGPw>3 zkRI~+#>5JEUxwLBYP@>0-vXB*_t@(<&DYY>8O{LU$vKa8MF3u?#sI%wu!v=;`;Lxd zb3WHEX%uIh4U9=?djy_u?z_l)w$XCdDvi=}dR8WK4i5i-q~F8GPnJ&~=zalC9l}-M5WYERsO}Oo6pwF2<>?1?FiqaRnwz zS(P-wswlUK7Fj7@(|AWOb&>uj94pvc!ybu__ZCg)Ki$yxOX}(w0t5_sEU-Vx)F3w# z-Imf>8qUP!gJnkBHXjVOfu|x!3@WHtU%J0j|3^W#(DOMCKtKNcwN~Za9i)`+dllC%>m|c_kED)xreF+|K^t&K5x+} znz$RxMkn!)!&J{5!`ukdjhr|}5}g>@A-i7>w}8pwckOMtILmg-ZS-q3lCy)*)TxP{ za>;!BDgy7=S_a=Z`Hq^;7_{`0MhJ7ytuOhk!S05Ib#8ynIug#Ghk?52P!cFv&izP0 zm|u^Xr_u&!R&KGV^X$!A)KlP(CkbjQ2bEOV(Z!mDrE<&L-maU7rIZhOXlKA1L)cn| z4|RWS2#{*TPZa<*cY_(vs86O=?18Lu294t%w}W5vwOCkAZ==p9A!V51;d?b5X%H*J z7(Zp0R8~3h%4ID!y5g8V-Gdl2=q)Mt{|gy>>VaehRm-SH&zZK2pToI-NB47R9FT&e z1j~UOnfXqE;Uji$RT|GLvOx59Rha!m-%4#&m+HC@Uk*58{FWddfcf~R>92fo_#&hl zW)``|HM^R9Zc=|St7MQeN_T6dfPdt|{j~>TAJO({fn>;2Rp!C`<5Yl+CWh;AsQqqh z92;NP^vkBP*ryP40!JX|JRYzEt)kn3IY@1#Tw38>W~3Am|`sX){BCT6wzsXpN~zS-sQJqS20QZA1pq-)yp zj0Rti`u-DP*NZ_&ph`c244>$Ez5KNp7lz`hZo5f+5@G3OalrqPci;L16O1K)NSHUOX?{J0q@uB}wFmfEX6tF*EJ)y5GlSyR zCTecw^N-*b%Xo0!j~o^)-~=jZux8*s1$10D4uBBZ(3rPaHqpEmL8ahz=X((pimhCw z5zj#m;LCo7${W=W=N9o^tBIw91j|KE#lf&o{c~w}fu1pz)-djQ$^qZkuYCZCoPFwj zX27><($yl+_7QUk^FYf*Oy9FnSs1K|LOpOeZJ&zdGRS0cI0dQN&jmMg*!D~bsmw+sVRK*i zJZ2#|5gzM}JHhyWAXF9s{A^V%eH`ELIr#q}V~%PW#<(57ns|n~SO?*H5Hn8%^weop z;{^5dFqG8Q-Vh%O7h63>Gz0sjfoga&GD$t0+xcL5YTVaI5y9$k+H}`C8;~OiXsa#M z>@UUfz8|pbsg9INs$H`$g7=Kb`fEK`EcIA$u;G{ne28#pplp4#Ph59zq#ox#(o7W?^2x9!e>hZt8+FPGMLY_^@H>7~9 zx15x6b6XDHtL${oq0Oz-1pu3At4@mBu-w{_20+ge88LeN76B0SFoSkZ__;duZzrcn zE1~KK2gCW2j+mKVCx@0Q)+O-E-*^~W*F}7%5oj(IA)>2+1SsxF0tS{Guz1oHa+Axu zyy~&EG(!KQ2e0o_P5BdO{7QtQ#6*k%@Ah2{)pxt7ym83d2WwWk^o!#w@{NCalfs-w zO6zo&t1`J$u4K%YWyWzAS#|`|(hwvIR>*i3fwitA{k0Ol{*)a-2VCx3PTn2))k_eZ ze?d)KHB~yII$z`qseUEXC$*xzph(Vc{!>|jY+7Wph37MKegM`{5fzyT1A|U(rd#Uq zgczY$FkphY!38DBdkQJ1TbG|Fk73@TBWTcN7_vHX+1t(#c%T-NLtccmH}4F0*;Y<# zOBl1l;IkmXyq%BoT#XGDM_((ns;tXBFd9{Sy)W<9$~;hq{HBkQkW8Qg(=$Y2!0Kf^ z2wCJ4aT{M6?NiW`q}JCo&f_>uB!6_y=FtV|udPM%+qOYWf+HATd`#Ar$LB(7^gL{} zGfC!ctL^Z;t`dgx$g_}01y*aZCs|6NW;c~|iW<{j9D(w89@$sd?{sMJ=}Rsww@wDX zi#y#tJK&mj?UPfPu`EXD)8eeA?mNkJyz_!rca&A0gNUjL<(1nP*%^~HG+Q3FwPSR? z_$8MEZ$ZkWtJl~?i?@p>avhSLb<-G*FE+m{NP5D4&RsimkZrPJx65E#u;5_^l7QMy zGEMmY*D6l_-MTcT4BudGno6!9?vmW ztIE_V-Cz#Q{QT`zde)*N+O^4R1x0o2{rWbUN3GQpm4tjhF5y0|v__1zD&lU>ejpQc zmqtA!3v63+YB*XIk3x81RjB2g>2SAKW}LNJQ^P#uFTR% z@*&m;=3jCp6%;#!?Vvaw!N=IlDL9Nw7Pugc-=9tKP#Dh76*|vf1|#49tpCDlNu7Cj z?k--@#S?CSTGe9p&NDOb!a+C&G^lN;Xz=tGKV=0D|9%R8%mG>2l`AF6{b>#&#!hz? z)?PH1IJkx^WG+GKGzbUI;la{M1%#lnPXiKdMz08D$kf&jnrFoITW(AqzWTV);pnUL z2lOae#sthcAyezy>Pb64R5w<*6uZTxWj=}~7kj`1^+M>uF5GxY&z znw@Zd#WYYF>#$J%YyQHX6LB$_w=4 zFyapBd!=+e>dNwEi==~PGa0Q(*h_wm$4BFXz2^_mM-ImCw|mfV-ZbWBjy% zG1l*gv+0t%)>?X4(yn^zpzrAP5^<^6<$>T5P2USpPw>}>oj(;k1|>!E83n^zMJCU= zgHpVX&bfCL*w-4^WwAwiQJ_*6l~lb~eVATLO#i&e^M6I%Q^YcFCRzIT zMs*Pu{aE0DaW1{0#2Yv#E}D@!$6qw_Kt8A!Rdd%)i=G zu-K&k6Br-}%&xVbt~m!r@43CN0Ja*fW363xg*z1AQT+^9q7(QM>T2mjB%c+aKf17F zBmj*CV5ZXKfF#-)qAZ*Px)pU!U~_)~<1IDyT|JjC|L+mB=ks~}F7yL~Gsf=B-5Gm} zXS-R7c&9rqL48utGvLOJVWXNhf?ngLC8d1~sb#8{dUZ-o9SbPjcuMQt%*#l!>KMPd zh#Qbiamq1owx(CyEpK@Eewe-5!6Sc;)KBQ&x-cRyL>E=TJjEc zW%kKsY<@tuQ2T1-w?JFtdux}h_3yVBed(vEp23{uRpBuI(I`o8vD*X=c*AY2l<0J& zzuF#;HGY?=AntHD#Qe_Rwn^x*^DT2zk-T#9rDbHBTVJYu#H>KyBgxYz=ob|@dz$82 zxSsYXYiik>65NQUGDt#<;0qIgB(rYx-(BgoAiu5L3 znh>h=P6kowAiWb25~M>y3#5EI%*;7+%DdM0ukZa`EZ0h&B>Q=GxyyB3``&eSy$aLX z_K*b*arR8^C3PrDQ}_18@*~!BZPFr7=BkYPPr`HIg4tSg9_Q*$2HYtNPvSeW3w#PE zFm?L+tbtd$?pK1vTW(zfVF1C%gU`y12dGv6aC*a(3}ZyM)4<3Q?HpIdN9KP_>&#nW68cm zohz~}l&T&8_}kz}ix{ABfE7wZZ)X5tCV#E`$}ZlhtOqa!d%(!h0+%)925yHk%hR_O zO$&%&3T~a>^zVZlX&(ep=IhoL^DOBy$gQ8QG`eo1O;pnlhuO>z27YX{ac&=(zF$xj z=N8-j+Xn3tc;-2Uqu_k)v2P)={J2MEsX%)HN}!U2{PZweZX&RW2KW-M2ZPmt9jKQ6? z_LxPEMm;T>nTy*%5Sk3B&pK(A3RodR*05(<>Xqa#ufLjR7hYD2RNxhIA1OnMhM)6g z?ksfmJ}#<{dK<78Su-^EI3Tst0tZRY#`EUW>7kz8e?%zQ!irsDIuc!_x?n_^-{Zfg zYb zO7 zHR^0qg1N0(c%8Hb0^-tEUWgRVb#{XP1t>07Ftf0=CPBFXt0p6Fj4`8l2SJtTOc_H!PS3tUB z-g2!V491!(BJFLE=rm4FPvzLRwNFa}0ynm}y=R7tWKRExBWy3mhQ-0OTdOFzaweb25ybgQaOzR?T*#kCukdbW& zID~Hdq#_=*8!R0-Y9pEmn4+PG+Jc={9U7Ys0#vT#qdOA-xZK11kOfl+_`Ipc=WizW z0XPKMBS|vSvH-n?r;$B8kLqb);&9FMKhv*Da2j+h088TTr0U)nqYgd<9eR9+;q8vKYLaP_5)Y0TFi$%ZRK-#fm z;AQlV7|Cg4SU<*(LGd( z;U{$_l6mAvjDX7i)n^pC`#h|Q1jU!d>=4}=PJr;4LB8#b{EpujYEJUCg!Q*nOHS{= zjz{zA`X)U-*LGzmNbep$(DiCqQ0G*<12%5326 zb8}sKiJ{|^7*#t@5Er#04AJa4wi#yaaZJh6y1l>fU*{P?CHlv-S|xHNxQf9u+PHN3 zGvQ-f3(Af0=HF^;v(l8f#W_Ziqvg3De0w9kYlazv0R!Cx(xC5tX=)=NsYOV|O%8(G z!DQ!{#8Z$H0<&F3Za%r_Cp9*aro47)no~U=AOrw|#m(-a0O;aJ!x90%3!F+?Rd(wi z5$*2A_Assp+wrrl7<98ETiM zY>FK^G*pS`BiWKR1NX$kfW0{5Zsvld!qTx%f5DqpssAjw^P8w zf33z5btRXL+g5`TcS&Mc!7A;Jz5cUXw0KH@j^kUBPb7h2HM3(HARJa1p8tI`XD)B3 zC(viI%7HjhZmaSoO_|S?V8?{EQ9E|>0uxtc7X3ELCVxoJOC`P|W!OwS(W+M@zk48q z^UiQw&IPlwGPk5#A|?fD@f`;J;~o)=hwYg0@2|?8Kj9*ySdX+Qx~ zRt|}MpT*3|NB({+ZZY?G?gC(^M9P7uOGLwqQltra2_G=mOxiWs$wM1~Y5P&;zb61T zvtu44-D^V7i)3ow5UHCoGI10tnb|L)wY_vx(h6lhM7;)$kKfBVCNtb9Xkzr+>zu4& zz4R5;_Lc84irISOT#W(3A^QDJ<#XWy(U!4C-jb(dpOBwuRs^_ba<52wI>xbvR~Ec4 zBsa+U1jnVQT(`|=+PTei>Y<8qqkr#FIqhpZ+z?aWmPew$(lWtgt^JRwk(=e_GOVF| z?p=2tgiGJa(CJrLbjn|kycH+4=;<-OyWoD#U59&KWxFupid9NyWQA=HipW}g4cTg*Fz9>R10q7fvC_wJPQ?bHIzI9q7Pdr5zUBcy3jv%~zS$vthffUWP-|l7K9rmBC&YA07i&*8Ljx)&_OisdR z`YpD>EE>UGwwQE#bzi}+c;q|NJjKtg_v$V#`S(?B*Cz5{v*+ZP9}Q0~e09Xf0|vn5 zo$TaodC8@6Pf6cw|2)Tzch`{RE1Bki2?L}kO%Wu5{<5=hHsVaf&bRMjalOeBRI9~| zvuko()kHivZlKN#R$`d`xnT2cKFDuSy@NxN-AB1&L|liZs+Fy)=LnEOaqu)Mrc{|$rmO-Ul)(o)~(?)RM9rv1gxMH zqufdva5ofM%(!mLFfd>=Jyy23sf^zKJj-RA+Mpd!@;hH#T;G*)e>b4Y&}Rb%fVNZt zQ}e+&>FP^3U}=P0t+dtfHzPNh?jX~52e<|17fue=A+ofL(L@coD6lK*zapQqb1*=+ zc>3V-Dm~5fbI*cI_^w~Ai_CGTe9F#E@J&=GaO8&(q1l-iLn~qkj5tfN-6sU2D)9-`<9d>Us;R^(5JWn zQ4q-5;uAH_pN6J-cVt1$w#F^J>ztpWf5}||sBjGkqwezBf(VOm%@fR#4#2(zm$2t( zrW8s&`*Ns~_amUo)Qc7FQHBQc+-Zs}Ai)@6Jo(?D)c!^yE}8k#%sb0)dw0rBLa3Nx zfA0mkIz$~wiXZv8gQFrafxJ095y7{WkXC?0??|GlEm`u3J2h#=*PTfUVZU?>p+AD~ zCPK1Em#Xj$L?=N1RFc3%LJ)rntP;c1giUW_^Guk{hlv{{>sZM{-y?g;9B>_`Ir}v9 zVn9d)wF4}x9*+LC-!$pErE_!lKAZVTX{?(Fmva10r<(LLLg_HJY-wc+_-P^yTC?*7 zAv@Nxgr`DVu$yk1&@TPr27dQ_=Ex@h)T6A=^`P! zI@EhoQ~YZ6a-CA-i#Jxk({+Xe1=N;|fx1D@KA?UVPr4o2@-&!DCmraLhi=)in{G)f$X{*ZeXsCvbko}2zD{1YTJZPAka3CrOK`ljKn z(cm>xW26Jwy;YuEpi6OUZD({@i6ywHyOiH0ZUEg6P)kjb@TUP=DPM=!16j*dtwpB! z_7~=459<6v1nb`P-WTujYob(ZTmof%@R;}2L*I<~83{P99izVZ_h8(9iF`BfA@dYXx*rt@@cE_$n`p#=0#8<~gE!%7T5*WAx zj$Cs9+Kf6u=>m(1(7v_vci$YSFogBB-ZuilhFKbpK5at7&%GN>B9C$iN<(pH0H2WZ zp$l_DU`zS4Rl3Nb%?ErSbyt^&4c;>LZU%JUS*V-?SW^7_H^kisEEh%2sM#z+CYH14 zZkp}w3_L}8@(Fvke|F79+G3i%jqq1b0j)9 zPq%Jdwl=>7`xUVK(;!JpLdnXn@C zb9cSRedZgVgCxzi>6t@<6o!@XEz#AV(CF!nG^5n`QA3pF2=(%_wr4IA9#i`~Q{9$U zS_`iZJJXb*(-lV4sD@Sj#?v*+zo$(BDcCchYD%$&cUE{s8Oz-U^%#ZdECA`|2TWM#+aOfTRYJFvB(fP_SqDSHf@P0m-&t}qp@19p;fpQaK`E-|C?jifmoL&c4qLx#qv}Q z?xc=ka~33jf(mvR%2fR&jPNFaYGaTX5Jv2GGB?Wkd@Z0D4z_jeO}EO5)>KcPXo4xJ zk^Obgg(3iNAgU>&CNWRvc1RBjI-N#Sg3bm@gpNZVR1;F>3WWLuhIuFU_HhiOnlyYcF?5gRej`O0uHnl}xd#QbL6)5m!dx3b z4-|hu#qsEFBG3j!w}VVW4{D!4c}l5qt{mVsF` zMMRC_5k}D*7$B@VtGnQUmMBSb?*>tHYs22qnlcq&N(9n96C`rWXduGWTe&mg#$mx9 zt`B0TaEb&Fl?{M^JS}{5YkO}eL8z?hge`T|OhmK|)8OCx@&}raj<=+!n`3=+^maR< z1S7JuC|>PhKB`Qas@ReH!#e;AcJ_kQueYsCQ5Qpv5c@a=dn=$J9Ac=?qj`5ecN1KM zV}pr{Ti1zjxA48yFk0{WzniLf)bpf&;PVS6!-rFwkDq0RF5E`+Yb!v-!LY%Z7wKN; zEnizOH{~(A5mD;>3z2{z$Zs8sXUeDLyqvpPJ-bkadVJ&(l7xNELmfz$ruLp!klB5U z@tu9yuAJ)EZDFaouk+EkU}-vwI)7U?yl!zB886q#wzZG7C?mjRC;4i=HIW8y!y_2$ z$Y=+0lmZEpaCYyF6VvkD#diOxY^`{WrkV*+WjVl1llMqj$+<#frCwx(c=PAU_^%iWRBdUsw*$YL%D&N@Iq;?La26DxPFmFW`-_yh;xTBP%5WCSM3h?{A z8p4xQCjOz54w|>2K>=6Gt*{MfEfVT~vYfkV>=&|OvgW_!b{|gBAxHwLs(XJ5jO;+F zzC=&?us1YktF-l)rki~}$`}z=1hmmW(s7FO4p0#f1GODq`BlWef0W6-s35Mm_T;0hX#Q~q!1Y*frvxlp5Ap2}y z5d1JVZA}II_-%}``7`3LOdbe8p96G3d?_UjP=oQ?ZM#t#gPHHMopJj(onhwDqvA*v zg-lU4H6TMcVqkjPn`{MQd0=}(O4!}!0?fgj3$qb=+I~}cnGL z5R_=1M{+X(ARF|E?0RYX8sC3UKd87PcFF8(7l?=2e$_b}>5`yIl=M<5RWlEyX=@M; zR=o}cpmnwR;A(}vHj`lxkF@^TafqfO`93iGL;X0~^q0jDGd)FDn|gV&im`d|%#9L7 z?31kr@7!z`HR#k7C2`YV^P!Z_w|7?r%)>23e)|*~ab@dUR))QeyKVPFscsvt3GC84^$N~4PbN=W#y9QO zEECJ(rm2T=CyXt?Jg@^RC6#$Q3JLs<8QR(fK;mbha{M7w&$a0ljee=-`b@w;pROCp zr;}#0N;`p~!TUu1G{EldDpBI3@Fn9Jv6E@f$F;%Q(4NmLrDOo5#I@=eIK-wsHOaZ{ zR;|z&6|AhKmi-^0Y)j@0$KzNR(vS`1&O>+*^C$ds-IOI6y>ybM-zqKM`+1LDkQNrG zx#ac6S%27R{~U}e3)n&wotiktalb?O%&! zf!Kd=cE*945Zte@6?+`oh%*>_z}}iYcNns}Y#@DO_v*=7A){F0;rwMtNW@EG_VMhu ziBC*bkHy?gx|L@4 zT0be^xE>w7l+$+WUJi;u8T(`?E-#6PySf`g?-CY@0S-9R?YPXB}xnxPEvdU(VNDeFs0Iu_P{P2UoQ0xZdWV zN=TcWTKZ82Pxy<)NNXFl5W1xTjqKJr>FA=lU%NiPo-`oy$#I2_`)8;YWE*0a^VH4b zCf&dJl!CQl|cYNVCO!R(| zpp55$)IOX0w&q)9X`)NDr0r_~tBSVO4p2nh93O;&Nrx+UgEN}bS8yD`I%{r4?b0Dk&YJmU~4%v*kAU2pJ zkesdj>?u|GaIJ3b5{)I^=JK=(zGoEz&(+bAm%7eJ->+0gH~_zrxN=qN^ujmR7?J#` zu(WFnwo-xp1h`3~Elv0=YD?Abd37sV<7xS$Y0|!6Li6{hxhuq0ndS+xQfq&oHyz1;9?hi8i`JF`4qs$|6z(FxZ*kL7jo-DGKQlv3{3apWX<{QHZg0FwM*;pYjI6*5#S&@z>&N|Jy&*bJjr3*p`=7*+rw-GXhR0tnK|w4|(tdg09dAHQd- zpuRrNkyaiSQ~2r;%Ua0#YOEI*rPi8%=4Fc80(ZGqK>Pbm_LjL@1vzkYD*^ZV!QPM9 zQ_;FtQkbvsd*2l?Qtm0-8-#}6t2A=yoXHaoAvSX9;83xB+^$xxV-JR7ivmhBqAxid z7O$T4u#2xy4$~^1TeZ?Y_e*4be5e_&^E^tT zBFU}Ep+SG~ao1_gE%AHVU}psUV_&n7Po!cQqkVSahhf7UdSx~5{uB;~(cM&`g|6?4 z;hPx`^NS;+OAWg&t3I=~f^BWB8eG-NY zb@J==RH5B>R`Q;RRCNg%Xpfy=Dlni75|QDg8EQN&f1r%Tg&ZB4^~5YoV`b(wWD%2F z7*WqVgiq5nBh#zkDP!#&;jfkIKJbYpOMD?{BF$Jt-yN>j?YGhVT<9&4@I$ramXA*N z$)*;|?uvF1zIjEqwYh>O)Gp7y6}&&@Tojm0)! zvp)O%y_HIv!*Gixw(a?`d6nZYVu2C8l2|f)QeH_vM(Re3YT8o~I;Q;lXZg4CIGK}V zr%Zacz={@!vZoFzM>`x-(2hvDHwcSz-~V@qr%ha zywzSkZqk3m_>}#N+L;gcRBn5HO9ts@xC*_IU#5^}E;~!$^rNs+HTUpBz6g>|vu~wq zflk0L`G|bu=WcJDSgd5C`D+s1>s6?y{WA9i`)ilKgru10xfS(2{yTj9=GUkl&T%JS z#ovk(6_DdnzW6|Lu8K80#V;}I7xTM```W)9A2Z#0;l%XzEK`8CfC_4)xGccM`rYzf z19@Ofjdabpn(4bwDOuj0do|eDSv<(4`fR)Vxg&eHTaZH)KVhcrmisMS5G?-c^~5hX)!;0M*O&y$=D;!Qdz&e zcUkQ`4zS~i7=q~?SrQeAy=>xJ9 zEiJ=n*~kt;q4(x~0|EmiOi3`^*qlMn_Z=;TvNshrMn}gONDeeWZu9pW`B_8#0_dGA z1#0Jy5A&o9=D`0N{hu=;CLe6bH3J)RmlhWX(H)Xh1;68@f%FnmE>FoGGF^D7BL<1+ zXr$sp1KBwclxHY)En;^sU0CGaPI9l@j^vT|wB(1OAm_Yb#AZpM`dt(1^HmG}(TrKPc~(x*9Kogr*N<^} zR7{G*di8vY#1?bz!+O%o5TWR3&3IyqKV@ZxnKh$|%@ePHiWtpx-^WNo$FV<7=Bk)^ zP3>4!9!4*3#y~mzmd#Q%-}w$Eq)UJGN$|Lri%IiYE}`?IMkq*GbVYx#gC~dvtm7u=(|gE0c+nK;BYF2)iG#H~X6E_$jDWBk3Ep-+taq zW}6OOTet+aFQm9GmGa1WPugpdCN@e^zLASu^6MJCaqU_Zr|)Y`o?E>#Q~f)_s3;)6 zU+#xd>^8M|9xhChi)Xcnv(L$`?8xDFjQ-MlyXqzK7T@z`k@BQhcMaLD3*;>#_WP(F zRJ5w!(#&kQ?_5oZT;Iw^bb9t8%hr??L3d4dJK6$sd2A;gDZV~onC>|qmYd>7IM0l# zqr56mVkP?M2ZpC4>m7+8?lbtiCFHNsHxfS!l!z{^w;!R5=$Z|k+f&%W#HpgP{3Y8= z=Qj^~ZW8-G4}_S*H`%6bwW)j0B48Sn-v$jS!{pt*BR#90-L(pJq)&$%_n`>i3QhFF zu3$_AbrBOz9&c%FU&%P4S%X*RIm4Qt(80+!Ht)GAUA!X{p+JnEwXQ4~zNSxe~ ziSbcERUO;vuJ8Hj)_TR(oEX^SnX-pYm)116;{aa+O-70Bze^UBS?HifdZZDuplX3w zFD$ecGPI^#ozK3zun}QGwv2O2U|lOkvu4!Y8#1i+_jWjRh`Ooz;I3Y7DxW8Wnj~5z zO-U+1d#-xbhU(Hy@yF0ni$X~Iuqq-su#MN-A+k~b4Xk>Q;ed;iw%O81SRdFatdARdX z)AlRq@gqK)=Z~!2DJ#(TWPe_=f+GS|^j+Pq`xzSN(=OmBN=L>=r$#mzs zx1DINJh>rS8CQt>Bvc$jPWNh-D?=6pUReRFIQD_pD1M-;O*N8&b$<8)y2dxdYyo9|XUMJFM28%^EIyGmrju zgqeG|-bX!`JgL4@d&+Ssj$@NoC5BH#sVSgwIQ;tzoBaEctzqB8t#st_+blYCDpkUy ziH1ezoH$*rDhW-Db)%^TqTaXO6b<;VZyNE)ITV>%k>^H_S2EUG^mt|lutzTTQJ*7@ zKH_G$qvLSsD7RtpRoTAiCF#c+f`=XLqqrxGOU`C8O{zZ9$VfQb(U*Ja0n;_(4 z{GZ_o!FGLv(TGRDbXx?=) zLp=KNt!#Mt<5noU!X8G8E!TX7)dML+%#tAptzt+7cjTRl2@do&Op;WhU=+%)XG>ZR zUNtnolu{qcP?GLu$FNoHQM)(|^HrqJ$9zvub!(NfbWtEr#@y6l%kCjkcAK*NDUHf| z+g|vG`qfjU7TsJjK$}QfdvZG;sT&HER)q}TO}ZO@)#LdqSf*`)yniw@e=|GxR4^5Wsl`Limu5uVG&(Xva9m*Sz-gA#5I_LCk;wDEl^3Dt#|R z;B7pwlKKTD^@~~D9aHqoZ{r_>ci6jPgpD(QuIIgB|L~;Z^V2{79&8MzzwEo97^1Ad zDSRx8`%)HnekPkas08r$x*Y2d`Xz3^PU-jod;OS5Gzp-OfLF9I9kg&Vi~CLA1*}WR zX(jbr;2j2>>Sc(wo0py?)8smSz5#N z5&1tYP8~E1+NL$HMgF(uGx^77a%kr%T=|FA_sp05<0ai_Wo^>JkYObQP=MzCUb0&X(gAOK~=Ut$7=4#|9Z#Kl-a48 ztpGau2F|qnYqNEJOD~JA!vaKob0IgqV`=;d9sSRRTO3HzMw8$E=7acX5A#LLg+JB; zHyLs_q;>Jc|IR?t?&m+1;(7*EAKvwwNEZyEx$#-q;J-k67+7WemKAy&SvegClN2Q) z-C!ncod1@-L|#cf?zZvxF>uLi@!-|QlWD=r5dHW9`Vt_J3j&WCd-@**WTMm*9j;DO zKDKcp2f}w}i#iTQQOEji{32)|v7U|gRi%(>u-@YOW`Ae3x8Z!kAnS9kktj~C( zWNvE3wNFs-JIc)H+vw*k#N?Fk5!L*z2WA9xPkuz7j`gZX4edGD4thr^#E{mTmmwR%T^_M2|Z@?@n?cT%I?_v!9N`H}8`8t;fFmpM8+G@t(7}@*C@}CDCYm&;RGA^+g-P{i?Uf~kzU1;=d0llVw9#c0D{1Apfn$$biDbTmi{QT(BLC`r z-s;_@*tD%jRcqC)1t|*otv81_XtxA>sn%-PVdg?g`Y$pvDD3cq=l=8G3*LWg9t?la z-U9akyYIv9$y&#qBykvdb;lFxzXF+E^;wQmEYRNt^}qh{{UBN`w|{O}(D{Oc#Wz;q z=Ua;F7e7q2VxZKy0xI~8s!dY2)O?EWd<=`Xfr~6SDd-2!?tbwDVPN1v%HG^`tIz8Y)?>t9+l`t3AdAHJ~KbzGZFO`oN z&P)-jXPT8_fM_{XF(%lmam7uVXDmQQPJar;f5XSx%#-k>ZkT^o()GEjv?X;13r%Ce z=&R{K3zyRiKALv$(XcK=2>75FlL9|}*sB05g_b=6RuA4lM)ZUEzE1B=YyS2)h zhAyA4Xnif9mlyxa&JvG6@aJFoQfR%Ht3s}s&YfDb zmdOx}Q%SZG;tJh@?y~dQSk-R9t!LwkI$TFY23S>y_P%PJIn8~+SlX5No5#9Elapd> zP7{i|<9RBD6(G#2VOr8`Que+&tIf$hc{GCI(WQqW9)0n3`=OYn}Cmkj_=QZA7ta`+7GYAjMm2|mUgQrLH*z(r8|P; z5*V?XfI#dyYdQWZFQkJW+VD&zbPhOrPBy9+1YGJkRa%WzTCN(>)@jA%j;T4#rq$MQudnf3EJFqcAN4UR#?OeVr1JpU54(bf$PhoKV79KWV)4X9@eHZ3b9rcg*r zHh3j{F{C90QtGi{>?#7AE2;b*S1r(OfP}p3?nHFPP_o;RA)Opw`-R<2T#h0a=c};! zxBG5#i{G*LkK-1fi0xGuZv^uR^m97lv;=C*#jNPd+j-WiNvEpz*S7t3vt|epaT7sF zQ-r*D^2#ulPma|Mu5%j9D+`I~STIe;of6%C;KfW^PQqO8)dxd%=S9v1SH~S zrR;oyEs8BU#zsIjOcF~tr2(tG70uLzI~ZBbq;x8M?+jM;KTS^*Q#a;li6aw1A2!|A z>9(adJfBr!+M((ULrAd!@=k80uzgdS9nalzNHfV-!sO&t zluChV?Y-{!dN|@#`53$k2O4xcZ)NW=1sopiTU9FQtjr9?09jY!&c-68w>rY?hn1Ekl zM>MJA$VFU%9{F%XTnOAmUh!zWi51&*N%#<00^A&JnS`f;B@XOF=V;r+fApvxK^SbZHw;}#8y>1l;3waZEv59EJ z9q&vtqp*ZvRYz=am!T_O!FUdUDl4%_rpf@uEbjS)Tu`dB7e0@F>)fDt33UmVyTJ$6 zyQ&OU=_4;SOR+oFBcFJ$+cUEz)oc5fzup|pGMZR5IhYq4rwuOuBsI9#ypqrv=c=~; zKq|;1A{>2ns)6NG>Q$!NT+5m4b-t+(12t}9gBc+V z!67OR&*&LGJ9+$i_PTvhQkN~&1d?#+c-WasSdY1PVTO%t6}sbv@i=6Kici2L9MM5v z?$%k|7*$A@NoSD_-5Xg}xjs!`%9M_;oH?#T&jPD7)i@p&OU&OuI3g-qa^&uwCQz-e zipisbYMpC8dYeDalIK>w!{NfU~u zu*u~Lg+C^4_jVrcwXCFxie=$lPDpHdBsKnYIac+oW>N{yc;L{?r#ST?r)<}Rd~su| zey2ExY?@8$9%hucH>WQd{?Y2%?<=Qm)@LK2X`0rjR0j|G>QT~lJ2~5!7e9c{wpluv zE+*8g^`ZHMs)GgiXkT&R%*tm){s0?bCysaZMN>OPpNN}u>sdA3>eeq;XFIR~Ox%^G z?JL;C!DSt-mtcX%Ds?!Q>*q&t@`P!@YU_&H9LnJS#xBvpsNtIjHo#8dZYPsrnq1ub z4ZbYikT6N*&`IHmtRx=zsFOvdX}4Z>P?;DH#IRd*%~1UQXNd#5Aqc$J*MbQ|)4dqu zG(x8+YK)IS_~vxoGpQdg*U3YeApb{qib8Qp(5WgJqGR`|1_3GHwv~`hfJNWb16pRLYP6xWZsgv-a4c6+S0>y2Nk zxPb~HI@JoZtbJC@KiVCS%t2hT&%PDSLa9re48Js_r-%c7?ru3Ycue*>!TQ5wn^rlt zIOlf!W|Kw|)S3?hOe5&x*p?_32a~>VHo<-tlnZZ}P4U(AK{$_K|BJElY#jFE*e9pj z`@LyuV5?sA!``~k*zt`iaZbg{)R~jlcNwxhPzRhIv&!K6$!6ZQ(_lhU%*O-WqirDL2`LBs}GP(JkUbtXT}^=5n*;;g-n zyoQ>PvS>WTFxN14iNFh=hTChc^MsL_87F%Xbu zmMnZ4(MrbIs4^9oJog7K%ApSVoRBX4PRrz#&scjAXx@!VVc-O9K&YY;_kIjtBG$_p z27bB)IubL{mzk8`Mw+aWwX2#GPUf*{>WXC{+E-0hihYfqu2v-!+{(csnq*^=QsH;t z_nigCOIsAZxrWXv4ujx0#(4F!;#FajYvjdd$5I|H|Q?}p?8 zr}02W!sK(6aQeT8t$Jw5Bhanp8Buw|NWdf4mmeriA;r(SO;!<@Nlx7h@7Jf4EDI?EcGsow-T5 zKaHAXD`f2gKPE*DHl(+JN9tM6jp^8>JAo>n zM(rx;r`;=4&stEd%#Xr14jTQHg7OqD9MyQ#P(C9#oeXEQJ*Rq^rD(Xh9w0;qdHx*TzYah!Q~k*| zo)VK^d~}Ov&v2f!%o>vR8lfFS4gjDPkU28MSjkvoRpXBnJ~ln@5wSFYoNA z7EwDSwkshe2sTEA2S*kk)=T^bzil1T7_xfubv1Rnu*kHQw-wPzdSEr$+f-22Qy znac*tH}j1BY`OYLFUFfLO*4feVf?FYuFqD-^ItN?KVNm-tnwvYITMQyc2%Oz{d}(- zJ6CEEw)VX+;o0lh-#MhP7-#OkW+)g6-`$yz44&xEJfR)3p%>exhfd#Fv(MQ~fWuF~ zuU%=)G=DC=C9N$kRXjwwU{0vx@_%*7E4SRFdeQbIX&$w5Zc$ zPo6HJe(U3GrD%~p<@q~-F0|}rL8FOFITahH4|>!1?jNflAL}V02CHn_XDAhAW28>& zZMKnI1X@_6R``7%e`(6S=$TZcJ(%{R_sMU_$S+MZDYxIdx_#qS!w<1ZM-10jDu%^f zxagCCRr_=NXx+ZAG2!7?F+b2NKeE+j?e5M)nd$yy6}Q-}kdn9N)|2DTqvq-1brM9*z|eES)RI1K=?zC_T|+ryL3A2jbeZJL z2YZov2VrLA@7uUgWVS^Yl2r8a`pmZ+IYahDLBFp_SM>IN%Z8a)Rkm>7*S@Iu=O0_q zpF=hdhKv_hndD2oPH9B#YSEDfj7jyc5G7ABx=FL?`;+YMq$`71Hp>mz9a~n^PSvvs zOh;C};d9HZMTVZ~z}M;=Ur~$S&1lArW}3$Elwojg@|q(>Z)9Lvy-3yZRLl@c9Qo7O zbHQnCyH3??DOirp-1tHJ^|s%vI6^&@^%d$Q23b74wU)~pZARQ1T~kZjmh$Q>T;EFR z6$|*k%Euqim!vcfOl>j19;*u&nR(*}4&=DtU+$Kvf9*d(7&L+lgnjE1e#f~ic#gF4gx7an-LGk~91RJ}d>xZ(JcQ~^)B zdasP((tSIl?qm$-IGj+^rBuB2%WdOL%_Ap0Z$M5COLjn89RraqlSN2R_^Er2$GgNE zk29n?yH(Z+mAHx-U0voG&AzrVsm-lVI=7_`)qqcM@Xrj)q}svWai^4U7C&&cx@vh- z?3SWM*UNe4?Mu_D7EPXOGa1Qn;>EtfaQ)}^GoRIk4LvQu!Y^g$zTbJ0a)Ns6hI_qa zu~ksKdK0$G0jIhd@|(iTduPuz*NAjLd2oks*iWqc`n1$!Si2`kzgce)`fFB!>E$f2 zMNhMR`N5bm-q>nF+ua}=Z=V>siUz;j=~O#=eK)Gj5ze)41JsY{Wd7}e!zFL41-R&b zdb`bQlxzIJrNSubN!-FUpZk4hY52! z&c&mpGoD_%gB7vQe+%hJurb|l=aJT%c39c^J{{s?dframt-&s8A zhgyFsJimn7-_aT6C;j5Nm90MHTh2XArVmwcuoOo-LyFEee%rbFgjJ=cWhfY2}xIg>Z)M%yqU2Kwg*X1*}eMIB) zePCm6Zx$E!m6ca~D5R$VADUa&Uj)~2%cZP%7q)h!#+!MJ2ER*ucEP{crIKG7nbC38K3#}i&4@V zd;YtpYcpOE-Eozue?ID+-6+WA3$%6XCu}*oEWD)wU|A%;9D22p4joy25ZPy_`6#3 zi=zo~{rzV>J$%YUacOA`T+KUf9EVs(gp5W%&t`|Ow3V^quDmSF7L1j! zy3%A3f*87;f9a17V)JKL`HoQdcUz@CxGeK7I#uA*qT#njZ_0Z5X8TiOMqjDUZC~*o z4OsQdyEi`OJpXD1_0Scv^{ho>4*hvpMC5FB_KF&5p?KnWFmtyt%>C@h6f&KsuA8`5 zDKdM!?X~KMOeU-6!S1`SiKWllg>FqVc1Mpr^S4)RI_ft7SFer#EyE%Fn!xHT#%o)A z{YmRNkxQ(DIZ^W?K|jqaY`q&A-JgdEt7s|3O+WF=BnjhOE7)~^CneYV(l1egR(3~F z2kl<*4%M#786Y-LW}LKP4k@Tq|Ae{sYV=+nv+sGL(@vLD+HES95X$kCS#(Z{%AA?m z>w52fgJr{=>~FNCna`epWzLLkmK7HJNA%o=7Q0@}k*%)RHqG!5VkEMTA4qDWzo%bI z)?vCaSbbTjR096WnOVkLVB^Tm=0cQJKVv_luc%$pa9I7W?Azu~5rf^q8ay`{mv6A7 z%{YJkJk!`fynfTw^uVTUi}bUv%IWQ>-p>AmRC>B3EqSlrWxGDO+`a)9k?;N_wpf_) zJK4n_y_8}4y_e{}#GQZ^-iF`gtyqUUot-7Zw4898igL2ZROLa--5H=i_o~Cqu^8@4 zH>9I0Np_!ov8B2j9DwXINTZdZZaN@R&Udx>^ykr3^+Y8K7rP!YoPYfAChwUF;;i_< z_{#RsItO_z6B$WvW{U!^p^3<1ayO0)%WwdcW!4Zjy5l+bcZX@F+174pGY<{+$y2gd zijIEDh#tM&`r(|gd0)ELo=a4qjjx08Q!%ZV)Nl;syS8HDZM8ODa^UaqENhhemtPBp zRavy_&BpD*KB?D1CfGZD6V~_NpBKL>){63`!_i!npYQ@W_M3VpnWQc@*YA|N4AwH^56Z+OUy&4FbA4+mrdHmzn<}StP^Ow*7@Ne z!(wwowEwBBuJ;l%p4vy04Ie04Wo_m?40p;SO63QcV+51qO!Ez=*9%p=UpA?D`4;nO zQ;60HnfGA}x8w0YTe%`2e=uR21L%XLF$X?7d0jeRuGJu#o^i1GHEkwmEDyGpRD&`~qP1XMI9 z01A@o3nzmF5w6BpI+NaT*q6#8PTz#PZ5Z7@9J=o1t2TN1$`Z#s!H`I2^VeMG{ z5}tR@@bLD-EAH|Y$&DuW*$YYv3%Y$t?CdPGF-i^G6P^aX5qet>Dk!U%!hRTyG}~}j zqH4lf7zalOo|jvkiZ(+yopOa1y^~1P2FXtV!i4+Ve-K2p_ke*O-k+IA6c1Y5oY3N$ z8i_`jubrDVXE@ywbiJiQ*HGs61-C}6IZbNgKlQtzKgp{bES?}W>F(!cr}N}X5}#5e3Ig4$tW?fIbm^FsaAdXq}-g98^f z(Mf&xG+dl8ZbRam@1}0_y172zq2OJ;eA*?5(o+*9USA+Gq_=$?}mg(&VF#}x&3YVp{aSr3>TRK+pF|PwN8{L^x*;ln% zw0Wmw3ZzrSZJXD!EiQInbP()^`_}u|=xIhONT~?x){2|o!J1qcR7X)-Ik`Ds<$I8& zLU&FauZ;PPj60mz%9=AMi;msQWG0bGK(2ggubu7QQ_9NjoF>|3&58w&8xRSSE#IT z+upnPHwrV)j;g?4y%|Ts-wWTbh_>8#yek$`GPof7^xX5x3+d2p`g5+ntXDPNA+Dg~ zk2}4uC@JjL6-*pgBRK(YkUqX{daQyHF%_CWH&^M}6@X77iwqPhUE1wKKUo`1TI9x~ zh8%X=LKrp`3h#wd+8x=+Y+ERJ4REtHZN;?0S!wgQ8~kPtDK05*aohZ4BAa&;r=Fdz zh$%%vSV*mAi$8d#4653w7ay0$bSTGdJO~!F->GMtr^u8M>j+(O)IVP9;N+N_DLhLC z-3&vEiQ@F;D}^lA-A0pI?6|`GWD`8qa|a?`Hg(ZHur=MvF*$+J0%2-jre~T#d=oOE z;Vn#aX*$!zk7g|QmfsUtTKKL8R4iaq;mVlFDQGa3G5zcNyF3Z%>`FEY{&N}XIU?V)Jc_Clkqrk*K!x z28~d@?!Ap+hZp{&9bYpG9$~BN#4SdnPb55TM>-Fv>pL4twHjZsU477dvx&)0V#A2* z-nQScy7L2RY9qcvgL`1gb4~d7HYc9eJv(;~sx)(X2uypsInJPkf#HXynEvDrfizTqD4TGMb4s-h+EbnZ-d3Pu zJH%?pX#wk;+eLta%Cz+oJ%&8DE@hrM{U^CWAvuNkMsKi<4m>Ibq}tl}apgPV0eNGo zx8vU%s}-psI|}FNbE&PHW9_S$^UJZG1vO>MTW`rr3lQ6yXW_ z&z049F8)9i{-0q#7(r_SZCXq7_9Z)mfx#NR&b)lo2cfG7Tc8gg-k|y zU{D`xoT7RQ-5ptc-L?cZWnn1$C0N&mvZZucdo{nkb0o!J`3^%w42#&B*_SsJ75w=h zT~?K&y7}t8|An8q5xndV`jS!O5JmrOvMFl&6Xw z{~5sehw}RgVJE|c9p<`I6&M(=rHTDJ1&le{ip-)LN^a^8cTIZTfRih>9_h`|kv&Az zBi;Yok0=X=%NvlcXZ|+yLoo02i>=epUa@OQdI-;nv#W;33w^GRe=2mfzA+z(+NR$Y zH7IjeQculn>KAn_GBdKH))aEijps|3?3nAMb03r;V47}Iyzx{&mjfa1nS7j3oJ}1K zEyUW=)bs;5MkG}}E`wUNI`ET&!!whaWA@kgZ?|z*e9FVvgrGak$jv4a*&V(hnm1-m zopcBTbgIcXFT{uD+0Jb_OFT>6=qCrgGYMKt%!IIzIX7(Lum_tWd(U;Uc$1b&WMR-0+%aI9GAfcRe1NZhMwnymHb|t-p8{j7U5dHj#Wd;76mFU zKiNnYwl$e6b1HWWLYXcIqBd63u!(|6Mn!!trQS9E;YM6!X<0%sYH_DhS5AHYk zoiGq@zPoo7Q$B7VOmA0^@{4e>(wu9Y7GCeA?y1odTz{O9Y(w`glq0A5 zbz7w=f|K^zqc2{^$XA~l3JDo78%x}vu?vQkCEM^G@#W>|SPayx`~0LGFH!dOteVDy zQTc&GivjNr|A@4ytw@1A9DSjqj|g$7`z^?Vx7IH)kUZI^$K|vmwrsHgU@K2}kOc2y zlpXZ!Y09LzRdIUpE8@p4UxiI1TS*8nZ-D(DgxIMcapi7G6tq&QO7AjLk{^{_aIvfV zF!OsIHa>E04|tV__tqPJr)P8L_iqRY24XDag9~bG`)n`R{xW0v*)=KGy5?buNQ58$ zHDR*}+Yv0BEgW%4%$^v13lDo5k^Y6CX1R9HquL+; z42=D{fYsFEf~cRFHP*dA@VH=ULFV{oy^s~pxD4jIDysOpp&Bh;uoO{%Evem&tO@Sz zH;5=1Do-(k6n&#C{v|PmYCL&oU~z1A9Az$&mQU9u_Mgg2Q_!jlAcp+VCiE_=<6%Q95e^y1(9CCn$Ji(+pm^DT8}`Wots^98~?=egb$J z(K+YqNOrA@F!H#GmgjBdQJI5{QAI?L$}8MRNOspweQf03e{r)}-bk$~SG|kdK;A-d zu+k-(H7SR7IV~{x(V)RMKoIa^X9vP#b}pg$y8!f++#%3)QTK zI)}kpk!t?*V-R)yoh?^d4jB1pd%n}75o(>fr4E$~Zr?4R(WyHv&cundZC_}Nags*n z#91evd2=cRCa&!ajNyWgqLr=Y+IZF83-}KmS`6NQj+l$Wm~dx;PRHaHc$x(x^ESfx zwu+NU`x7*a8a^YlESFy5y1E3`WIE$qvtS7+ozTnsk4ev!T&+leUg43fQ zIZPE}grGRsdBMK|Ayi5Za2*??ZczC4C~SA9PuC5cO^>bq3ji3bSS|+3@d%O0;$UF_ z?+hP!ge9^vt~gFR^^eMe_?~8=dALYimLqaL7g1?Ba8>l+B-vkTHCF-2(W`XFYCq~7 zEVK~ZgGhcN)<1(9A4UvhA0 z{M((!;@?MSD!u>Y{{^rm$&2r-f>T!Jj=e73f93lHy4{L%UupEEvu)6E8c9xl!oL5k z1Gf1meCDvy$m%rLovx4|RxAC;_;^m{{8h)~c=q1Uc{*Bol;*S#Nr1@Ue>Rd9r=aDE zvgcn~Ujl$RTf4Z>qK}H<6AwTEJJgXG7huoW{$UXU9?ANrQ#)I0w0*Bx4bu2uog&NW zu_Mt!@a3ZW(e(GhSyzhBHs%ISanzrix#}1a|D1`VU?EjDf9(Pbm>CU<23T5g+*M~E zK}ymO6qxeGmzG>@#_RD|~kb!8`uD2&$tx@n-s{n^01xs+hU4Ab&(a$fX-mryQBJNQ?h zkVIfvL4f1*r9}E4OdD$5V&qHI1h~Xzf_|GOp{IxbirC}T z%Er2okwXyw$(^iwO?yi@;OlRjmljX zT$$2gV4ACtpzdF(_f}r3X(;ZfKMms2oD0w9PP$Q3#0k1;;Pv$lhCVl?xa{gjr|9NrjCJdro$(3atkld-|UJ=79$$XD@NezRJHIdIAOKX zqP^F0PD95TIcr6@k04)>Chj%=^Ig+9Ii z4=?-!30c*B;hvkr`R}4=lV9P2A}4s%*F6LL_d2!*7sTN1=NC(nu!o15-DNwiYGdDA z<>f7ZcXy?)>(+a|b-DqA$WPB&^xl6SJ|rl$KThF7LCeqFl@;*8$z9!*elxhat-{_y zt_u#9K0uL3g@NeSFmt(0fSGFd9Sq%xro|NLw=S#jRK7C3+az-VMYUc*k$24YAK>M1 z6VmJEl}YH;%~P=-V&!-M3O6C&AW;Lyw1c;x0L-VV^)HX|chMEWH1o<5BcH!*4vGsr z*0yYW)mFHoFL32YJIB!q-Y)4; zn`nfer@H(#2{1~kf}9q1z~9@kSD0WEy9?bWehJ*In}K`1myMI-Thh;L$0WJb-zlcF zlb6LyNgG$GeDWC;Fpf2@`%=XS_0v7sI(!lOPeb!x@sK-MeViW6&{`;0R{*JAJ6S^lItrF8?C2oB`wIKl%JNTy)Y0)cf&bnoXh$;XO|89{OCdb^KrHlu@^dt*NF+ z#9@(`0d<^^_chrE53gLFNJOs z(7qg^%>eZ=Q0XE3%cI0#Od%Ot7ut<*FG>CdX#QUgf4*VY+T+LSj_+X! zQ@vlk)qjPr{xqlmq=WWux!&_X86y_01R6xAE~i^1nZx*Y?9YJco2E6RX+KJ<`#vB{ z)5>bU(6~C@2u`3@4_@pnQkYdDAGCX(k;!U&vWWl2%ex~+lM>mN?tMnu|B0Az(sT*t z_c!ypR6hAKZMW{d=kffnko#H!LUa4ebI+ZvAdB`ep6;`spA+@Xl^o92i|GTYGXfV^ zBz596iK@_*a1M=t@oYM`*91Z+2}phSY<>#?i-|R=Cw%o0A86~sByHFfcK{ja*8&)x zg@shb{AtbEp+>`6E*--!)P=T!lp_)fcQ~ZO2i=MQpdKl8&@OYdT0TXGK2>iSG1B~j zs9nI%@y*CLS@0LGUp_AivE(lTnu3MoiiYKP%a*Gw-82zP``z5k{Bck`j zXeNtVu;>fQPaO~GIbck*d%KGGBM^C;4Cj60t!-D!&sfp5BsR}xqRz+1CxE-s88j?N2spCs%AON#CHnPU zRKsKZ0>vD@PZiSvmT15PFnqu^Ys}PJ5Zll-1%CR}H+c)7 zvh}^<6~=+pJn1g}h@kq&1@<@XXP%9&F@}x8s&3}j9J&)~AbeZz)rak?Y_oF~^U3B6 zqk*52=`HVI;p0r#Zfsa|@CQ7CgUYDv>|#x9#-Uc(e}5|&wEst#2yI+YOpnH%^XiXQT2N-Q6Jv$!PnzZ^03{+f|7(P z>7K+BU8fJA{1fA%w6RXKck8X5I;s~&TDzW%Ngahx1(Cr_`$@8Rk|2FrQku@5gK29^ zlIZRany=BFXOekN$Y^A|>X$IkOM2%zJ{FZZv|+{B71TqbO~vXY2V^S}e*++MX^it1 zjO&_@ZAjhS4pTeYMi$Y(Pi3v~DKC8dj(w(Z7C%q9)yURyHJ4LXloTM3+`7ClK3*{n z6l)rR)@=ld8_0LAl}NM&;7ytm+md$3`h!BEsuONy4xxm^@+-`l@^{v)@8aLLr+BXc znbQ`N3wc4VdAU7C+Oql51}ZZ;art2oeTBzod!^sm3)*I=@M1yyxY-9mtI4jVZ>fAL zU)5<>7+o#3O>?UX*tuk2RhE3P;(P(p8Bj3C8N_f!L)KkQr=2?K9H*=+Y#pReKNjpYyIY~SV zu>FtUr&r*Db`x{Cm+VG9i*OGzT!tsGyDj?dcnPkU6_lhP+VQ4h57pC!S6Iuvjp0`X zZn$N9m4%@1O8Z8row*#}e#Y`UMgcr~{>BF)R=;MJr|94+a*ZS1MQ2l(+;-f*Y8GTd? zxz`0c%I-kDcvwr@Rc?{&lstJr-TS%2N*h%(>fr9C<=iCsR`77`albFyP=73nw$`F> zAWM;VN1(8P4SzB)zTy6b93Sv`EMInQj=`qWt!&EGG3x{S4UtFBsi(mrgyRN)0sSX1PRdDCnEKd`A9RJYcH6128pGs5T z^XVdYfmoFM;Jp}ZTzI@{RHVP(E*?JPH08y_XQjzL+<@Ffx{$v$F+PrGj4krp zwT8coaxfJC=6g;-jgOOhM9}UGmn9Jvutpum1lG*9L2WU|cpeR8k@!1-)SZxw?3U&` zFqd~W&e0GZjY-Z9lBxtxR#3-#BazluNhRK#=VN3gJ_d

    j^PUvcgOw?*~QV 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 dxSS7Xg6o>riI6rjL=I0=^{ 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 jA*F2fF&Y57-rg%b + + + + + Implementing new language features - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    Implementing new language features

    + +

    When you want to implement a new significant feature in the compiler, +you need to go through this process to make sure everything goes +smoothly.

    +

    NOTE: this section is for language features, not library features, +which use a different process.

    +

    See also the Rust Language Design Team's procedures for +proposing changes to the language.

    +

    The @rfcbot FCP process

    +

    When the change is small and uncontroversial, then it can be done +with just writing a PR and getting an r+ from someone who knows that +part of the code. However, if the change is potentially controversial, +it would be a bad idea to push it without consensus from the rest +of the team (both in the "distributed system" sense to make sure +you don't break anything you don't know about, and in the social +sense to avoid PR fights).

    +

    If such a change seems to be too small to require a full formal RFC process +(e.g., a small standard library addition, a big refactoring of the code, a +"technically-breaking" change, or a "big bugfix" that basically amounts to a +small feature) but is still too controversial or big to get by with a single r+, +you can propose a final comment period (FCP). Or, if you're not on the relevant +team (and thus don't have @rfcbot permissions), ask someone who is to start one; +unless they have a concern themselves, they should.

    +

    Again, the FCP process is only needed if you need consensus – if you +don't think anyone would have a problem with your change, it's OK to +get by with only an r+. For example, it is OK to add or modify +unstable command-line flags or attributes without an FCP for +compiler development or standard library use, as long as you don't +expect them to be in wide use in the nightly ecosystem. +Some teams have lighter weight processes that they use in scenarios +like this; for example, the compiler team recommends +filing a Major Change Proposal (MCP) as a lightweight way to +garner support and feedback without requiring full consensus.

    +

    You don't need to have the implementation fully ready for r+ to propose an FCP, +but it is generally a good idea to have at least a proof +of concept so that people can see what you are talking about.

    +

    When an FCP is proposed, it requires all members of the team to sign off the +FCP. After they all do so, there's a 10-day-long "final comment period" (hence +the name) where everybody can comment, and if no concerns are raised, the +PR/issue gets FCP approval.

    +

    The logistics of writing features

    +

    There are a few "logistic" hoops you might need to go through in +order to implement a feature in a working way.

    +

    Warning Cycles

    +

    In some cases, a feature or bugfix might break some existing programs +in some edge cases. In that case, you might want to do a crater run +to assess the impact and possibly add a future-compatibility lint, +similar to those used for +edition-gated lints.

    +

    Stability

    +

    We value the stability of Rust. Code that works and runs on stable +should (mostly) not break. Because of that, we don't want to release +a feature to the world with only team consensus and code review - +we want to gain real-world experience on using that feature on nightly, +and we might want to change the feature based on that experience.

    +

    To allow for that, we must make sure users don't accidentally depend +on that new feature - otherwise, especially if experimentation takes +time or is delayed and the feature takes the trains to stable, +it would end up de facto stable and we'll not be able to make changes +in it without breaking people's code.

    +

    The way we do that is that we make sure all new features are feature +gated - they can't be used without enabling a feature gate +(#[feature(foo)]), which can't be done in a stable/beta compiler. +See the stability in code section for the technical details.

    +

    Eventually, after we gain enough experience using the feature, +make the necessary changes, and are satisfied, we expose it to +the world using the stabilization process described here. +Until then, the feature is not set in stone: every part of the +feature can be changed, or the feature might be completely +rewritten or removed. Features are not supposed to gain tenure +by being unstable and unchanged for a year.

    +

    Tracking Issues

    +

    To keep track of the status of an unstable feature, the +experience we get while using it on nightly, and of the +concerns that block its stabilization, every feature-gate +needs a tracking issue. General discussions about the feature should be done on the tracking issue.

    +

    For features that have an RFC, you should use the RFC's +tracking issue for the feature.

    +

    For other features, you'll have to make a tracking issue +for that feature. The issue title should be "Tracking issue +for YOUR FEATURE". Use the "Tracking Issue" issue template.

    +

    Stability in code

    +

    The below steps needs to be followed in order to implement +a new unstable feature:

    +
      +
    1. +

      Open a tracking issue - +if you have an RFC, you can use the tracking issue for the RFC.

      +

      The tracking issue should be labeled with at least C-tracking-issue. +For a language feature, a label F-feature_name should be added as well.

      +
    2. +
    3. +

      Pick a name for the feature gate (for RFCs, use the name +in the RFC).

      +
    4. +
    5. +

      Add the feature name to rustc_span/src/symbol.rs in the Symbols {...} block.

      +

      Note that this block must be in alphabetical order.

      +
    6. +
    7. +

      Add a feature gate declaration to rustc_feature/src/unstable.rs in the unstable +declare_features block.

      +
      /// description of feature
      +(unstable, $feature_name, "CURRENT_RUSTC_VERSION", Some($tracking_issue_number))
      +

      If you haven't yet +opened a tracking issue (e.g. because you want initial feedback on whether the feature is likely +to be accepted), you can temporarily use None - but make sure to update it before the PR is +merged!

      +

      For example:

      +
      /// Allows defining identifiers beyond ASCII.
      +(unstable, non_ascii_idents, "CURRENT_RUSTC_VERSION", Some(55467), None),
      +

      Features can be marked as incomplete, and trigger the warn-by-default incomplete_features +lint +by setting their type to incomplete:

      +
      /// Allows unsized rvalues at arguments and parameters.
      +(incomplete, unsized_locals, "CURRENT_RUSTC_VERSION", Some(48055), None),
      +

      To avoid semantic merge conflicts, please use CURRENT_RUSTC_VERSION instead of 1.70 or +another explicit version number.

      +
    8. +
    9. +

      Prevent usage of the new feature unless the feature gate is set. +You can check it in most places in the compiler using the +expression tcx.features().$feature_name()

      +

      If the feature gate is not set, you should either maintain +the pre-feature behavior or raise an error, depending on +what makes sense. Errors should generally use rustc_session::parse::feature_err. +For an example of adding an error, see #81015.

      +

      For features introducing new syntax, pre-expansion gating should be used instead. +During parsing, when the new syntax is parsed, the symbol must be inserted to the +current crate's GatedSpans via self.sess.gated_span.gate(sym::my_feature, span).

      +

      After being inserted to the gated spans, the span must be checked in the +rustc_ast_passes::feature_gate::check_crate function, which actually denies +features. Exactly how it is gated depends on the exact type of feature, but most +likely will use the gate_all!() macro.

      +
    10. +
    11. +

      Add a test to ensure the feature cannot be used without +a feature gate, by creating tests/ui/feature-gates/feature-gate-$feature_name.rs. +You can generate the corresponding .stderr file by running ./x test tests/ui/feature-gates/ --bless.

      +
    12. +
    13. +

      Add a section to the unstable book, in +src/doc/unstable-book/src/language-features/$feature_name.md.

      +
    14. +
    15. +

      Write a lot of tests for the new feature, preferably in tests/ui/$feature_name/. +PRs without tests will not be accepted!

      +
    16. +
    17. +

      Get your PR reviewed and land it. You have now successfully +implemented a feature in Rust!

      +
    18. +
    + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + + diff --git a/incrcomp-debugging.html b/incrcomp-debugging.html new file mode 100644 index 000000000..4ffb44774 --- /dev/null +++ b/incrcomp-debugging.html @@ -0,0 +1,308 @@ + + + + + + Debugging and testing - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    Debugging and testing dependencies

    +

    Testing the dependency graph

    +

    There are various ways to write tests against the dependency graph. The +simplest mechanisms are the #[rustc_if_this_changed] and +#[rustc_then_this_would_need] annotations. These are used in ui tests to test +whether the expected set of paths exist in the dependency graph.

    +

    As an example, see tests/ui/dep-graph/dep-graph-caller-callee.rs, or the +tests below.

    +
    #[rustc_if_this_changed]
    +fn foo() { }
    +
    +#[rustc_then_this_would_need(TypeckTables)] //~ ERROR OK
    +fn bar() { foo(); }
    +

    This should be read as

    +
    +

    If this (foo) is changed, then this (i.e. bar)'s TypeckTables would need to be changed.

    +
    +

    Technically, what occurs is that the test is expected to emit the string "OK" on +stderr, associated to this line.

    +

    You could also add the lines

    +
    #[rustc_then_this_would_need(TypeckTables)] //~ ERROR no path
    +fn baz() { }
    +

    Whose meaning is

    +
    +

    If foo is changed, then baz's TypeckTables does not need to be changed. +The macro must emit an error, and the error message must contains "no path".

    +
    +

    Recall that the //~ ERROR OK is a comment from the point of view of the Rust +code we test, but is meaningful from the point of view of the test itself.

    +

    Debugging the dependency graph

    +

    Dumping the graph

    +

    The compiler is also capable of dumping the dependency graph for your +debugging pleasure. To do so, pass the -Z dump-dep-graph flag. The +graph will be dumped to dep_graph.{txt,dot} in the current +directory. You can override the filename with the RUST_DEP_GRAPH +environment variable.

    +

    Frequently, though, the full dep graph is quite overwhelming and not +particularly helpful. Therefore, the compiler also allows you to filter +the graph. You can filter in three ways:

    +
      +
    1. All edges originating in a particular set of nodes (usually a single node).
    2. +
    3. All edges reaching a particular set of nodes.
    4. +
    5. All edges that lie between given start and end nodes.
    6. +
    +

    To filter, use the RUST_DEP_GRAPH_FILTER environment variable, which should +look like one of the following:

    +
    source_filter     // nodes originating from source_filter
    +-> target_filter  // nodes that can reach target_filter
    +source_filter -> target_filter // nodes in between source_filter and target_filter
    +
    +

    source_filter and target_filter are a &-separated list of strings. +A node is considered to match a filter if all of those strings appear in its +label. So, for example:

    +
    RUST_DEP_GRAPH_FILTER='-> TypeckTables'
    +
    +

    would select the predecessors of all TypeckTables nodes. Usually though you +want the TypeckTables node for some particular fn, so you might write:

    +
    RUST_DEP_GRAPH_FILTER='-> TypeckTables & bar'
    +
    +

    This will select only the predecessors of TypeckTables nodes for functions +with bar in their name.

    +

    Perhaps you are finding that when you change foo you need to re-type-check +bar, but you don't think you should have to. In that case, you might do:

    +
    RUST_DEP_GRAPH_FILTER='Hir & foo -> TypeckTables & bar'
    +
    +

    This will dump out all the nodes that lead from Hir(foo) to +TypeckTables(bar), from which you can (hopefully) see the source +of the erroneous edge.

    +

    Tracking down incorrect edges

    +

    Sometimes, after you dump the dependency graph, you will find some +path that should not exist, but you will not be quite sure how it came +to be. When the compiler is built with debug assertions, it can +help you track that down. Simply set the RUST_FORBID_DEP_GRAPH_EDGE +environment variable to a filter. Every edge created in the dep-graph +will be tested against that filter – if it matches, a bug! is +reported, so you can easily see the backtrace (RUST_BACKTRACE=1).

    +

    The syntax for these filters is the same as described in the previous +section. However, note that this filter is applied to every edge +and doesn't handle longer paths in the graph, unlike the previous +section.

    +

    Example:

    +

    You find that there is a path from the Hir of foo to the type +check of bar and you don't think there should be. You dump the +dep-graph as described in the previous section and open dep-graph.txt +to see something like:

    +
    Hir(foo) -> Collect(bar)
    +Collect(bar) -> TypeckTables(bar)
    +
    +

    That first edge looks suspicious to you. So you set +RUST_FORBID_DEP_GRAPH_EDGE to Hir&foo -> Collect&bar, re-run, and +then observe the backtrace. Voila, bug fixed!

    + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + + diff --git a/index.html b/index.html new file mode 100644 index 000000000..8614a102d --- /dev/null +++ b/index.html @@ -0,0 +1,350 @@ + + + + + + Getting Started - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    Getting Started

    +

    Thank you for your interest in contributing to Rust! There are many ways to +contribute, and we appreciate all of them.

    + +

    If this is your first time contributing, the walkthrough chapter can give you a good example of +how a typical contribution would go.

    +

    This documentation is not intended to be comprehensive; it is meant to be a +quick guide for the most useful things. For more information, see this +chapter on how to build and run the compiler.

    +

    Asking Questions

    +

    If you have questions, please make a post on the Rust Zulip server or +internals.rust-lang.org. If you are contributing to Rustup, be aware they are not on +Zulip - you can ask questions in #wg-rustup on Discord. +See the list of teams and working groups and the Community page on the +official website for more resources.

    +

    As a reminder, all contributors are expected to follow our Code of Conduct.

    +

    The compiler team (or t-compiler) usually hangs out in Zulip in this +"stream"; it will be easiest to get questions answered there.

    +

    Please ask questions! A lot of people report feeling that they are "wasting +expert time", but nobody on t-compiler feels this way. Contributors are +important to us.

    +

    Also, if you feel comfortable, prefer public topics, as this means others can +see the questions and answers, and perhaps even integrate them back into this +guide :)

    +

    Experts

    +

    Not all t-compiler members are experts on all parts of rustc; it's a +pretty large project. To find out who could have some expertise on +different parts of the compiler, consult triagebot assign groups. +The sections that start with [assign* in triagebot.toml file. +But also, feel free to ask questions even if you can't figure out who to ping.

    +

    Another way to find experts for a given part of the compiler is to see who has made recent commits. +For example, to find people who have recently worked on name resolution since the 1.68.2 release, +you could run git shortlog -n 1.68.2.. compiler/rustc_resolve/. Ignore any commits starting with +"Rollup merge" or commits by @bors (see CI contribution procedures for +more information about these commits).

    +

    Etiquette

    +

    We do ask that you be mindful to include as much useful information as you can +in your question, but we recognize this can be hard if you are unfamiliar with +contributing to Rust.

    +

    Just pinging someone without providing any context can be a bit annoying and +just create noise, so we ask that you be mindful of the fact that the +t-compiler folks get a lot of pings in a day.

    +

    What should I work on?

    +

    The Rust project is quite large and it can be difficult to know which parts of the project need +help, or are a good starting place for beginners. Here are some suggested starting places.

    +

    Easy or mentored issues

    +

    If you're looking for somewhere to start, check out the following issue +search. See the Triage for an explanation of these labels. You can also try +filtering the search to areas you're interested in. For example:

    +
      +
    • repo:rust-lang/rust-clippy will only show clippy issues
    • +
    • label:T-compiler will only show issues related to the compiler
    • +
    • label:A-diagnostics will only show diagnostic issues
    • +
    +

    Not all important or beginner work has issue labels. +See below for how to find work that isn't labelled.

    +

    Recurring work

    +

    Some work is too large to be done by a single person. In this case, it's common to have "Tracking +issues" to co-ordinate the work between contributors. Here are some example tracking issues where +it's easy to pick up work without a large time commitment:

    + +

    If you find more recurring work, please feel free to add it here!

    +

    Clippy issues

    +

    The Clippy project has spent a long time making its contribution process as friendly to newcomers +as possible. Consider working on it first to get familiar with the process and the compiler +internals.

    +

    See the Clippy contribution guide for instructions on getting started.

    +

    Diagnostic issues

    +

    Many diagnostic issues are self-contained and don't need detailed background knowledge of the +compiler. You can see a list of diagnostic issues here.

    +

    Picking up abandoned pull requests

    +

    Sometimes, contributors send a pull request, but later find out that they don't have enough +time to work on it, or they simply are not interested in it anymore. Such PRs are often +eventually closed and they receive the S-inactive label. You could try to examine some of +these PRs and pick up the work. You can find the list of such PRs here.

    +

    If the PR has been implemented in some other way in the meantime, the S-inactive label +should be removed from it. If not, and it seems that there is still interest in the change, +you can try to rebase the pull request on top of the latest master branch and send a new +pull request, continuing the work on the feature.

    +

    Writing tests

    +

    Issues that have been resolved but do not have a regression test are marked with the E-needs-test label. Writing unit tests is a low-risk, lower-priority task that offers new contributors a great opportunity to familiarize themselves with the testing infrastructure and contribution workflow.

    +

    Contributing to std (standard library)

    +

    See std-dev-guide.

    +

    Contributing code to other Rust projects

    +

    There are a bunch of other projects that you can contribute to outside of the +rust-lang/rust repo, including cargo, miri, rustup, and many others.

    +

    These repos might have their own contributing guidelines and procedures. Many +of them are owned by working groups. For more info, see the documentation in those repos' READMEs.

    +

    Other ways to contribute

    +

    There are a bunch of other ways you can contribute, especially if you don't +feel comfortable jumping straight into the large rust-lang/rust codebase.

    +

    The following tasks are doable without much background knowledge but are +incredibly helpful:

    + +

    Cloning and Building

    +

    See "How to build and run the compiler".

    +

    Contributor Procedures

    +

    This section has moved to the "Contribution Procedures" chapter.

    +

    Other Resources

    +

    This section has moved to the "About this guide" chapter.

    + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + + diff --git a/lang-items.html b/lang-items.html new file mode 100644 index 000000000..9b201a4a3 --- /dev/null +++ b/lang-items.html @@ -0,0 +1,271 @@ + + + + + + Lang Items - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    Lang items

    +

    The compiler has certain pluggable operations; that is, functionality that isn't hard-coded into +the language, but is implemented in libraries, with a special marker to tell the compiler it +exists. The marker is the attribute #[lang = "..."], and there are various different values of +..., i.e. various different 'lang items'.

    +

    Many such lang items can be implemented only in one sensible way, such as add (trait core::ops::Add) or future_trait (trait core::future::Future). Others can be overridden to +achieve some specific goals; for example, you can control your binary's entrypoint.

    +

    Features provided by lang items include:

    +
      +
    • overloadable operators via traits: the traits corresponding to the +==, <, dereference (*), +, etc. operators are all +marked with lang items; those specific four are eq, ord, +deref, and add respectively.
    • +
    • panicking and stack unwinding; the eh_personality, panic and +panic_bounds_checks lang items.
    • +
    • the traits in std::marker used to indicate properties of types used by the compiler; +lang items send, sync and copy.
    • +
    • the special marker types used for variance indicators found in +core::marker; lang item phantom_data.
    • +
    +

    Lang items are loaded lazily by the compiler; e.g. if one never uses Box +then there is no need to define functions for exchange_malloc and +box_free. rustc will emit an error when an item is needed but not found +in the current crate or any that it depends on.

    +

    Most lang items are defined by the core library, but if you're trying to build an +executable with #![no_std], you'll still need to define a few lang items that are +usually provided by std.

    +

    Retrieving a language item

    +

    You can retrieve lang items by calling tcx.lang_items().

    +

    Here's a small example of retrieving the trait Sized {} language item:

    +
    #![allow(unused)]
    +fn main() {
    +// Note that in case of `#![no_core]`, the trait is not available.
    +if let Some(sized_trait_def_id) = tcx.lang_items().sized_trait() {
    +    // do something with `sized_trait_def_id`
    +}
    +}
    +

    Note that sized_trait() returns an Option, not the DefId itself. +That's because language items are defined in the standard library, so if someone compiles with +#![no_core] (or for some lang items, #![no_std]), the lang item may not be present. +You can either:

    +
      +
    • Give a hard error if the lang item is necessary to continue (don't panic, since this can happen in +user code).
    • +
    • Proceed with limited functionality, by just omitting whatever you were going to do with the +DefId.
    • +
    +

    List of all language items

    +

    You can find language items in the following places:

    +
      +
    • An exhaustive reference in the compiler documentation: rustc_hir::LangItem
    • +
    • An auto-generated list with source locations by using ripgrep: rg '#\[.*lang =' library/
    • +
    +

    Note that language items are explicitly unstable and may change in any new release.

    + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + + diff --git a/licenses.html b/licenses.html new file mode 100644 index 000000000..c80c24f67 --- /dev/null +++ b/licenses.html @@ -0,0 +1,258 @@ + + + + + + Licenses - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    rust-lang/rust Licenses

    +

    The rustc compiler source and standard library are dual licensed under the Apache License v2.0 and the MIT License unless otherwise specified.

    +

    Detailed licensing information is available in the COPYRIGHT document of the rust-lang/rust repository.

    +

    Guidelines for reviewers

    +

    In general, reviewers need to be looking not only for the code quality of contributions but also +that they are properly licensed. +We have some tips below for things to look out for when reviewing, but if you ever feel uncertain +as to whether some code might be properly licensed, err on the safe side — reach out to the Council +or Compiler Team Leads for feedback!

    +

    Things to watch out for:

    +
      +
    • The PR author states that they copied, ported, or adapted the code from some other source.
    • +
    • There is a comment in the code pointing to a webpage or describing where the algorithm was taken +from.
    • +
    • The algorithm or code pattern seems like it was likely copied from somewhere else.
    • +
    • When adding new dependencies, double check the dependency's license.
    • +
    +

    In all of these cases, we will want to check that source to make sure it is licensed in a way +that is compatible with Rust’s license.

    +

    Examples

    +
      +
    • Porting C code from a GPL project, like GNU binutils, is not allowed. That would require Rust +itself to be licensed under the GPL.
    • +
    • Copying code from an algorithms text book may be allowed, but some algorithms are patented.
    • +
    +

    Porting

    +

    Contributions to rustc, especially around platform and compiler intrinsics, often include porting +over work from other projects, mainly LLVM and GCC.

    +

    Some general rules apply:

    +
      +
    • Copying work needs to adhere to the original license +
        +
      • This applies to direct copy & paste
      • +
      • This also applies to code you looked at and ported
      • +
      +
    • +
    +

    In general, taking inspiration from other codebases is fine, but please exercise caution when +porting code.

    +

    Ports of full libraries (e.g. C libraries shipped with LLVM) must keep the license of the original +library.

    + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + + diff --git a/llvm-coverage-instrumentation.html b/llvm-coverage-instrumentation.html new file mode 100644 index 000000000..40433619b --- /dev/null +++ b/llvm-coverage-instrumentation.html @@ -0,0 +1,323 @@ + + + + + + LLVM source-based code coverage - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    LLVM source-based code coverage

    + +

    rustc supports detailed source-based code and test coverage analysis +with a command line option (-C instrument-coverage) that instruments Rust +libraries and binaries with additional instructions and data, at compile time.

    +

    The coverage instrumentation injects calls to the LLVM intrinsic instruction +llvm.instrprof.increment at code branches +(based on a MIR-based control flow analysis), and LLVM converts these to +instructions that increment static counters, when executed. The LLVM coverage +instrumentation also requires a Coverage Map that encodes source metadata, +mapping counter IDs--directly and indirectly--to the file locations (with +start and end line and column).

    +

    Rust libraries, with or without coverage instrumentation, can be linked into +instrumented binaries. When the program is executed and cleanly terminates, +LLVM libraries write the final counter values to a file (default.profraw or +a custom file set through environment variable LLVM_PROFILE_FILE).

    +

    Developers use existing LLVM coverage analysis tools to decode .profraw +files, with corresponding Coverage Maps (from matching binaries that produced +them), and generate various reports for analysis, for example:

    +

    Screenshot of sample `llvm-cov show` result, for function add_quoted_string +

    +

    Detailed instructions and examples are documented in the +rustc book.

    + +

    When working on the coverage instrumentation code, it is usually necessary to +enable the profiler runtime by setting profiler = true in [build]. +This allows the compiler to produce instrumented binaries, and makes it possible +to run the full coverage test suite.

    +

    Enabling debug assertions in the compiler and in LLVM is recommended, but not +mandatory.

    +
    # Similar to the "compiler" profile, but also enables debug assertions in LLVM.
    +# These assertions can detect malformed coverage mappings in some cases.
    +profile = "codegen"
    +
    +[build]
    +# IMPORTANT: This tells the build system to build the LLVM profiler runtime.
    +# Without it, the compiler can't produce coverage-instrumented binaries,
    +# and many of the coverage tests will be skipped.
    +profiler = true
    +
    +[rust]
    +# Enable debug assertions in the compiler.
    +debug-assertions = true
    +
    +

    Rust symbol mangling

    +

    -C instrument-coverage automatically enables Rust symbol mangling v0 (as +if the user specified -C symbol-mangling-version=v0 option when invoking +rustc) to ensure consistent and reversible name mangling. This has two +important benefits:

    +
      +
    1. LLVM coverage tools can analyze coverage over multiple runs, including some +changes to source code; so mangled names must be consistent across compilations.
    2. +
    3. LLVM coverage reports can report coverage by function, and even separates +out the coverage counts of each unique instantiation of a generic function, +if invoked with multiple type substitution variations.
    4. +
    +

    The LLVM profiler runtime

    +

    Coverage data is only generated by running the executable Rust program. rustc +statically links coverage-instrumented binaries with LLVM runtime code +(compiler-rt) that implements program hooks +(such as an exit hook) to write the counter values to the .profraw file.

    +

    In the rustc source tree, +library/profiler_builtins bundles the LLVM compiler-rt code into a Rust library crate. +Note that when building rustc, +profiler_builtins is only included when build.profiler = true is set in bootstrap.toml.

    +

    When compiling with -C instrument-coverage, +CrateLoader::postprocess() dynamically loads +profiler_builtins by calling inject_profiler_runtime().

    +

    Testing coverage instrumentation

    +

    (See also the compiletest documentation for the tests/coverage +test suite.)

    +

    Coverage instrumentation in the MIR is validated by a mir-opt test: +tests/mir-opt/coverage/instrument_coverage.rs.

    +

    Coverage instrumentation in LLVM IR is validated by the tests/coverage +test suite in coverage-map mode. +These tests compile a test program to LLVM IR assembly, and then +use the src/tools/coverage-dump tool to extract and pretty-print the +coverage mappings that would be embedded in the final binary.

    +

    End-to-end testing of coverage instrumentation and coverage reporting is +performed by the tests/coverage test suite in coverage-run mode, +and by the tests/coverage-run-rustdoc test suite. +These tests compile and run a test program with coverage +instrumentation, then use LLVM tools to convert the coverage data into a +human-readable coverage report.

    +
    +

    Tests in coverage-run mode have an implicit //@ needs-profiler-runtime +directive, so they will be skipped if the profiler runtime has not been +enabled in bootstrap.toml.

    +
    +

    Finally, the tests/codegen/instrument-coverage/testprog.rs test compiles a simple Rust program +with -C instrument-coverage and compares the compiled program's LLVM IR to +expected LLVM IR instructions and structured data for a coverage-enabled +program, including various checks for Coverage Map-related metadata and the LLVM +intrinsic calls to increment the runtime counters.

    +

    Expected results for the coverage, coverage-run-rustdoc, +and mir-opt tests can be refreshed by running:

    +
    ./x test coverage --bless
    +./x test coverage-run-rustdoc --bless
    +./x test tests/mir-opt --bless
    +
    + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + + diff --git a/macro-expansion.html b/macro-expansion.html new file mode 100644 index 000000000..161b602d8 --- /dev/null +++ b/macro-expansion.html @@ -0,0 +1,676 @@ + + + + + + Macro expansion - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    Macro expansion

    + +

    Rust has a very powerful macro system. In the previous chapter, we saw how +the parser sets aside macros to be expanded (using temporary placeholders). +This chapter is about the process of expanding those macros iteratively until +we have a complete Abstract Syntax Tree (AST) for our crate with no +unexpanded macros (or a compile error).

    +

    First, we discuss the algorithm that expands and integrates macro output into +ASTs. Next, we take a look at how hygiene data is collected. Finally, we look +at the specifics of expanding different types of macros.

    +

    Many of the algorithms and data structures described below are in rustc_expand, +with fundamental data structures in rustc_expand::base.

    +

    Also of note, cfg and cfg_attr are treated specially from other macros, and are +handled in rustc_expand::config.

    +

    Expansion and AST Integration

    +

    Firstly, expansion happens at the crate level. Given a raw source code for +a crate, the compiler will produce a massive AST with all macros expanded, all +modules inlined, etc. The primary entry point for this process is the +MacroExpander::fully_expand_fragment method. With few exceptions, we +use this method on the whole crate (see "Eager Expansion" +below for more detailed discussion of edge case expansion issues).

    +

    At a high level, fully_expand_fragment works in iterations. We keep a +queue of unresolved macro invocations (i.e. macros we haven't found the +definition of yet). We repeatedly try to pick a macro from the queue, resolve +it, expand it, and integrate it back. If we can't make progress in an +iteration, this represents a compile error. Here is the algorithm:

    +
      +
    1. Initialize a queue of unresolved macros.
    2. +
    3. Repeat until queue is empty (or we make no progress, which is an error): +
        +
      1. Resolve imports in our partially built crate as +much as possible.
      2. +
      3. Collect as many macro Invocations as possible from our +partially built crate (fn-like, attributes, derives) and add them to the +queue.
      4. +
      5. Dequeue the first element and attempt to resolve it.
      6. +
      7. If it's resolved: +
          +
        1. Run the macro's expander function that consumes a TokenStream or +AST and produces a TokenStream or AstFragment (depending on +the macro kind). (A TokenStream is a collection of TokenTrees, +each of which are a token (punctuation, identifier, or literal) or a +delimited group (anything inside ()/[]/{})). +
            +
          • At this point, we know everything about the macro itself and can +call set_expn_data to fill in its properties in the global +data; that is the hygiene data associated with ExpnId (see +Hygiene below).
          • +
          +
        2. +
        3. Integrate that piece of AST into the currently-existing though +partially-built AST. This is essentially where the "token-like mass" +becomes a proper set-in-stone AST with side-tables. It happens as +follows: +
            +
          • If the macro produces tokens (e.g. a proc macro), we parse into +an AST, which may produce parse errors.
          • +
          • During expansion, we create SyntaxContexts (hierarchy 2) (see +Hygiene below).
          • +
          • These three passes happen one after another on every AST fragment +freshly expanded from a macro: + +
          • +
          +
        4. +
        5. After expanding a single macro and integrating its output, continue +to the next iteration of fully_expand_fragment.
        6. +
        +
      8. +
      9. If it's not resolved: +
          +
        1. Put the macro back in the queue.
        2. +
        3. Continue to next iteration...
        4. +
        +
      10. +
      +
    4. +
    +

    Error Recovery

    +

    If we make no progress in an iteration we have reached a compilation error +(e.g. an undefined macro). We attempt to recover from failures (i.e. +unresolved macros or imports) with the intent of generating diagnostics. +Failure recovery happens by expanding unresolved macros into +ExprKind::Err and allows compilation to continue past the first error +so that rustc can report more errors than just the original failure.

    +

    Name Resolution

    +

    Notice that name resolution is involved here: we need to resolve imports and +macro names in the above algorithm. This is done in +rustc_resolve::macros, which resolves macro paths, validates +those resolutions, and reports various errors (e.g. "not found", "found, but +it's unstable", "expected x, found y"). However, we don't try to resolve +other names yet. This happens later, as we will see in the chapter: Name +Resolution.

    +

    Eager Expansion

    +

    Eager expansion means we expand the arguments of a macro invocation before +the macro invocation itself. This is implemented only for a few special +built-in macros that expect literals; expanding arguments first for some of +these macro results in a smoother user experience. As an example, consider +the following:

    +
    macro bar($i: ident) { $i }
    +macro foo($i: ident) { $i }
    +
    +foo!(bar!(baz));
    +

    A lazy-expansion would expand foo! first. An eager-expansion would expand +bar! first.

    +

    Eager-expansion is not a generally available feature of Rust. Implementing +eager-expansion more generally would be challenging, so we implement it for a +few special built-in macros for the sake of user-experience. The built-in +macros are implemented in rustc_builtin_macros, along with some other +early code generation facilities like injection of standard library imports or +generation of test harness. There are some additional helpers for building +AST fragments in rustc_expand::build. Eager-expansion generally +performs a subset of the things that lazy (normal) expansion does. It is done +by invoking fully_expand_fragment on only part of a crate (as opposed +to the whole crate, like we normally do).

    +

    Other Data Structures

    +

    Here are some other notable data structures involved in expansion and +integration:

    +
      +
    • ResolverExpand - a trait used to break crate dependencies. This allows the +resolver services to be used in rustc_ast, despite rustc_resolve and +pretty much everything else depending on rustc_ast.
    • +
    • ExtCtxt/ExpansionData - holds various intermediate expansion +infrastructure data.
    • +
    • Annotatable - a piece of AST that can be an attribute target, almost the same +thing as AstFragment except for types and patterns that can be produced by +macros but cannot be annotated with attributes.
    • +
    • MacResult - a "polymorphic" AST fragment, something that can turn into +a different AstFragment depending on its AstFragmentKind (i.e. an item, +expression, pattern, etc).
    • +
    +

    Hygiene and Hierarchies

    +

    If you have ever used the C/C++ preprocessor macros, you know that there are some +annoying and hard-to-debug gotchas! For example, consider the following C code:

    +
    #define DEFINE_FOO struct Bar {int x;}; struct Foo {Bar bar;};
    +
    +// Then, somewhere else
    +struct Bar {
    +    ...
    +};
    +
    +DEFINE_FOO
    +
    +

    Most people avoid writing C like this – and for good reason: it doesn't +compile. The struct Bar defined by the macro clashes names with the struct Bar defined in the code. Consider also the following example:

    +
    #define DO_FOO(x) {\
    +    int y = 0;\
    +    foo(x, y);\
    +    }
    +
    +// Then elsewhere
    +int y = 22;
    +DO_FOO(y);
    +
    +

    Do you see the problem? We wanted to generate a call foo(22, 0), but instead +we got foo(0, 0) because the macro defined its own y!

    +

    These are both examples of macro hygiene issues. Hygiene relates to how to +handle names defined within a macro. In particular, a hygienic macro system +prevents errors due to names introduced within a macro. Rust macros are hygienic +in that they do not allow one to write the sorts of bugs above.

    +

    At a high level, hygiene within the Rust compiler is accomplished by keeping +track of the context where a name is introduced and used. We can then +disambiguate names based on that context. Future iterations of the macro system +will allow greater control to the macro author to use that context. For example, +a macro author may want to introduce a new name to the context where the macro +was called. Alternately, the macro author may be defining a variable for use +only within the macro (i.e. it should not be visible outside the macro).

    +

    The context is attached to AST nodes. All AST nodes generated by macros have +context attached. Additionally, there may be other nodes that have context +attached, such as some desugared syntax (non-macro-expanded nodes are +considered to just have the "root" context, as described below). +Throughout the compiler, we use rustc_span::Spans to refer to code locations. +This struct also has hygiene information attached to it, as we will see later.

    +

    Because macros invocations and definitions can be nested, the syntax context of +a node must be a hierarchy. For example, if we expand a macro and there is +another macro invocation or definition in the generated output, then the syntax +context should reflect the nesting.

    +

    However, it turns out that there are actually a few types of context we may +want to track for different purposes. Thus, there are not just one but three +expansion hierarchies that together comprise the hygiene information for a +crate.

    +

    All of these hierarchies need some sort of "macro ID" to identify individual +elements in the chain of expansions. This ID is ExpnId. All macros receive +an integer ID, assigned continuously starting from 0 as we discover new macro +calls. All hierarchies start at ExpnId::root, which is its own +parent.

    +

    The rustc_span::hygiene crate contains all of the hygiene-related algorithms +(with the exception of some hacks in Resolver::resolve_crate_root) +and structures related to hygiene and expansion that are kept in global data.

    +

    The actual hierarchies are stored in HygieneData. This is a global +piece of data containing hygiene and expansion info that can be accessed from +any Ident without any context.

    +

    The Expansion Order Hierarchy

    +

    The first hierarchy tracks the order of expansions, i.e., when a macro +invocation is in the output of another macro.

    +

    Here, the children in the hierarchy will be the "innermost" tokens. The +ExpnData struct itself contains a subset of properties from both macro +definition and macro call available through global data. +ExpnData::parent tracks the child-to-parent link in this hierarchy.

    +

    For example:

    +
    macro_rules! foo { () => { println!(); } }
    +
    +fn main() { foo!(); }
    +

    In this code, the AST nodes that are finally generated would have hierarchy +root -> id(foo) -> id(println).

    +

    The Macro Definition Hierarchy

    +

    The second hierarchy tracks the order of macro definitions, i.e., when we are +expanding one macro another macro definition is revealed in its output. This +one is a bit tricky and more complex than the other two hierarchies.

    +

    SyntaxContext represents a whole chain in this hierarchy via an ID. +SyntaxContextData contains data associated with the given +SyntaxContext; mostly it is a cache for results of filtering that chain in +different ways. SyntaxContextData::parent is the child-to-parent +link here, and SyntaxContextData::outer_expns are individual +elements in the chain. The "chaining-operator" is +SyntaxContext::apply_mark in compiler code.

    +

    A Span, mentioned above, is actually just a compact representation of +a code location and SyntaxContext. Likewise, an Ident is just an interned +Symbol + Span (i.e. an interned string + hygiene data).

    +

    For built-in macros, we use the context: +SyntaxContext::empty().apply_mark(expn_id), and such macros are +considered to be defined at the hierarchy root. We do the same for proc macros because we haven't implemented cross-crate hygiene yet.

    +

    If the token had context X before being produced by a macro then after being +produced by the macro it has context X -> macro_id. Here are some examples:

    +

    Example 0:

    +
    macro m() { ident }
    +
    +m!();
    +

    Here ident which initially has context SyntaxContext::root has +context ROOT -> id(m) after it's produced by m.

    +

    Example 1:

    +
    macro m() { macro n() { ident } }
    +
    +m!();
    +n!();
    +

    In this example the ident has context ROOT initially, then ROOT -> id(m) +after the first expansion, then ROOT -> id(m) -> id(n).

    +

    Example 2:

    +

    Note that these chains are not entirely determined by their last element, in +other words ExpnId is not isomorphic to SyntaxContext.

    +
    macro m($i: ident) { macro n() { ($i, bar) } }
    +
    +m!(foo);
    +

    After all expansions, foo has context ROOT -> id(n) and bar has context +ROOT -> id(m) -> id(n).

    +

    Currently this hierarchy for tracking macro definitions is subject to the +so-called "context transplantation hack". Modern (i.e. experimental) +macros have stronger hygiene than the legacy "Macros By Example" (MBE) +system which can result in weird interactions between the two. The hack is +intended to make things "just work" for now.

    +

    The Call-site Hierarchy

    +

    The third and final hierarchy tracks the location of macro invocations.

    +

    In this hierarchy ExpnData::call_site is the child -> parent +link.

    +

    Here is an example:

    +
    macro bar($i: ident) { $i }
    +macro foo($i: ident) { $i }
    +
    +foo!(bar!(baz));
    +

    For the baz AST node in the final output, the expansion-order hierarchy is +ROOT -> id(foo) -> id(bar) -> baz, while the call-site hierarchy is ROOT -> baz.

    +

    Macro Backtraces

    +

    Macro backtraces are implemented in rustc_span using the hygiene machinery +in rustc_span::hygiene.

    +

    Producing Macro Output

    +

    Above, we saw how the output of a macro is integrated into the AST for a crate, +and we also saw how the hygiene data for a crate is generated. But how do we +actually produce the output of a macro? It depends on the type of macro.

    +

    There are two types of macros in Rust:

    +
      +
    1. macro_rules! macros (a.k.a. "Macros By Example" (MBE)), and,
    2. +
    3. procedural macros (proc macros); including custom derives.
    4. +
    +

    During the parsing phase, the normal Rust parser will set aside the contents of +macros and their invocations. Later, macros are expanded using these +portions of the code.

    +

    Some important data structures/interfaces here:

    + +

    Macros By Example

    +

    MBEs have their own parser distinct from the Rust parser. When macros are +expanded, we may invoke the MBE parser to parse and expand a macro. The +MBE parser, in turn, may call the Rust parser when it needs to bind a +metavariable (e.g. $my_expr) while parsing the contents of a macro +invocation. The code for macro expansion is in +compiler/rustc_expand/src/mbe/.

    +

    Example

    +
    macro_rules! printer {
    +    (print $mvar:ident) => {
    +        println!("{}", $mvar);
    +    };
    +    (print twice $mvar:ident) => {
    +        println!("{}", $mvar);
    +        println!("{}", $mvar);
    +    };
    +}
    +

    Here $mvar is called a metavariable. Unlike normal variables, rather than +binding to a value at runtime, a metavariable binds at compile time to a +tree of tokens. A token is a single "unit" of the grammar, such as an +identifier (e.g. foo) or punctuation (e.g. =>). There are also other +special tokens, such as EOF, which its self indicates that there are no more +tokens. There are token trees resulting from the paired parentheses-like +characters ((...), [...], and {...}) – they include the open and +close and all the tokens in between (Rust requires that parentheses-like +characters be balanced). Having macro expansion operate on token streams +rather than the raw bytes of a source-file abstracts away a lot of complexity. +The macro expander (and much of the rest of the compiler) doesn't consider +the exact line and column of some syntactic construct in the code; it considers +which constructs are used in the code. Using tokens allows us to care about +what without worrying about where. For more information about tokens, see +the Parsing chapter of this book.

    +
    printer!(print foo); // `foo` is a variable
    +

    The process of expanding the macro invocation into the syntax tree +println!("{}", foo) and then expanding the syntax tree into a call to +Display::fmt is one common example of macro expansion.

    +

    The MBE parser

    +

    There are two parts to MBE expansion done by the macro parser:

    +
      +
    1. parsing the definition, and,
    2. +
    3. parsing the invocations.
    4. +
    +

    We think of the MBE parser as a nondeterministic finite automaton (NFA) based +regex parser since it uses an algorithm similar in spirit to the Earley +parsing algorithm. The macro +parser is defined in +compiler/rustc_expand/src/mbe/macro_parser.rs.

    +

    The interface of the macro parser is as follows (this is slightly simplified):

    +
    fn parse_tt(
    +    &mut self,
    +    parser: &mut Cow<'_, Parser<'_>>,
    +    matcher: &[MatcherLoc]
    +) -> ParseResult
    +

    We use these items in macro parser:

    +
      +
    • a parser variable is a reference to the state of a normal Rust parser, +including the token stream and parsing session. The token stream is what we +are about to ask the MBE parser to parse. We will consume the raw stream of +tokens and output a binding of metavariables to corresponding token trees. +The parsing session can be used to report parser errors.
    • +
    • a matcher variable is a sequence of MatcherLocs that we want to match +the token stream against. They're converted from token trees before matching.
    • +
    +

    In the analogy of a regex parser, the token stream is the input and we are +matching it against the pattern defined by matcher. Using our examples, the +token stream could be the stream of tokens containing the inside of the example +invocation print foo, while matcher might be the sequence of token (trees) +print $mvar:ident.

    +

    The output of the parser is a ParseResult, which indicates which of +three cases has occurred:

    +
      +
    • Success: the token stream matches the given matcher and we have produced a +binding from metavariables to the corresponding token trees.
    • +
    • Failure: the token stream does not match matcher and results in an error +message such as "No rule expected token ...".
    • +
    • Error: some fatal error has occurred in the parser. For example, this +happens if there is more than one pattern match, since that indicates the +macro is ambiguous.
    • +
    +

    The full interface is defined here.

    +

    The macro parser does pretty much exactly the same as a normal regex parser +with one exception: in order to parse different types of metavariables, such as +ident, block, expr, etc., the macro parser must call back to the normal +Rust parser. Both the definition and invocation of macros are parsed using +the parser in a process which is non-intuitively self-referential.

    +

    The code to parse macro definitions is in +compiler/rustc_expand/src/mbe/macro_rules.rs. It defines the +pattern for matching a macro definition as $( $lhs:tt => $rhs:tt );+. In +other words, a macro_rules definition should have in its body at least one +occurrence of a token tree followed by => followed by another token tree. +When the compiler comes to a macro_rules definition, it uses this pattern to +match the two token trees per the rules of the definition of the macro, thereby +utilizing the macro parser itself. In our example definition, the +metavariable $lhs would match the patterns of both arms: (print $mvar:ident) and (print twice $mvar:ident). And $rhs would match the +bodies of both arms: { println!("{}", $mvar); } and { println!("{}", $mvar); println!("{}", $mvar); }. The parser keeps this knowledge around for when it +needs to expand a macro invocation.

    +

    When the compiler comes to a macro invocation, it parses that invocation using +a NFA-based macro parser described above. However, the matcher variable +used is the first token tree ($lhs) extracted from the arms of the macro +definition. Using our example, we would try to match the token stream print foo from the invocation against the matchers print $mvar:ident and print twice $mvar:ident that we previously extracted from the definition. The +algorithm is exactly the same, but when the macro parser comes to a place in the +current matcher where it needs to match a non-terminal (e.g. $mvar:ident), +it calls back to the normal Rust parser to get the contents of that +non-terminal. In this case, the Rust parser would look for an ident token, +which it finds (foo) and returns to the macro parser. Then, the macro parser +proceeds in parsing as normal. Also, note that exactly one of the matchers from +the various arms should match the invocation; if there is more than one match, +the parse is ambiguous, while if there are no matches at all, there is a syntax +error.

    +

    For more information about the macro parser's implementation, see the comments +in compiler/rustc_expand/src/mbe/macro_parser.rs.

    +

    Procedural Macros

    +

    Procedural macros are also expanded during parsing. However, rather than +having a parser in the compiler, proc macros are implemented as custom, +third-party crates. The compiler will compile the proc macro crate and +specially annotated functions in them (i.e. the proc macro itself), passing +them a stream of tokens. A proc macro can then transform the token stream and +output a new token stream, which is synthesized into the AST.

    +

    The token stream type used by proc macros is stable, so rustc does not +use it internally. The compiler's (unstable) token stream is defined in +rustc_ast::tokenstream::TokenStream. This is converted into the +stable proc_macro::TokenStream and back in +rustc_expand::proc_macro and rustc_expand::proc_macro_server. +Since the Rust ABI is currently unstable, we use the C ABI for this conversion.

    + +

    Custom Derive

    +

    Custom derives are a special type of proc macro.

    +

    Macros By Example and Macros 2.0

    +

    There is an legacy and mostly undocumented effort to improve the MBE system +by giving it more hygiene-related features, better scoping and visibility +rules, etc. Internally this uses the same machinery as today's MBEs with some +additional syntactic sugar and are allowed to be in namespaces.

    + + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + + diff --git a/mark.min.js b/mark.min.js new file mode 100644 index 000000000..163623188 --- /dev/null +++ b/mark.min.js @@ -0,0 +1,7 @@ +/*!*************************************************** +* mark.js v8.11.1 +* https://markjs.io/ +* Copyright (c) 2014–2018, Julian Kühnel +* Released under the MIT license https://git.io/vwTVl +*****************************************************/ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.Mark=t()}(this,function(){"use strict";var e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},t=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},n=function(){function e(e,t){for(var n=0;n1&&void 0!==arguments[1])||arguments[1],i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:5e3;t(this,e),this.ctx=n,this.iframes=r,this.exclude=i,this.iframesTimeout=o}return n(e,[{key:"getContexts",value:function(){var e=[];return(void 0!==this.ctx&&this.ctx?NodeList.prototype.isPrototypeOf(this.ctx)?Array.prototype.slice.call(this.ctx):Array.isArray(this.ctx)?this.ctx:"string"==typeof this.ctx?Array.prototype.slice.call(document.querySelectorAll(this.ctx)):[this.ctx]:[]).forEach(function(t){var n=e.filter(function(e){return e.contains(t)}).length>0;-1!==e.indexOf(t)||n||e.push(t)}),e}},{key:"getIframeContents",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:function(){},r=void 0;try{var i=e.contentWindow;if(r=i.document,!i||!r)throw new Error("iframe inaccessible")}catch(e){n()}r&&t(r)}},{key:"isIframeBlank",value:function(e){var t="about:blank",n=e.getAttribute("src").trim();return e.contentWindow.location.href===t&&n!==t&&n}},{key:"observeIframeLoad",value:function(e,t,n){var r=this,i=!1,o=null,a=function a(){if(!i){i=!0,clearTimeout(o);try{r.isIframeBlank(e)||(e.removeEventListener("load",a),r.getIframeContents(e,t,n))}catch(e){n()}}};e.addEventListener("load",a),o=setTimeout(a,this.iframesTimeout)}},{key:"onIframeReady",value:function(e,t,n){try{"complete"===e.contentWindow.document.readyState?this.isIframeBlank(e)?this.observeIframeLoad(e,t,n):this.getIframeContents(e,t,n):this.observeIframeLoad(e,t,n)}catch(e){n()}}},{key:"waitForIframes",value:function(e,t){var n=this,r=0;this.forEachIframe(e,function(){return!0},function(e){r++,n.waitForIframes(e.querySelector("html"),function(){--r||t()})},function(e){e||t()})}},{key:"forEachIframe",value:function(t,n,r){var i=this,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:function(){},a=t.querySelectorAll("iframe"),s=a.length,c=0;a=Array.prototype.slice.call(a);var u=function(){--s<=0&&o(c)};s||u(),a.forEach(function(t){e.matches(t,i.exclude)?u():i.onIframeReady(t,function(e){n(t)&&(c++,r(e)),u()},u)})}},{key:"createIterator",value:function(e,t,n){return document.createNodeIterator(e,t,n,!1)}},{key:"createInstanceOnIframe",value:function(t){return new e(t.querySelector("html"),this.iframes)}},{key:"compareNodeIframe",value:function(e,t,n){if(e.compareDocumentPosition(n)&Node.DOCUMENT_POSITION_PRECEDING){if(null===t)return!0;if(t.compareDocumentPosition(n)&Node.DOCUMENT_POSITION_FOLLOWING)return!0}return!1}},{key:"getIteratorNode",value:function(e){var t=e.previousNode();return{prevNode:t,node:null===t?e.nextNode():e.nextNode()&&e.nextNode()}}},{key:"checkIframeFilter",value:function(e,t,n,r){var i=!1,o=!1;return r.forEach(function(e,t){e.val===n&&(i=t,o=e.handled)}),this.compareNodeIframe(e,t,n)?(!1!==i||o?!1===i||o||(r[i].handled=!0):r.push({val:n,handled:!0}),!0):(!1===i&&r.push({val:n,handled:!1}),!1)}},{key:"handleOpenIframes",value:function(e,t,n,r){var i=this;e.forEach(function(e){e.handled||i.getIframeContents(e.val,function(e){i.createInstanceOnIframe(e).forEachNode(t,n,r)})})}},{key:"iterateThroughNodes",value:function(e,t,n,r,i){for(var o,a=this,s=this.createIterator(t,e,r),c=[],u=[],l=void 0,h=void 0;void 0,o=a.getIteratorNode(s),h=o.prevNode,l=o.node;)this.iframes&&this.forEachIframe(t,function(e){return a.checkIframeFilter(l,h,e,c)},function(t){a.createInstanceOnIframe(t).forEachNode(e,function(e){return u.push(e)},r)}),u.push(l);u.forEach(function(e){n(e)}),this.iframes&&this.handleOpenIframes(c,e,n,r),i()}},{key:"forEachNode",value:function(e,t,n){var r=this,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:function(){},o=this.getContexts(),a=o.length;a||i(),o.forEach(function(o){var s=function(){r.iterateThroughNodes(e,o,t,n,function(){--a<=0&&i()})};r.iframes?r.waitForIframes(o,s):s()})}}],[{key:"matches",value:function(e,t){var n="string"==typeof t?[t]:t,r=e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.oMatchesSelector||e.webkitMatchesSelector;if(r){var i=!1;return n.every(function(t){return!r.call(e,t)||(i=!0,!1)}),i}return!1}}]),e}(),o=function(){function e(n){t(this,e),this.opt=r({},{diacritics:!0,synonyms:{},accuracy:"partially",caseSensitive:!1,ignoreJoiners:!1,ignorePunctuation:[],wildcards:"disabled"},n)}return n(e,[{key:"create",value:function(e){return"disabled"!==this.opt.wildcards&&(e=this.setupWildcardsRegExp(e)),e=this.escapeStr(e),Object.keys(this.opt.synonyms).length&&(e=this.createSynonymsRegExp(e)),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),this.opt.diacritics&&(e=this.createDiacriticsRegExp(e)),e=this.createMergedBlanksRegExp(e),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.createJoinersRegExp(e)),"disabled"!==this.opt.wildcards&&(e=this.createWildcardsRegExp(e)),e=this.createAccuracyRegExp(e),new RegExp(e,"gm"+(this.opt.caseSensitive?"":"i"))}},{key:"escapeStr",value:function(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}},{key:"createSynonymsRegExp",value:function(e){var t=this.opt.synonyms,n=this.opt.caseSensitive?"":"i",r=this.opt.ignoreJoiners||this.opt.ignorePunctuation.length?"\0":"";for(var i in t)if(t.hasOwnProperty(i)){var o=t[i],a="disabled"!==this.opt.wildcards?this.setupWildcardsRegExp(i):this.escapeStr(i),s="disabled"!==this.opt.wildcards?this.setupWildcardsRegExp(o):this.escapeStr(o);""!==a&&""!==s&&(e=e.replace(new RegExp("("+this.escapeStr(a)+"|"+this.escapeStr(s)+")","gm"+n),r+"("+this.processSynonyms(a)+"|"+this.processSynonyms(s)+")"+r))}return e}},{key:"processSynonyms",value:function(e){return(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),e}},{key:"setupWildcardsRegExp",value:function(e){return(e=e.replace(/(?:\\)*\?/g,function(e){return"\\"===e.charAt(0)?"?":""})).replace(/(?:\\)*\*/g,function(e){return"\\"===e.charAt(0)?"*":""})}},{key:"createWildcardsRegExp",value:function(e){var t="withSpaces"===this.opt.wildcards;return e.replace(/\u0001/g,t?"[\\S\\s]?":"\\S?").replace(/\u0002/g,t?"[\\S\\s]*?":"\\S*")}},{key:"setupIgnoreJoinersRegExp",value:function(e){return e.replace(/[^(|)\\]/g,function(e,t,n){var r=n.charAt(t+1);return/[(|)\\]/.test(r)||""===r?e:e+"\0"})}},{key:"createJoinersRegExp",value:function(e){var t=[],n=this.opt.ignorePunctuation;return Array.isArray(n)&&n.length&&t.push(this.escapeStr(n.join(""))),this.opt.ignoreJoiners&&t.push("\\u00ad\\u200b\\u200c\\u200d"),t.length?e.split(/\u0000+/).join("["+t.join("")+"]*"):e}},{key:"createDiacriticsRegExp",value:function(e){var t=this.opt.caseSensitive?"":"i",n=this.opt.caseSensitive?["aàáảãạăằắẳẵặâầấẩẫậäåāą","AÀÁẢÃẠĂẰẮẲẴẶÂẦẤẨẪẬÄÅĀĄ","cçćč","CÇĆČ","dđď","DĐĎ","eèéẻẽẹêềếểễệëěēę","EÈÉẺẼẸÊỀẾỂỄỆËĚĒĘ","iìíỉĩịîïī","IÌÍỈĨỊÎÏĪ","lł","LŁ","nñňń","NÑŇŃ","oòóỏõọôồốổỗộơởỡớờợöøō","OÒÓỎÕỌÔỒỐỔỖỘƠỞỠỚỜỢÖØŌ","rř","RŘ","sšśșş","SŠŚȘŞ","tťțţ","TŤȚŢ","uùúủũụưừứửữựûüůū","UÙÚỦŨỤƯỪỨỬỮỰÛÜŮŪ","yýỳỷỹỵÿ","YÝỲỶỸỴŸ","zžżź","ZŽŻŹ"]:["aàáảãạăằắẳẵặâầấẩẫậäåāąAÀÁẢÃẠĂẰẮẲẴẶÂẦẤẨẪẬÄÅĀĄ","cçćčCÇĆČ","dđďDĐĎ","eèéẻẽẹêềếểễệëěēęEÈÉẺẼẸÊỀẾỂỄỆËĚĒĘ","iìíỉĩịîïīIÌÍỈĨỊÎÏĪ","lłLŁ","nñňńNÑŇŃ","oòóỏõọôồốổỗộơởỡớờợöøōOÒÓỎÕỌÔỒỐỔỖỘƠỞỠỚỜỢÖØŌ","rřRŘ","sšśșşSŠŚȘŞ","tťțţTŤȚŢ","uùúủũụưừứửữựûüůūUÙÚỦŨỤƯỪỨỬỮỰÛÜŮŪ","yýỳỷỹỵÿYÝỲỶỸỴŸ","zžżźZŽŻŹ"],r=[];return e.split("").forEach(function(i){n.every(function(n){if(-1!==n.indexOf(i)){if(r.indexOf(n)>-1)return!1;e=e.replace(new RegExp("["+n+"]","gm"+t),"["+n+"]"),r.push(n)}return!0})}),e}},{key:"createMergedBlanksRegExp",value:function(e){return e.replace(/[\s]+/gim,"[\\s]+")}},{key:"createAccuracyRegExp",value:function(e){var t=this,n=this.opt.accuracy,r="string"==typeof n?n:n.value,i="";switch(("string"==typeof n?[]:n.limiters).forEach(function(e){i+="|"+t.escapeStr(e)}),r){case"partially":default:return"()("+e+")";case"complementary":return"()([^"+(i="\\s"+(i||this.escapeStr("!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~¡¿")))+"]*"+e+"[^"+i+"]*)";case"exactly":return"(^|\\s"+i+")("+e+")(?=$|\\s"+i+")"}}}]),e}(),a=function(){function a(e){t(this,a),this.ctx=e,this.ie=!1;var n=window.navigator.userAgent;(n.indexOf("MSIE")>-1||n.indexOf("Trident")>-1)&&(this.ie=!0)}return n(a,[{key:"log",value:function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"debug",r=this.opt.log;this.opt.debug&&"object"===(void 0===r?"undefined":e(r))&&"function"==typeof r[n]&&r[n]("mark.js: "+t)}},{key:"getSeparatedKeywords",value:function(e){var t=this,n=[];return e.forEach(function(e){t.opt.separateWordSearch?e.split(" ").forEach(function(e){e.trim()&&-1===n.indexOf(e)&&n.push(e)}):e.trim()&&-1===n.indexOf(e)&&n.push(e)}),{keywords:n.sort(function(e,t){return t.length-e.length}),length:n.length}}},{key:"isNumeric",value:function(e){return Number(parseFloat(e))==e}},{key:"checkRanges",value:function(e){var t=this;if(!Array.isArray(e)||"[object Object]"!==Object.prototype.toString.call(e[0]))return this.log("markRanges() will only accept an array of objects"),this.opt.noMatch(e),[];var n=[],r=0;return e.sort(function(e,t){return e.start-t.start}).forEach(function(e){var i=t.callNoMatchOnInvalidRanges(e,r),o=i.start,a=i.end;i.valid&&(e.start=o,e.length=a-o,n.push(e),r=a)}),n}},{key:"callNoMatchOnInvalidRanges",value:function(e,t){var n=void 0,r=void 0,i=!1;return e&&void 0!==e.start?(r=(n=parseInt(e.start,10))+parseInt(e.length,10),this.isNumeric(e.start)&&this.isNumeric(e.length)&&r-t>0&&r-n>0?i=!0:(this.log("Ignoring invalid or overlapping range: "+JSON.stringify(e)),this.opt.noMatch(e))):(this.log("Ignoring invalid range: "+JSON.stringify(e)),this.opt.noMatch(e)),{start:n,end:r,valid:i}}},{key:"checkWhitespaceRanges",value:function(e,t,n){var r=void 0,i=!0,o=n.length,a=t-o,s=parseInt(e.start,10)-a;return(r=(s=s>o?o:s)+parseInt(e.length,10))>o&&(r=o,this.log("End range automatically set to the max value of "+o)),s<0||r-s<0||s>o||r>o?(i=!1,this.log("Invalid range: "+JSON.stringify(e)),this.opt.noMatch(e)):""===n.substring(s,r).replace(/\s+/g,"")&&(i=!1,this.log("Skipping whitespace only range: "+JSON.stringify(e)),this.opt.noMatch(e)),{start:s,end:r,valid:i}}},{key:"getTextNodes",value:function(e){var t=this,n="",r=[];this.iterator.forEachNode(NodeFilter.SHOW_TEXT,function(e){r.push({start:n.length,end:(n+=e.textContent).length,node:e})},function(e){return t.matchesExclude(e.parentNode)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT},function(){e({value:n,nodes:r})})}},{key:"matchesExclude",value:function(e){return i.matches(e,this.opt.exclude.concat(["script","style","title","head","html"]))}},{key:"wrapRangeInTextNode",value:function(e,t,n){var r=this.opt.element?this.opt.element:"mark",i=e.splitText(t),o=i.splitText(n-t),a=document.createElement(r);return a.setAttribute("data-markjs","true"),this.opt.className&&a.setAttribute("class",this.opt.className),a.textContent=i.textContent,i.parentNode.replaceChild(a,i),o}},{key:"wrapRangeInMappedTextNode",value:function(e,t,n,r,i){var o=this;e.nodes.every(function(a,s){var c=e.nodes[s+1];if(void 0===c||c.start>t){if(!r(a.node))return!1;var u=t-a.start,l=(n>a.end?a.end:n)-a.start,h=e.value.substr(0,a.start),f=e.value.substr(l+a.start);if(a.node=o.wrapRangeInTextNode(a.node,u,l),e.value=h+f,e.nodes.forEach(function(t,n){n>=s&&(e.nodes[n].start>0&&n!==s&&(e.nodes[n].start-=l),e.nodes[n].end-=l)}),n-=l,i(a.node.previousSibling,a.start),!(n>a.end))return!1;t=a.end}return!0})}},{key:"wrapGroups",value:function(e,t,n,r){return r((e=this.wrapRangeInTextNode(e,t,t+n)).previousSibling),e}},{key:"separateGroups",value:function(e,t,n,r,i){for(var o=t.length,a=1;a-1&&r(t[a],e)&&(e=this.wrapGroups(e,s,t[a].length,i))}return e}},{key:"wrapMatches",value:function(e,t,n,r,i){var o=this,a=0===t?0:t+1;this.getTextNodes(function(t){t.nodes.forEach(function(t){t=t.node;for(var i=void 0;null!==(i=e.exec(t.textContent))&&""!==i[a];){if(o.opt.separateGroups)t=o.separateGroups(t,i,a,n,r);else{if(!n(i[a],t))continue;var s=i.index;if(0!==a)for(var c=1;c + + + + + Memory management in rustc - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    Memory management in rustc

    +

    Generally rustc tries to be pretty careful how it manages memory. +The compiler allocates a lot of data structures throughout compilation, +and if we are not careful, it will take a lot of time and space to do so.

    +

    One of the main way the compiler manages this is using arenas and interning.

    +

    Arenas and Interning

    +

    Since A LOT of data structures are created during compilation, for performance +reasons, we allocate them from a global memory pool. +Each are allocated once from a long-lived arena. +This is called arena allocation. +This system reduces allocations/deallocations of memory. +It also allows for easy comparison of types (more on types here) for equality: +for each interned type X, we implemented PartialEq for X, +so we can just compare pointers. +The CtxtInterners type contains a bunch of maps of interned types and the arena itself.

    +

    Example: ty::TyKind

    +

    Taking the example of ty::TyKind which represents a type in the compiler (you +can read more here). Each time we want to construct a type, the +compiler doesn’t naively allocate from the buffer. Instead, we check if that +type was already constructed. If it was, we just get the same pointer we had +before, otherwise we make a fresh pointer. With this schema if we want to know +if two types are the same, all we need to do is compare the pointers which is +efficient. ty::TyKind should never be constructed on the stack, and it would be unusable +if done so. +You always allocate them from this arena and you always intern them so they are +unique.

    +

    At the beginning of the compilation we make a buffer and each time we need to allocate a type we use +some of this memory buffer. If we run out of space we get another one. The lifetime of that buffer +is 'tcx. Our types are tied to that lifetime, so when compilation finishes all the memory related +to that buffer is freed and our 'tcx references would be invalid.

    +

    In addition to types, there are a number of other arena-allocated data structures that you can +allocate, and which are found in this module. Here are a few examples:

    +
      +
    • GenericArgs, allocated with mk_args – this will intern a slice of types, often used +to specify the values to be substituted for generics args (e.g. HashMap<i32, u32> would be +represented as a slice &'tcx [tcx.types.i32, tcx.types.u32]).
    • +
    • TraitRef, typically passed by value – a trait reference consists of a reference to a trait +along with its various type parameters (including Self), like i32: Display (here, the def-id +would reference the Display trait, and the args would contain i32). Note that def-id is +defined and discussed in depth in the AdtDef and DefId section.
    • +
    • Predicate defines something the trait system has to prove (see traits module).
    • +
    +

    The tcx and how it uses lifetimes

    +

    The typing context (tcx) is the central data structure in the compiler. It is the context that +you use to perform all manner of queries. The struct TyCtxt defines a reference to this shared +context:

    +
    tcx: TyCtxt<'tcx>
    +//          ----
    +//          |
    +//          arena lifetime
    +

    As you can see, the TyCtxt type takes a lifetime parameter. When you see a reference with a +lifetime like 'tcx, you know that it refers to arena-allocated data (or data that lives as long as +the arenas, anyhow).

    +

    A Note On Lifetimes

    +

    The Rust compiler is a fairly large program containing lots of big data +structures (e.g. the Abstract Syntax Tree (AST), High-Level Intermediate +Representation (HIR), and the type system) and as such, arenas and +references are heavily relied upon to minimize unnecessary memory use. This +manifests itself in the way people can plug into the compiler (i.e. the +driver), preferring a "push"-style API (callbacks) instead +of the more Rust-ic "pull" style (think the Iterator trait).

    +

    Thread-local storage and interning are used a lot through the compiler to reduce +duplication while also preventing a lot of the ergonomic issues due to many +pervasive lifetimes. The rustc_middle::ty::tls module is used to access these +thread-locals, although you should rarely need to touch it.

    + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + + diff --git a/mermaid-init.js b/mermaid-init.js new file mode 100644 index 000000000..313a6e8bc --- /dev/null +++ b/mermaid-init.js @@ -0,0 +1 @@ +mermaid.initialize({startOnLoad:true}); diff --git a/mermaid.min.js b/mermaid.min.js new file mode 100644 index 000000000..d45942f36 --- /dev/null +++ b/mermaid.min.js @@ -0,0 +1,4 @@ +/* MIT Licensed. Copyright (c) 2014 - 2021 Knut Sveidqvist */ +/*! For license information please see https://github.com/mermaid-js/mermaid/blob/8.13.10/LICENSE */ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.mermaid=e():t.mermaid=e()}("undefined"!=typeof self?self:this,(function(){return(()=>{var t={1362:(t,e,n)=>{t=n.nmd(t);var r=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,6],n=[1,7],r=[1,8],i=[1,9],a=[1,12],o=[1,11],s=[1,15,24],c=[1,19],u=[1,31],l=[1,34],h=[1,32],f=[1,33],d=[1,35],p=[1,36],y=[1,37],g=[1,38],m=[1,41],v=[1,42],b=[1,43],_=[1,44],x=[15,24],w=[1,56],k=[1,57],T=[1,58],E=[1,59],C=[1,60],S=[1,61],A=[15,24,31,38,39,47,50,51,52,53,54,55,60,62],M=[15,24,29,31,38,39,43,47,50,51,52,53,54,55,60,62,77,78,79,80],N=[7,8,9,10,15,18,22,24],D=[47,77,78,79,80],O=[47,54,55,77,78,79,80],B=[47,50,51,52,53,77,78,79,80],L=[15,24,31],I=[1,93],R={trace:function(){},yy:{},symbols_:{error:2,start:3,mermaidDoc:4,direction:5,directive:6,direction_tb:7,direction_bt:8,direction_rl:9,direction_lr:10,graphConfig:11,openDirective:12,typeDirective:13,closeDirective:14,NEWLINE:15,":":16,argDirective:17,open_directive:18,type_directive:19,arg_directive:20,close_directive:21,CLASS_DIAGRAM:22,statements:23,EOF:24,statement:25,className:26,alphaNumToken:27,classLiteralName:28,GENERICTYPE:29,relationStatement:30,LABEL:31,classStatement:32,methodStatement:33,annotationStatement:34,clickStatement:35,cssClassStatement:36,CLASS:37,STYLE_SEPARATOR:38,STRUCT_START:39,members:40,STRUCT_STOP:41,ANNOTATION_START:42,ANNOTATION_END:43,MEMBER:44,SEPARATOR:45,relation:46,STR:47,relationType:48,lineType:49,AGGREGATION:50,EXTENSION:51,COMPOSITION:52,DEPENDENCY:53,LINE:54,DOTTED_LINE:55,CALLBACK:56,LINK:57,LINK_TARGET:58,CLICK:59,CALLBACK_NAME:60,CALLBACK_ARGS:61,HREF:62,CSSCLASS:63,commentToken:64,textToken:65,graphCodeTokens:66,textNoTagsToken:67,TAGSTART:68,TAGEND:69,"==":70,"--":71,PCT:72,DEFAULT:73,SPACE:74,MINUS:75,keywords:76,UNICODE_TEXT:77,NUM:78,ALPHA:79,BQUOTE_STR:80,$accept:0,$end:1},terminals_:{2:"error",7:"direction_tb",8:"direction_bt",9:"direction_rl",10:"direction_lr",15:"NEWLINE",16:":",18:"open_directive",19:"type_directive",20:"arg_directive",21:"close_directive",22:"CLASS_DIAGRAM",24:"EOF",29:"GENERICTYPE",31:"LABEL",37:"CLASS",38:"STYLE_SEPARATOR",39:"STRUCT_START",41:"STRUCT_STOP",42:"ANNOTATION_START",43:"ANNOTATION_END",44:"MEMBER",45:"SEPARATOR",47:"STR",50:"AGGREGATION",51:"EXTENSION",52:"COMPOSITION",53:"DEPENDENCY",54:"LINE",55:"DOTTED_LINE",56:"CALLBACK",57:"LINK",58:"LINK_TARGET",59:"CLICK",60:"CALLBACK_NAME",61:"CALLBACK_ARGS",62:"HREF",63:"CSSCLASS",66:"graphCodeTokens",68:"TAGSTART",69:"TAGEND",70:"==",71:"--",72:"PCT",73:"DEFAULT",74:"SPACE",75:"MINUS",76:"keywords",77:"UNICODE_TEXT",78:"NUM",79:"ALPHA",80:"BQUOTE_STR"},productions_:[0,[3,1],[3,1],[3,2],[5,1],[5,1],[5,1],[5,1],[4,1],[6,4],[6,6],[12,1],[13,1],[17,1],[14,1],[11,4],[23,1],[23,2],[23,3],[26,1],[26,1],[26,2],[26,2],[26,2],[25,1],[25,2],[25,1],[25,1],[25,1],[25,1],[25,1],[25,1],[25,1],[32,2],[32,4],[32,5],[32,7],[34,4],[40,1],[40,2],[33,1],[33,2],[33,1],[33,1],[30,3],[30,4],[30,4],[30,5],[46,3],[46,2],[46,2],[46,1],[48,1],[48,1],[48,1],[48,1],[49,1],[49,1],[35,3],[35,4],[35,3],[35,4],[35,4],[35,5],[35,3],[35,4],[35,4],[35,5],[35,3],[35,4],[35,4],[35,5],[36,3],[64,1],[64,1],[65,1],[65,1],[65,1],[65,1],[65,1],[65,1],[65,1],[67,1],[67,1],[67,1],[67,1],[27,1],[27,1],[27,1],[28,1]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 4:r.setDirection("TB");break;case 5:r.setDirection("BT");break;case 6:r.setDirection("RL");break;case 7:r.setDirection("LR");break;case 11:r.parseDirective("%%{","open_directive");break;case 12:r.parseDirective(a[s],"type_directive");break;case 13:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 14:r.parseDirective("}%%","close_directive","class");break;case 19:case 20:this.$=a[s];break;case 21:this.$=a[s-1]+a[s];break;case 22:case 23:this.$=a[s-1]+"~"+a[s];break;case 24:r.addRelation(a[s]);break;case 25:a[s-1].title=r.cleanupLabel(a[s]),r.addRelation(a[s-1]);break;case 33:r.addClass(a[s]);break;case 34:r.addClass(a[s-2]),r.setCssClass(a[s-2],a[s]);break;case 35:r.addClass(a[s-3]),r.addMembers(a[s-3],a[s-1]);break;case 36:r.addClass(a[s-5]),r.setCssClass(a[s-5],a[s-3]),r.addMembers(a[s-5],a[s-1]);break;case 37:r.addAnnotation(a[s],a[s-2]);break;case 38:this.$=[a[s]];break;case 39:a[s].push(a[s-1]),this.$=a[s];break;case 40:case 42:case 43:break;case 41:r.addMember(a[s-1],r.cleanupLabel(a[s]));break;case 44:this.$={id1:a[s-2],id2:a[s],relation:a[s-1],relationTitle1:"none",relationTitle2:"none"};break;case 45:this.$={id1:a[s-3],id2:a[s],relation:a[s-1],relationTitle1:a[s-2],relationTitle2:"none"};break;case 46:this.$={id1:a[s-3],id2:a[s],relation:a[s-2],relationTitle1:"none",relationTitle2:a[s-1]};break;case 47:this.$={id1:a[s-4],id2:a[s],relation:a[s-2],relationTitle1:a[s-3],relationTitle2:a[s-1]};break;case 48:this.$={type1:a[s-2],type2:a[s],lineType:a[s-1]};break;case 49:this.$={type1:"none",type2:a[s],lineType:a[s-1]};break;case 50:this.$={type1:a[s-1],type2:"none",lineType:a[s]};break;case 51:this.$={type1:"none",type2:"none",lineType:a[s]};break;case 52:this.$=r.relationType.AGGREGATION;break;case 53:this.$=r.relationType.EXTENSION;break;case 54:this.$=r.relationType.COMPOSITION;break;case 55:this.$=r.relationType.DEPENDENCY;break;case 56:this.$=r.lineType.LINE;break;case 57:this.$=r.lineType.DOTTED_LINE;break;case 58:case 64:this.$=a[s-2],r.setClickEvent(a[s-1],a[s]);break;case 59:case 65:this.$=a[s-3],r.setClickEvent(a[s-2],a[s-1]),r.setTooltip(a[s-2],a[s]);break;case 60:case 68:this.$=a[s-2],r.setLink(a[s-1],a[s]);break;case 61:case 69:this.$=a[s-3],r.setLink(a[s-2],a[s-1],a[s]);break;case 62:case 70:this.$=a[s-3],r.setLink(a[s-2],a[s-1]),r.setTooltip(a[s-2],a[s]);break;case 63:case 71:this.$=a[s-4],r.setLink(a[s-3],a[s-2],a[s]),r.setTooltip(a[s-3],a[s-1]);break;case 66:this.$=a[s-3],r.setClickEvent(a[s-2],a[s-1],a[s]);break;case 67:this.$=a[s-4],r.setClickEvent(a[s-3],a[s-2],a[s-1]),r.setTooltip(a[s-3],a[s]);break;case 72:r.setCssClass(a[s-1],a[s])}},table:[{3:1,4:2,5:3,6:4,7:e,8:n,9:r,10:i,11:5,12:10,18:a,22:o},{1:[3]},{1:[2,1]},{1:[2,2]},{3:13,4:2,5:3,6:4,7:e,8:n,9:r,10:i,11:5,12:10,18:a,22:o},{1:[2,8]},t(s,[2,4]),t(s,[2,5]),t(s,[2,6]),t(s,[2,7]),{13:14,19:[1,15]},{15:[1,16]},{19:[2,11]},{1:[2,3]},{14:17,16:[1,18],21:c},t([16,21],[2,12]),{5:29,6:28,7:e,8:n,9:r,10:i,12:10,18:a,23:20,25:21,26:30,27:39,28:40,30:22,32:23,33:24,34:25,35:26,36:27,37:u,42:l,44:h,45:f,56:d,57:p,59:y,63:g,77:m,78:v,79:b,80:_},{15:[1,45]},{17:46,20:[1,47]},{15:[2,14]},{24:[1,48]},{15:[1,49],24:[2,16]},t(x,[2,24],{31:[1,50]}),t(x,[2,26]),t(x,[2,27]),t(x,[2,28]),t(x,[2,29]),t(x,[2,30]),t(x,[2,31]),t(x,[2,32]),t(x,[2,40],{46:51,48:54,49:55,31:[1,53],47:[1,52],50:w,51:k,52:T,53:E,54:C,55:S}),{26:62,27:39,28:40,77:m,78:v,79:b,80:_},t(x,[2,42]),t(x,[2,43]),{27:63,77:m,78:v,79:b},{26:64,27:39,28:40,77:m,78:v,79:b,80:_},{26:65,27:39,28:40,77:m,78:v,79:b,80:_},{26:66,27:39,28:40,77:m,78:v,79:b,80:_},{47:[1,67]},t(A,[2,19],{27:39,28:40,26:68,29:[1,69],77:m,78:v,79:b,80:_}),t(A,[2,20],{29:[1,70]}),t(M,[2,86]),t(M,[2,87]),t(M,[2,88]),t([15,24,29,31,38,39,47,50,51,52,53,54,55,60,62],[2,89]),t(N,[2,9]),{14:71,21:c},{21:[2,13]},{1:[2,15]},{5:29,6:28,7:e,8:n,9:r,10:i,12:10,18:a,23:72,24:[2,17],25:21,26:30,27:39,28:40,30:22,32:23,33:24,34:25,35:26,36:27,37:u,42:l,44:h,45:f,56:d,57:p,59:y,63:g,77:m,78:v,79:b,80:_},t(x,[2,25]),{26:73,27:39,28:40,47:[1,74],77:m,78:v,79:b,80:_},{46:75,48:54,49:55,50:w,51:k,52:T,53:E,54:C,55:S},t(x,[2,41]),{49:76,54:C,55:S},t(D,[2,51],{48:77,50:w,51:k,52:T,53:E}),t(O,[2,52]),t(O,[2,53]),t(O,[2,54]),t(O,[2,55]),t(B,[2,56]),t(B,[2,57]),t(x,[2,33],{38:[1,78],39:[1,79]}),{43:[1,80]},{47:[1,81]},{47:[1,82]},{60:[1,83],62:[1,84]},{27:85,77:m,78:v,79:b},t(A,[2,21]),t(A,[2,22]),t(A,[2,23]),{15:[1,86]},{24:[2,18]},t(L,[2,44]),{26:87,27:39,28:40,77:m,78:v,79:b,80:_},{26:88,27:39,28:40,47:[1,89],77:m,78:v,79:b,80:_},t(D,[2,50],{48:90,50:w,51:k,52:T,53:E}),t(D,[2,49]),{27:91,77:m,78:v,79:b},{40:92,44:I},{26:94,27:39,28:40,77:m,78:v,79:b,80:_},t(x,[2,58],{47:[1,95]}),t(x,[2,60],{47:[1,97],58:[1,96]}),t(x,[2,64],{47:[1,98],61:[1,99]}),t(x,[2,68],{47:[1,101],58:[1,100]}),t(x,[2,72]),t(N,[2,10]),t(L,[2,46]),t(L,[2,45]),{26:102,27:39,28:40,77:m,78:v,79:b,80:_},t(D,[2,48]),t(x,[2,34],{39:[1,103]}),{41:[1,104]},{40:105,41:[2,38],44:I},t(x,[2,37]),t(x,[2,59]),t(x,[2,61]),t(x,[2,62],{58:[1,106]}),t(x,[2,65]),t(x,[2,66],{47:[1,107]}),t(x,[2,69]),t(x,[2,70],{58:[1,108]}),t(L,[2,47]),{40:109,44:I},t(x,[2,35]),{41:[2,39]},t(x,[2,63]),t(x,[2,67]),t(x,[2,71]),{41:[1,110]},t(x,[2,36])],defaultActions:{2:[2,1],3:[2,2],5:[2,8],12:[2,11],13:[2,3],19:[2,14],47:[2,13],48:[2,15],72:[2,18],105:[2,39]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),y={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(y.yy[g]=this.yy[g]);p.setInput(t,y.yy),y.yy.lexer=p,y.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var m=p.yylloc;a.push(m);var v=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var _,x,w,k,T,E,C,S,A,M={};;){if(w=n[n.length-1],this.defaultActions[w]?k=this.defaultActions[w]:(null==_&&(_=b()),k=o[w]&&o[w][_]),void 0===k||!k.length||!k[0]){var N="";for(E in A=[],o[w])this.terminals_[E]&&E>h&&A.push("'"+this.terminals_[E]+"'");N=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[_]||_)+"'":"Parse error on line "+(c+1)+": Unexpected "+(_==f?"end of input":"'"+(this.terminals_[_]||_)+"'"),this.parseError(N,{text:p.match,token:this.terminals_[_]||_,line:p.yylineno,loc:m,expected:A})}if(k[0]instanceof Array&&k.length>1)throw new Error("Parse Error: multiple actions possible at state: "+w+", token: "+_);switch(k[0]){case 1:n.push(_),i.push(p.yytext),a.push(p.yylloc),n.push(k[1]),_=null,x?(_=x,x=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,m=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[k[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},v&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(T=this.performAction.apply(M,[s,u,c,y.yy,k[1],i,a].concat(d))))return T;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[k[1]][0]),i.push(M.$),a.push(M._$),S=o[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},F={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){return this.next()||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),18;case 1:return 7;case 2:return 8;case 3:return 9;case 4:return 10;case 5:return this.begin("type_directive"),19;case 6:return this.popState(),this.begin("arg_directive"),16;case 7:return this.popState(),this.popState(),21;case 8:return 20;case 9:case 10:case 12:case 19:break;case 11:return 15;case 13:case 14:return 22;case 15:return this.begin("struct"),39;case 16:return"EOF_IN_STRUCT";case 17:return"OPEN_IN_STRUCT";case 18:return this.popState(),41;case 20:return"MEMBER";case 21:return 37;case 22:return 63;case 23:return 56;case 24:return 57;case 25:return 59;case 26:return 42;case 27:return 43;case 28:this.begin("generic");break;case 29:case 32:case 35:case 38:case 41:case 44:this.popState();break;case 30:return"GENERICTYPE";case 31:this.begin("string");break;case 33:return"STR";case 34:this.begin("bqstring");break;case 36:return"BQUOTE_STR";case 37:this.begin("href");break;case 39:return 62;case 40:this.begin("callback_name");break;case 42:this.popState(),this.begin("callback_args");break;case 43:return 60;case 45:return 61;case 46:case 47:case 48:case 49:return 58;case 50:case 51:return 51;case 52:case 53:return 53;case 54:return 52;case 55:return 50;case 56:return 54;case 57:return 55;case 58:return 31;case 59:return 38;case 60:return 75;case 61:return"DOT";case 62:return"PLUS";case 63:return 72;case 64:case 65:return"EQUALS";case 66:return 79;case 67:return"PUNCTUATION";case 68:return 78;case 69:return 77;case 70:return 74;case 71:return 24}},rules:[/^(?:%%\{)/,/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:((?:(?!\}%%)[^:.])*))/,/^(?::)/,/^(?:\}%%)/,/^(?:((?:(?!\}%%).|\n)*))/,/^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/,/^(?:%%[^\n]*(\r?\n)*)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:classDiagram-v2\b)/,/^(?:classDiagram\b)/,/^(?:[{])/,/^(?:$)/,/^(?:[{])/,/^(?:[}])/,/^(?:[\n])/,/^(?:[^{}\n]*)/,/^(?:class\b)/,/^(?:cssClass\b)/,/^(?:callback\b)/,/^(?:link\b)/,/^(?:click\b)/,/^(?:<<)/,/^(?:>>)/,/^(?:[~])/,/^(?:[~])/,/^(?:[^~]*)/,/^(?:["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:[`])/,/^(?:[`])/,/^(?:[^`]+)/,/^(?:href[\s]+["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:\s*<\|)/,/^(?:\s*\|>)/,/^(?:\s*>)/,/^(?:\s*<)/,/^(?:\s*\*)/,/^(?:\s*o\b)/,/^(?:--)/,/^(?:\.\.)/,/^(?::{1}[^:\n;]+)/,/^(?::{3})/,/^(?:-)/,/^(?:\.)/,/^(?:\+)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:\w+)/,/^(?:[!"#$%&'*+,-.`?\\/])/,/^(?:[0-9]+)/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\s)/,/^(?:$)/],conditions:{arg_directive:{rules:[7,8],inclusive:!1},type_directive:{rules:[6,7],inclusive:!1},open_directive:{rules:[5],inclusive:!1},callback_args:{rules:[44,45],inclusive:!1},callback_name:{rules:[41,42,43],inclusive:!1},href:{rules:[38,39],inclusive:!1},struct:{rules:[16,17,18,19,20],inclusive:!1},generic:{rules:[29,30],inclusive:!1},bqstring:{rules:[35,36],inclusive:!1},string:{rules:[32,33],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,9,10,11,12,13,14,15,21,22,23,24,25,26,27,28,31,34,37,40,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71],inclusive:!0}}};function P(){this.yy={}}return R.lexer=F,P.prototype=R,R.Parser=P,new P}();e.parser=r,e.Parser=r.Parser,e.parse=function(){return r.parse.apply(r,arguments)},e.main=function(t){t[1]||(console.log("Usage: "+t[0]+" FILE"),process.exit(1));var r=n(8218).readFileSync(n(6470).normalize(t[1]),"utf8");return e.parser.parse(r)},n.c[n.s]===t&&e.main(process.argv.slice(1))},5890:(t,e,n)=>{t=n.nmd(t);var r=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,2],n=[1,5],r=[6,9,11,23,41],i=[1,17],a=[1,20],o=[1,25],s=[1,26],c=[1,27],u=[1,28],l=[1,37],h=[23,38,39],f=[4,6,9,11,23,41],d=[34,35,36,37],p=[22,29],y=[1,55],g={trace:function(){},yy:{},symbols_:{error:2,start:3,ER_DIAGRAM:4,document:5,EOF:6,directive:7,line:8,SPACE:9,statement:10,NEWLINE:11,openDirective:12,typeDirective:13,closeDirective:14,":":15,argDirective:16,entityName:17,relSpec:18,role:19,BLOCK_START:20,attributes:21,BLOCK_STOP:22,ALPHANUM:23,attribute:24,attributeType:25,attributeName:26,attributeKeyType:27,attributeComment:28,ATTRIBUTE_WORD:29,ATTRIBUTE_KEY:30,COMMENT:31,cardinality:32,relType:33,ZERO_OR_ONE:34,ZERO_OR_MORE:35,ONE_OR_MORE:36,ONLY_ONE:37,NON_IDENTIFYING:38,IDENTIFYING:39,WORD:40,open_directive:41,type_directive:42,arg_directive:43,close_directive:44,$accept:0,$end:1},terminals_:{2:"error",4:"ER_DIAGRAM",6:"EOF",9:"SPACE",11:"NEWLINE",15:":",20:"BLOCK_START",22:"BLOCK_STOP",23:"ALPHANUM",29:"ATTRIBUTE_WORD",30:"ATTRIBUTE_KEY",31:"COMMENT",34:"ZERO_OR_ONE",35:"ZERO_OR_MORE",36:"ONE_OR_MORE",37:"ONLY_ONE",38:"NON_IDENTIFYING",39:"IDENTIFYING",40:"WORD",41:"open_directive",42:"type_directive",43:"arg_directive",44:"close_directive"},productions_:[0,[3,3],[3,2],[5,0],[5,2],[8,2],[8,1],[8,1],[8,1],[7,4],[7,6],[10,1],[10,5],[10,4],[10,3],[10,1],[17,1],[21,1],[21,2],[24,2],[24,3],[24,3],[24,4],[25,1],[26,1],[27,1],[28,1],[18,3],[32,1],[32,1],[32,1],[32,1],[33,1],[33,1],[19,1],[19,1],[12,1],[13,1],[16,1],[14,1]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 1:break;case 3:case 7:case 8:this.$=[];break;case 4:a[s-1].push(a[s]),this.$=a[s-1];break;case 5:case 6:case 16:case 23:case 24:case 25:case 35:this.$=a[s];break;case 12:r.addEntity(a[s-4]),r.addEntity(a[s-2]),r.addRelationship(a[s-4],a[s],a[s-2],a[s-3]);break;case 13:r.addEntity(a[s-3]),r.addAttributes(a[s-3],a[s-1]);break;case 14:r.addEntity(a[s-2]);break;case 15:r.addEntity(a[s]);break;case 17:this.$=[a[s]];break;case 18:a[s].push(a[s-1]),this.$=a[s];break;case 19:this.$={attributeType:a[s-1],attributeName:a[s]};break;case 20:this.$={attributeType:a[s-2],attributeName:a[s-1],attributeKeyType:a[s]};break;case 21:this.$={attributeType:a[s-2],attributeName:a[s-1],attributeComment:a[s]};break;case 22:this.$={attributeType:a[s-3],attributeName:a[s-2],attributeKeyType:a[s-1],attributeComment:a[s]};break;case 26:case 34:this.$=a[s].replace(/"/g,"");break;case 27:this.$={cardA:a[s],relType:a[s-1],cardB:a[s-2]};break;case 28:this.$=r.Cardinality.ZERO_OR_ONE;break;case 29:this.$=r.Cardinality.ZERO_OR_MORE;break;case 30:this.$=r.Cardinality.ONE_OR_MORE;break;case 31:this.$=r.Cardinality.ONLY_ONE;break;case 32:this.$=r.Identification.NON_IDENTIFYING;break;case 33:this.$=r.Identification.IDENTIFYING;break;case 36:r.parseDirective("%%{","open_directive");break;case 37:r.parseDirective(a[s],"type_directive");break;case 38:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 39:r.parseDirective("}%%","close_directive","er")}},table:[{3:1,4:e,7:3,12:4,41:n},{1:[3]},t(r,[2,3],{5:6}),{3:7,4:e,7:3,12:4,41:n},{13:8,42:[1,9]},{42:[2,36]},{6:[1,10],7:15,8:11,9:[1,12],10:13,11:[1,14],12:4,17:16,23:i,41:n},{1:[2,2]},{14:18,15:[1,19],44:a},t([15,44],[2,37]),t(r,[2,8],{1:[2,1]}),t(r,[2,4]),{7:15,10:21,12:4,17:16,23:i,41:n},t(r,[2,6]),t(r,[2,7]),t(r,[2,11]),t(r,[2,15],{18:22,32:24,20:[1,23],34:o,35:s,36:c,37:u}),t([6,9,11,15,20,23,34,35,36,37,41],[2,16]),{11:[1,29]},{16:30,43:[1,31]},{11:[2,39]},t(r,[2,5]),{17:32,23:i},{21:33,22:[1,34],24:35,25:36,29:l},{33:38,38:[1,39],39:[1,40]},t(h,[2,28]),t(h,[2,29]),t(h,[2,30]),t(h,[2,31]),t(f,[2,9]),{14:41,44:a},{44:[2,38]},{15:[1,42]},{22:[1,43]},t(r,[2,14]),{21:44,22:[2,17],24:35,25:36,29:l},{26:45,29:[1,46]},{29:[2,23]},{32:47,34:o,35:s,36:c,37:u},t(d,[2,32]),t(d,[2,33]),{11:[1,48]},{19:49,23:[1,51],40:[1,50]},t(r,[2,13]),{22:[2,18]},t(p,[2,19],{27:52,28:53,30:[1,54],31:y}),t([22,29,30,31],[2,24]),{23:[2,27]},t(f,[2,10]),t(r,[2,12]),t(r,[2,34]),t(r,[2,35]),t(p,[2,20],{28:56,31:y}),t(p,[2,21]),t([22,29,31],[2,25]),t(p,[2,26]),t(p,[2,22])],defaultActions:{5:[2,36],7:[2,2],20:[2,39],31:[2,38],37:[2,23],44:[2,18],47:[2,27]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),y={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(y.yy[g]=this.yy[g]);p.setInput(t,y.yy),y.yy.lexer=p,y.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var m=p.yylloc;a.push(m);var v=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var _,x,w,k,T,E,C,S,A,M={};;){if(w=n[n.length-1],this.defaultActions[w]?k=this.defaultActions[w]:(null==_&&(_=b()),k=o[w]&&o[w][_]),void 0===k||!k.length||!k[0]){var N="";for(E in A=[],o[w])this.terminals_[E]&&E>h&&A.push("'"+this.terminals_[E]+"'");N=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[_]||_)+"'":"Parse error on line "+(c+1)+": Unexpected "+(_==f?"end of input":"'"+(this.terminals_[_]||_)+"'"),this.parseError(N,{text:p.match,token:this.terminals_[_]||_,line:p.yylineno,loc:m,expected:A})}if(k[0]instanceof Array&&k.length>1)throw new Error("Parse Error: multiple actions possible at state: "+w+", token: "+_);switch(k[0]){case 1:n.push(_),i.push(p.yytext),a.push(p.yylloc),n.push(k[1]),_=null,x?(_=x,x=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,m=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[k[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},v&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(T=this.performAction.apply(M,[s,u,c,y.yy,k[1],i,a].concat(d))))return T;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[k[1]][0]),i.push(M.$),a.push(M._$),S=o[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},m={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){return this.next()||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),41;case 1:return this.begin("type_directive"),42;case 2:return this.popState(),this.begin("arg_directive"),15;case 3:return this.popState(),this.popState(),44;case 4:return 43;case 5:case 6:case 8:case 13:case 17:break;case 7:return 11;case 9:return 9;case 10:return 40;case 11:return 4;case 12:return this.begin("block"),20;case 14:return 30;case 15:return 29;case 16:return 31;case 18:return this.popState(),22;case 19:case 32:return e.yytext[0];case 20:case 24:return 34;case 21:case 25:return 35;case 22:case 26:return 36;case 23:return 37;case 27:case 29:case 30:return 38;case 28:return 39;case 31:return 23;case 33:return 6}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:[\s]+)/i,/^(?:"[^"]*")/i,/^(?:erDiagram\b)/i,/^(?:\{)/i,/^(?:\s+)/i,/^(?:(?:PK)|(?:FK))/i,/^(?:[A-Za-z][A-Za-z0-9\-_]*)/i,/^(?:"[^"]*")/i,/^(?:[\n]+)/i,/^(?:\})/i,/^(?:.)/i,/^(?:\|o\b)/i,/^(?:\}o\b)/i,/^(?:\}\|)/i,/^(?:\|\|)/i,/^(?:o\|)/i,/^(?:o\{)/i,/^(?:\|\{)/i,/^(?:\.\.)/i,/^(?:--)/i,/^(?:\.-)/i,/^(?:-\.)/i,/^(?:[A-Za-z][A-Za-z0-9\-_]*)/i,/^(?:.)/i,/^(?:$)/i],conditions:{open_directive:{rules:[1],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},block:{rules:[13,14,15,16,17,18,19],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,11,12,20,21,22,23,24,25,26,27,28,29,30,31,32,33],inclusive:!0}}};function v(){this.yy={}}return g.lexer=m,v.prototype=g,g.Parser=v,new v}();e.parser=r,e.Parser=r.Parser,e.parse=function(){return r.parse.apply(r,arguments)},e.main=function(t){t[1]||(console.log("Usage: "+t[0]+" FILE"),process.exit(1));var r=n(8009).readFileSync(n(6470).normalize(t[1]),"utf8");return e.parser.parse(r)},n.c[n.s]===t&&e.main(process.argv.slice(1))},3602:(t,e,n)=>{t=n.nmd(t);var r=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,9],n=[1,7],r=[1,6],i=[1,8],a=[1,20,21,22,23,38,47,59,60,79,80,81,82,83,84,88,98,99,102,104,105,111,112,113,114,115,116,117,118,119,120],o=[2,10],s=[1,20],c=[1,21],u=[1,22],l=[1,23],h=[1,30],f=[1,59],d=[1,45],p=[1,49],y=[1,33],g=[1,34],m=[1,35],v=[1,36],b=[1,37],_=[1,53],x=[1,60],w=[1,48],k=[1,50],T=[1,52],E=[1,56],C=[1,57],S=[1,38],A=[1,39],M=[1,40],N=[1,41],D=[1,58],O=[1,47],B=[1,51],L=[1,54],I=[1,55],R=[1,46],F=[1,63],P=[1,68],j=[1,20,21,22,23,38,42,47,59,60,79,80,81,82,83,84,88,98,99,102,104,105,111,112,113,114,115,116,117,118,119,120],Y=[1,72],z=[1,71],U=[1,73],q=[20,21,23,74,75],H=[1,94],$=[1,99],W=[1,102],V=[1,103],G=[1,96],X=[1,101],Z=[1,104],Q=[1,97],K=[1,109],J=[1,108],tt=[1,98],et=[1,100],nt=[1,105],rt=[1,106],it=[1,107],at=[1,110],ot=[20,21,22,23,74,75],st=[20,21,22,23,48,74,75],ct=[20,21,22,23,40,47,48,50,52,54,56,58,59,60,62,64,66,67,69,74,75,84,88,98,99,102,104,105,115,116,117,118,119,120],ut=[20,21,23],lt=[20,21,23,47,59,60,74,75,84,88,98,99,102,104,105,115,116,117,118,119,120],ht=[1,12,20,21,22,23,24,38,42,47,59,60,79,80,81,82,83,84,88,98,99,102,104,105,111,112,113,114,115,116,117,118,119,120],ft=[47,59,60,84,88,98,99,102,104,105,115,116,117,118,119,120],dt=[1,143],pt=[1,151],yt=[1,152],gt=[1,153],mt=[1,154],vt=[1,138],bt=[1,139],_t=[1,135],xt=[1,146],wt=[1,147],kt=[1,148],Tt=[1,149],Et=[1,150],Ct=[1,155],St=[1,156],At=[1,141],Mt=[1,144],Nt=[1,140],Dt=[1,137],Ot=[20,21,22,23,38,42,47,59,60,79,80,81,82,83,84,88,98,99,102,104,105,111,112,113,114,115,116,117,118,119,120],Bt=[1,159],Lt=[20,21,22,23,26,47,59,60,84,98,99,102,104,105,115,116,117,118,119,120],It=[20,21,22,23,24,26,38,40,41,42,47,51,53,55,57,59,60,61,63,65,66,68,70,74,75,79,80,81,82,83,84,85,88,98,99,102,104,105,106,107,115,116,117,118,119,120],Rt=[12,21,22,24],Ft=[22,99],Pt=[1,242],jt=[1,237],Yt=[1,238],zt=[1,246],Ut=[1,243],qt=[1,240],Ht=[1,239],$t=[1,241],Wt=[1,244],Vt=[1,245],Gt=[1,247],Xt=[1,265],Zt=[20,21,23,99],Qt=[20,21,22,23,59,60,79,95,98,99,102,103,104,105,106],Kt={trace:function(){},yy:{},symbols_:{error:2,start:3,mermaidDoc:4,directive:5,openDirective:6,typeDirective:7,closeDirective:8,separator:9,":":10,argDirective:11,open_directive:12,type_directive:13,arg_directive:14,close_directive:15,graphConfig:16,document:17,line:18,statement:19,SEMI:20,NEWLINE:21,SPACE:22,EOF:23,GRAPH:24,NODIR:25,DIR:26,FirstStmtSeperator:27,ending:28,endToken:29,spaceList:30,spaceListNewline:31,verticeStatement:32,styleStatement:33,linkStyleStatement:34,classDefStatement:35,classStatement:36,clickStatement:37,subgraph:38,text:39,SQS:40,SQE:41,end:42,direction:43,link:44,node:45,vertex:46,AMP:47,STYLE_SEPARATOR:48,idString:49,PS:50,PE:51,"(-":52,"-)":53,STADIUMSTART:54,STADIUMEND:55,SUBROUTINESTART:56,SUBROUTINEEND:57,VERTEX_WITH_PROPS_START:58,ALPHA:59,COLON:60,PIPE:61,CYLINDERSTART:62,CYLINDEREND:63,DIAMOND_START:64,DIAMOND_STOP:65,TAGEND:66,TRAPSTART:67,TRAPEND:68,INVTRAPSTART:69,INVTRAPEND:70,linkStatement:71,arrowText:72,TESTSTR:73,START_LINK:74,LINK:75,textToken:76,STR:77,keywords:78,STYLE:79,LINKSTYLE:80,CLASSDEF:81,CLASS:82,CLICK:83,DOWN:84,UP:85,textNoTags:86,textNoTagsToken:87,DEFAULT:88,stylesOpt:89,alphaNum:90,CALLBACKNAME:91,CALLBACKARGS:92,HREF:93,LINK_TARGET:94,HEX:95,numList:96,INTERPOLATE:97,NUM:98,COMMA:99,style:100,styleComponent:101,MINUS:102,UNIT:103,BRKT:104,DOT:105,PCT:106,TAGSTART:107,alphaNumToken:108,idStringToken:109,alphaNumStatement:110,direction_tb:111,direction_bt:112,direction_rl:113,direction_lr:114,PUNCTUATION:115,UNICODE_TEXT:116,PLUS:117,EQUALS:118,MULT:119,UNDERSCORE:120,graphCodeTokens:121,ARROW_CROSS:122,ARROW_POINT:123,ARROW_CIRCLE:124,ARROW_OPEN:125,QUOTE:126,$accept:0,$end:1},terminals_:{2:"error",10:":",12:"open_directive",13:"type_directive",14:"arg_directive",15:"close_directive",20:"SEMI",21:"NEWLINE",22:"SPACE",23:"EOF",24:"GRAPH",25:"NODIR",26:"DIR",38:"subgraph",40:"SQS",41:"SQE",42:"end",47:"AMP",48:"STYLE_SEPARATOR",50:"PS",51:"PE",52:"(-",53:"-)",54:"STADIUMSTART",55:"STADIUMEND",56:"SUBROUTINESTART",57:"SUBROUTINEEND",58:"VERTEX_WITH_PROPS_START",59:"ALPHA",60:"COLON",61:"PIPE",62:"CYLINDERSTART",63:"CYLINDEREND",64:"DIAMOND_START",65:"DIAMOND_STOP",66:"TAGEND",67:"TRAPSTART",68:"TRAPEND",69:"INVTRAPSTART",70:"INVTRAPEND",73:"TESTSTR",74:"START_LINK",75:"LINK",77:"STR",79:"STYLE",80:"LINKSTYLE",81:"CLASSDEF",82:"CLASS",83:"CLICK",84:"DOWN",85:"UP",88:"DEFAULT",91:"CALLBACKNAME",92:"CALLBACKARGS",93:"HREF",94:"LINK_TARGET",95:"HEX",97:"INTERPOLATE",98:"NUM",99:"COMMA",102:"MINUS",103:"UNIT",104:"BRKT",105:"DOT",106:"PCT",107:"TAGSTART",111:"direction_tb",112:"direction_bt",113:"direction_rl",114:"direction_lr",115:"PUNCTUATION",116:"UNICODE_TEXT",117:"PLUS",118:"EQUALS",119:"MULT",120:"UNDERSCORE",122:"ARROW_CROSS",123:"ARROW_POINT",124:"ARROW_CIRCLE",125:"ARROW_OPEN",126:"QUOTE"},productions_:[0,[3,1],[3,2],[5,4],[5,6],[6,1],[7,1],[11,1],[8,1],[4,2],[17,0],[17,2],[18,1],[18,1],[18,1],[18,1],[18,1],[16,2],[16,2],[16,2],[16,3],[28,2],[28,1],[29,1],[29,1],[29,1],[27,1],[27,1],[27,2],[31,2],[31,2],[31,1],[31,1],[30,2],[30,1],[19,2],[19,2],[19,2],[19,2],[19,2],[19,2],[19,9],[19,6],[19,4],[19,1],[9,1],[9,1],[9,1],[32,3],[32,4],[32,2],[32,1],[45,1],[45,5],[45,3],[46,4],[46,6],[46,4],[46,4],[46,4],[46,8],[46,4],[46,4],[46,4],[46,6],[46,4],[46,4],[46,4],[46,4],[46,4],[46,1],[44,2],[44,3],[44,3],[44,1],[44,3],[71,1],[72,3],[39,1],[39,2],[39,1],[78,1],[78,1],[78,1],[78,1],[78,1],[78,1],[78,1],[78,1],[78,1],[78,1],[78,1],[86,1],[86,2],[35,5],[35,5],[36,5],[37,2],[37,4],[37,3],[37,5],[37,2],[37,4],[37,4],[37,6],[37,2],[37,4],[37,2],[37,4],[37,4],[37,6],[33,5],[33,5],[34,5],[34,5],[34,9],[34,9],[34,7],[34,7],[96,1],[96,3],[89,1],[89,3],[100,1],[100,2],[101,1],[101,1],[101,1],[101,1],[101,1],[101,1],[101,1],[101,1],[101,1],[101,1],[101,1],[76,1],[76,1],[76,1],[76,1],[76,1],[76,1],[87,1],[87,1],[87,1],[87,1],[49,1],[49,2],[90,1],[90,2],[110,1],[110,1],[110,1],[110,1],[43,1],[43,1],[43,1],[43,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[109,1],[109,1],[109,1],[109,1],[109,1],[109,1],[109,1],[109,1],[109,1],[109,1],[109,1],[109,1],[109,1],[109,1],[109,1],[109,1],[121,1],[121,1],[121,1],[121,1],[121,1],[121,1],[121,1],[121,1],[121,1],[121,1],[121,1],[121,1],[121,1],[121,1],[121,1],[121,1],[121,1],[121,1],[121,1],[121,1],[121,1],[121,1],[121,1],[121,1],[121,1],[121,1]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 5:r.parseDirective("%%{","open_directive");break;case 6:r.parseDirective(a[s],"type_directive");break;case 7:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 8:r.parseDirective("}%%","close_directive","flowchart");break;case 10:case 36:case 37:case 38:case 39:case 40:this.$=[];break;case 11:a[s]!==[]&&a[s-1].push(a[s]),this.$=a[s-1];break;case 12:case 78:case 80:case 92:case 148:case 150:case 151:case 74:case 146:this.$=a[s];break;case 19:r.setDirection("TB"),this.$="TB";break;case 20:r.setDirection(a[s-1]),this.$=a[s-1];break;case 35:this.$=a[s-1].nodes;break;case 41:this.$=r.addSubGraph(a[s-6],a[s-1],a[s-4]);break;case 42:this.$=r.addSubGraph(a[s-3],a[s-1],a[s-3]);break;case 43:this.$=r.addSubGraph(void 0,a[s-1],void 0);break;case 48:r.addLink(a[s-2].stmt,a[s],a[s-1]),this.$={stmt:a[s],nodes:a[s].concat(a[s-2].nodes)};break;case 49:r.addLink(a[s-3].stmt,a[s-1],a[s-2]),this.$={stmt:a[s-1],nodes:a[s-1].concat(a[s-3].nodes)};break;case 50:this.$={stmt:a[s-1],nodes:a[s-1]};break;case 51:this.$={stmt:a[s],nodes:a[s]};break;case 52:case 119:case 121:this.$=[a[s]];break;case 53:this.$=a[s-4].concat(a[s]);break;case 54:this.$=[a[s-2]],r.setClass(a[s-2],a[s]);break;case 55:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"square");break;case 56:this.$=a[s-5],r.addVertex(a[s-5],a[s-2],"circle");break;case 57:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"ellipse");break;case 58:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"stadium");break;case 59:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"subroutine");break;case 60:this.$=a[s-7],r.addVertex(a[s-7],a[s-1],"rect",void 0,void 0,void 0,Object.fromEntries([[a[s-5],a[s-3]]]));break;case 61:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"cylinder");break;case 62:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"round");break;case 63:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"diamond");break;case 64:this.$=a[s-5],r.addVertex(a[s-5],a[s-2],"hexagon");break;case 65:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"odd");break;case 66:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"trapezoid");break;case 67:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"inv_trapezoid");break;case 68:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"lean_right");break;case 69:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"lean_left");break;case 70:this.$=a[s],r.addVertex(a[s]);break;case 71:a[s-1].text=a[s],this.$=a[s-1];break;case 72:case 73:a[s-2].text=a[s-1],this.$=a[s-2];break;case 75:var c=r.destructLink(a[s],a[s-2]);this.$={type:c.type,stroke:c.stroke,length:c.length,text:a[s-1]};break;case 76:c=r.destructLink(a[s]),this.$={type:c.type,stroke:c.stroke,length:c.length};break;case 77:this.$=a[s-1];break;case 79:case 93:case 149:case 147:this.$=a[s-1]+""+a[s];break;case 94:case 95:this.$=a[s-4],r.addClass(a[s-2],a[s]);break;case 96:this.$=a[s-4],r.setClass(a[s-2],a[s]);break;case 97:case 105:this.$=a[s-1],r.setClickEvent(a[s-1],a[s]);break;case 98:case 106:this.$=a[s-3],r.setClickEvent(a[s-3],a[s-2]),r.setTooltip(a[s-3],a[s]);break;case 99:this.$=a[s-2],r.setClickEvent(a[s-2],a[s-1],a[s]);break;case 100:this.$=a[s-4],r.setClickEvent(a[s-4],a[s-3],a[s-2]),r.setTooltip(a[s-4],a[s]);break;case 101:case 107:this.$=a[s-1],r.setLink(a[s-1],a[s]);break;case 102:case 108:this.$=a[s-3],r.setLink(a[s-3],a[s-2]),r.setTooltip(a[s-3],a[s]);break;case 103:case 109:this.$=a[s-3],r.setLink(a[s-3],a[s-2],a[s]);break;case 104:case 110:this.$=a[s-5],r.setLink(a[s-5],a[s-4],a[s]),r.setTooltip(a[s-5],a[s-2]);break;case 111:this.$=a[s-4],r.addVertex(a[s-2],void 0,void 0,a[s]);break;case 112:case 114:this.$=a[s-4],r.updateLink(a[s-2],a[s]);break;case 113:this.$=a[s-4],r.updateLink([a[s-2]],a[s]);break;case 115:this.$=a[s-8],r.updateLinkInterpolate([a[s-6]],a[s-2]),r.updateLink([a[s-6]],a[s]);break;case 116:this.$=a[s-8],r.updateLinkInterpolate(a[s-6],a[s-2]),r.updateLink(a[s-6],a[s]);break;case 117:this.$=a[s-6],r.updateLinkInterpolate([a[s-4]],a[s]);break;case 118:this.$=a[s-6],r.updateLinkInterpolate(a[s-4],a[s]);break;case 120:case 122:a[s-2].push(a[s]),this.$=a[s-2];break;case 124:this.$=a[s-1]+a[s];break;case 152:this.$="v";break;case 153:this.$="-";break;case 154:this.$={stmt:"dir",value:"TB"};break;case 155:this.$={stmt:"dir",value:"BT"};break;case 156:this.$={stmt:"dir",value:"RL"};break;case 157:this.$={stmt:"dir",value:"LR"}}},table:[{3:1,4:2,5:3,6:5,12:e,16:4,21:n,22:r,24:i},{1:[3]},{1:[2,1]},{3:10,4:2,5:3,6:5,12:e,16:4,21:n,22:r,24:i},t(a,o,{17:11}),{7:12,13:[1,13]},{16:14,21:n,22:r,24:i},{16:15,21:n,22:r,24:i},{25:[1,16],26:[1,17]},{13:[2,5]},{1:[2,2]},{1:[2,9],18:18,19:19,20:s,21:c,22:u,23:l,32:24,33:25,34:26,35:27,36:28,37:29,38:h,43:31,45:32,46:42,47:f,49:43,59:d,60:p,79:y,80:g,81:m,82:v,83:b,84:_,88:x,98:w,99:k,102:T,104:E,105:C,109:44,111:S,112:A,113:M,114:N,115:D,116:O,117:B,118:L,119:I,120:R},{8:61,10:[1,62],15:F},t([10,15],[2,6]),t(a,[2,17]),t(a,[2,18]),t(a,[2,19]),{20:[1,65],21:[1,66],22:P,27:64,30:67},t(j,[2,11]),t(j,[2,12]),t(j,[2,13]),t(j,[2,14]),t(j,[2,15]),t(j,[2,16]),{9:69,20:Y,21:z,23:U,44:70,71:74,74:[1,75],75:[1,76]},{9:77,20:Y,21:z,23:U},{9:78,20:Y,21:z,23:U},{9:79,20:Y,21:z,23:U},{9:80,20:Y,21:z,23:U},{9:81,20:Y,21:z,23:U},{9:83,20:Y,21:z,22:[1,82],23:U},t(j,[2,44]),t(q,[2,51],{30:84,22:P}),{22:[1,85]},{22:[1,86]},{22:[1,87]},{22:[1,88]},{26:H,47:$,59:W,60:V,77:[1,92],84:G,90:91,91:[1,89],93:[1,90],98:X,99:Z,102:Q,104:K,105:J,108:95,110:93,115:tt,116:et,117:nt,118:rt,119:it,120:at},t(j,[2,154]),t(j,[2,155]),t(j,[2,156]),t(j,[2,157]),t(ot,[2,52],{48:[1,111]}),t(st,[2,70],{109:123,40:[1,112],47:f,50:[1,113],52:[1,114],54:[1,115],56:[1,116],58:[1,117],59:d,60:p,62:[1,118],64:[1,119],66:[1,120],67:[1,121],69:[1,122],84:_,88:x,98:w,99:k,102:T,104:E,105:C,115:D,116:O,117:B,118:L,119:I,120:R}),t(ct,[2,146]),t(ct,[2,171]),t(ct,[2,172]),t(ct,[2,173]),t(ct,[2,174]),t(ct,[2,175]),t(ct,[2,176]),t(ct,[2,177]),t(ct,[2,178]),t(ct,[2,179]),t(ct,[2,180]),t(ct,[2,181]),t(ct,[2,182]),t(ct,[2,183]),t(ct,[2,184]),t(ct,[2,185]),t(ct,[2,186]),{9:124,20:Y,21:z,23:U},{11:125,14:[1,126]},t(ut,[2,8]),t(a,[2,20]),t(a,[2,26]),t(a,[2,27]),{21:[1,127]},t(lt,[2,34],{30:128,22:P}),t(j,[2,35]),{45:129,46:42,47:f,49:43,59:d,60:p,84:_,88:x,98:w,99:k,102:T,104:E,105:C,109:44,115:D,116:O,117:B,118:L,119:I,120:R},t(ht,[2,45]),t(ht,[2,46]),t(ht,[2,47]),t(ft,[2,74],{72:130,61:[1,132],73:[1,131]}),{22:dt,24:pt,26:yt,38:gt,39:133,42:mt,47:$,59:W,60:V,66:vt,74:bt,76:134,77:_t,78:145,79:xt,80:wt,81:kt,82:Tt,83:Et,84:Ct,85:St,87:136,88:At,98:X,99:Z,102:Mt,104:K,105:J,106:Nt,107:Dt,108:142,115:tt,116:et,117:nt,118:rt,119:it,120:at},t([47,59,60,61,73,84,88,98,99,102,104,105,115,116,117,118,119,120],[2,76]),t(j,[2,36]),t(j,[2,37]),t(j,[2,38]),t(j,[2,39]),t(j,[2,40]),{22:dt,24:pt,26:yt,38:gt,39:157,42:mt,47:$,59:W,60:V,66:vt,74:bt,76:134,77:_t,78:145,79:xt,80:wt,81:kt,82:Tt,83:Et,84:Ct,85:St,87:136,88:At,98:X,99:Z,102:Mt,104:K,105:J,106:Nt,107:Dt,108:142,115:tt,116:et,117:nt,118:rt,119:it,120:at},t(Ot,o,{17:158}),t(q,[2,50],{47:Bt}),{26:H,47:$,59:W,60:V,84:G,90:160,95:[1,161],98:X,99:Z,102:Q,104:K,105:J,108:95,110:93,115:tt,116:et,117:nt,118:rt,119:it,120:at},{88:[1,162],96:163,98:[1,164]},{26:H,47:$,59:W,60:V,84:G,88:[1,165],90:166,98:X,99:Z,102:Q,104:K,105:J,108:95,110:93,115:tt,116:et,117:nt,118:rt,119:it,120:at},{26:H,47:$,59:W,60:V,84:G,90:167,98:X,99:Z,102:Q,104:K,105:J,108:95,110:93,115:tt,116:et,117:nt,118:rt,119:it,120:at},t(ut,[2,97],{22:[1,168],92:[1,169]}),t(ut,[2,101],{22:[1,170]}),t(ut,[2,105],{108:95,110:172,22:[1,171],26:H,47:$,59:W,60:V,84:G,98:X,99:Z,102:Q,104:K,105:J,115:tt,116:et,117:nt,118:rt,119:it,120:at}),t(ut,[2,107],{22:[1,173]}),t(Lt,[2,148]),t(Lt,[2,150]),t(Lt,[2,151]),t(Lt,[2,152]),t(Lt,[2,153]),t(It,[2,158]),t(It,[2,159]),t(It,[2,160]),t(It,[2,161]),t(It,[2,162]),t(It,[2,163]),t(It,[2,164]),t(It,[2,165]),t(It,[2,166]),t(It,[2,167]),t(It,[2,168]),t(It,[2,169]),t(It,[2,170]),{47:f,49:174,59:d,60:p,84:_,88:x,98:w,99:k,102:T,104:E,105:C,109:44,115:D,116:O,117:B,118:L,119:I,120:R},{22:dt,24:pt,26:yt,38:gt,39:175,42:mt,47:$,59:W,60:V,66:vt,74:bt,76:134,77:_t,78:145,79:xt,80:wt,81:kt,82:Tt,83:Et,84:Ct,85:St,87:136,88:At,98:X,99:Z,102:Mt,104:K,105:J,106:Nt,107:Dt,108:142,115:tt,116:et,117:nt,118:rt,119:it,120:at},{22:dt,24:pt,26:yt,38:gt,39:177,42:mt,47:$,50:[1,176],59:W,60:V,66:vt,74:bt,76:134,77:_t,78:145,79:xt,80:wt,81:kt,82:Tt,83:Et,84:Ct,85:St,87:136,88:At,98:X,99:Z,102:Mt,104:K,105:J,106:Nt,107:Dt,108:142,115:tt,116:et,117:nt,118:rt,119:it,120:at},{22:dt,24:pt,26:yt,38:gt,39:178,42:mt,47:$,59:W,60:V,66:vt,74:bt,76:134,77:_t,78:145,79:xt,80:wt,81:kt,82:Tt,83:Et,84:Ct,85:St,87:136,88:At,98:X,99:Z,102:Mt,104:K,105:J,106:Nt,107:Dt,108:142,115:tt,116:et,117:nt,118:rt,119:it,120:at},{22:dt,24:pt,26:yt,38:gt,39:179,42:mt,47:$,59:W,60:V,66:vt,74:bt,76:134,77:_t,78:145,79:xt,80:wt,81:kt,82:Tt,83:Et,84:Ct,85:St,87:136,88:At,98:X,99:Z,102:Mt,104:K,105:J,106:Nt,107:Dt,108:142,115:tt,116:et,117:nt,118:rt,119:it,120:at},{22:dt,24:pt,26:yt,38:gt,39:180,42:mt,47:$,59:W,60:V,66:vt,74:bt,76:134,77:_t,78:145,79:xt,80:wt,81:kt,82:Tt,83:Et,84:Ct,85:St,87:136,88:At,98:X,99:Z,102:Mt,104:K,105:J,106:Nt,107:Dt,108:142,115:tt,116:et,117:nt,118:rt,119:it,120:at},{59:[1,181]},{22:dt,24:pt,26:yt,38:gt,39:182,42:mt,47:$,59:W,60:V,66:vt,74:bt,76:134,77:_t,78:145,79:xt,80:wt,81:kt,82:Tt,83:Et,84:Ct,85:St,87:136,88:At,98:X,99:Z,102:Mt,104:K,105:J,106:Nt,107:Dt,108:142,115:tt,116:et,117:nt,118:rt,119:it,120:at},{22:dt,24:pt,26:yt,38:gt,39:183,42:mt,47:$,59:W,60:V,64:[1,184],66:vt,74:bt,76:134,77:_t,78:145,79:xt,80:wt,81:kt,82:Tt,83:Et,84:Ct,85:St,87:136,88:At,98:X,99:Z,102:Mt,104:K,105:J,106:Nt,107:Dt,108:142,115:tt,116:et,117:nt,118:rt,119:it,120:at},{22:dt,24:pt,26:yt,38:gt,39:185,42:mt,47:$,59:W,60:V,66:vt,74:bt,76:134,77:_t,78:145,79:xt,80:wt,81:kt,82:Tt,83:Et,84:Ct,85:St,87:136,88:At,98:X,99:Z,102:Mt,104:K,105:J,106:Nt,107:Dt,108:142,115:tt,116:et,117:nt,118:rt,119:it,120:at},{22:dt,24:pt,26:yt,38:gt,39:186,42:mt,47:$,59:W,60:V,66:vt,74:bt,76:134,77:_t,78:145,79:xt,80:wt,81:kt,82:Tt,83:Et,84:Ct,85:St,87:136,88:At,98:X,99:Z,102:Mt,104:K,105:J,106:Nt,107:Dt,108:142,115:tt,116:et,117:nt,118:rt,119:it,120:at},{22:dt,24:pt,26:yt,38:gt,39:187,42:mt,47:$,59:W,60:V,66:vt,74:bt,76:134,77:_t,78:145,79:xt,80:wt,81:kt,82:Tt,83:Et,84:Ct,85:St,87:136,88:At,98:X,99:Z,102:Mt,104:K,105:J,106:Nt,107:Dt,108:142,115:tt,116:et,117:nt,118:rt,119:it,120:at},t(ct,[2,147]),t(Rt,[2,3]),{8:188,15:F},{15:[2,7]},t(a,[2,28]),t(lt,[2,33]),t(q,[2,48],{30:189,22:P}),t(ft,[2,71],{22:[1,190]}),{22:[1,191]},{22:dt,24:pt,26:yt,38:gt,39:192,42:mt,47:$,59:W,60:V,66:vt,74:bt,76:134,77:_t,78:145,79:xt,80:wt,81:kt,82:Tt,83:Et,84:Ct,85:St,87:136,88:At,98:X,99:Z,102:Mt,104:K,105:J,106:Nt,107:Dt,108:142,115:tt,116:et,117:nt,118:rt,119:it,120:at},{22:dt,24:pt,26:yt,38:gt,42:mt,47:$,59:W,60:V,66:vt,74:bt,75:[1,193],76:194,78:145,79:xt,80:wt,81:kt,82:Tt,83:Et,84:Ct,85:St,87:136,88:At,98:X,99:Z,102:Mt,104:K,105:J,106:Nt,107:Dt,108:142,115:tt,116:et,117:nt,118:rt,119:it,120:at},t(It,[2,78]),t(It,[2,80]),t(It,[2,136]),t(It,[2,137]),t(It,[2,138]),t(It,[2,139]),t(It,[2,140]),t(It,[2,141]),t(It,[2,142]),t(It,[2,143]),t(It,[2,144]),t(It,[2,145]),t(It,[2,81]),t(It,[2,82]),t(It,[2,83]),t(It,[2,84]),t(It,[2,85]),t(It,[2,86]),t(It,[2,87]),t(It,[2,88]),t(It,[2,89]),t(It,[2,90]),t(It,[2,91]),{9:196,20:Y,21:z,22:dt,23:U,24:pt,26:yt,38:gt,40:[1,195],42:mt,47:$,59:W,60:V,66:vt,74:bt,76:194,78:145,79:xt,80:wt,81:kt,82:Tt,83:Et,84:Ct,85:St,87:136,88:At,98:X,99:Z,102:Mt,104:K,105:J,106:Nt,107:Dt,108:142,115:tt,116:et,117:nt,118:rt,119:it,120:at},{18:18,19:19,20:s,21:c,22:u,23:l,32:24,33:25,34:26,35:27,36:28,37:29,38:h,42:[1,197],43:31,45:32,46:42,47:f,49:43,59:d,60:p,79:y,80:g,81:m,82:v,83:b,84:_,88:x,98:w,99:k,102:T,104:E,105:C,109:44,111:S,112:A,113:M,114:N,115:D,116:O,117:B,118:L,119:I,120:R},{22:P,30:198},{22:[1,199],26:H,47:$,59:W,60:V,84:G,98:X,99:Z,102:Q,104:K,105:J,108:95,110:172,115:tt,116:et,117:nt,118:rt,119:it,120:at},{22:[1,200]},{22:[1,201]},{22:[1,202],99:[1,203]},t(Ft,[2,119]),{22:[1,204]},{22:[1,205],26:H,47:$,59:W,60:V,84:G,98:X,99:Z,102:Q,104:K,105:J,108:95,110:172,115:tt,116:et,117:nt,118:rt,119:it,120:at},{22:[1,206],26:H,47:$,59:W,60:V,84:G,98:X,99:Z,102:Q,104:K,105:J,108:95,110:172,115:tt,116:et,117:nt,118:rt,119:it,120:at},{77:[1,207]},t(ut,[2,99],{22:[1,208]}),{77:[1,209],94:[1,210]},{77:[1,211]},t(Lt,[2,149]),{77:[1,212],94:[1,213]},t(ot,[2,54],{109:123,47:f,59:d,60:p,84:_,88:x,98:w,99:k,102:T,104:E,105:C,115:D,116:O,117:B,118:L,119:I,120:R}),{22:dt,24:pt,26:yt,38:gt,41:[1,214],42:mt,47:$,59:W,60:V,66:vt,74:bt,76:194,78:145,79:xt,80:wt,81:kt,82:Tt,83:Et,84:Ct,85:St,87:136,88:At,98:X,99:Z,102:Mt,104:K,105:J,106:Nt,107:Dt,108:142,115:tt,116:et,117:nt,118:rt,119:it,120:at},{22:dt,24:pt,26:yt,38:gt,39:215,42:mt,47:$,59:W,60:V,66:vt,74:bt,76:134,77:_t,78:145,79:xt,80:wt,81:kt,82:Tt,83:Et,84:Ct,85:St,87:136,88:At,98:X,99:Z,102:Mt,104:K,105:J,106:Nt,107:Dt,108:142,115:tt,116:et,117:nt,118:rt,119:it,120:at},{22:dt,24:pt,26:yt,38:gt,42:mt,47:$,51:[1,216],59:W,60:V,66:vt,74:bt,76:194,78:145,79:xt,80:wt,81:kt,82:Tt,83:Et,84:Ct,85:St,87:136,88:At,98:X,99:Z,102:Mt,104:K,105:J,106:Nt,107:Dt,108:142,115:tt,116:et,117:nt,118:rt,119:it,120:at},{22:dt,24:pt,26:yt,38:gt,42:mt,47:$,53:[1,217],59:W,60:V,66:vt,74:bt,76:194,78:145,79:xt,80:wt,81:kt,82:Tt,83:Et,84:Ct,85:St,87:136,88:At,98:X,99:Z,102:Mt,104:K,105:J,106:Nt,107:Dt,108:142,115:tt,116:et,117:nt,118:rt,119:it,120:at},{22:dt,24:pt,26:yt,38:gt,42:mt,47:$,55:[1,218],59:W,60:V,66:vt,74:bt,76:194,78:145,79:xt,80:wt,81:kt,82:Tt,83:Et,84:Ct,85:St,87:136,88:At,98:X,99:Z,102:Mt,104:K,105:J,106:Nt,107:Dt,108:142,115:tt,116:et,117:nt,118:rt,119:it,120:at},{22:dt,24:pt,26:yt,38:gt,42:mt,47:$,57:[1,219],59:W,60:V,66:vt,74:bt,76:194,78:145,79:xt,80:wt,81:kt,82:Tt,83:Et,84:Ct,85:St,87:136,88:At,98:X,99:Z,102:Mt,104:K,105:J,106:Nt,107:Dt,108:142,115:tt,116:et,117:nt,118:rt,119:it,120:at},{60:[1,220]},{22:dt,24:pt,26:yt,38:gt,42:mt,47:$,59:W,60:V,63:[1,221],66:vt,74:bt,76:194,78:145,79:xt,80:wt,81:kt,82:Tt,83:Et,84:Ct,85:St,87:136,88:At,98:X,99:Z,102:Mt,104:K,105:J,106:Nt,107:Dt,108:142,115:tt,116:et,117:nt,118:rt,119:it,120:at},{22:dt,24:pt,26:yt,38:gt,42:mt,47:$,59:W,60:V,65:[1,222],66:vt,74:bt,76:194,78:145,79:xt,80:wt,81:kt,82:Tt,83:Et,84:Ct,85:St,87:136,88:At,98:X,99:Z,102:Mt,104:K,105:J,106:Nt,107:Dt,108:142,115:tt,116:et,117:nt,118:rt,119:it,120:at},{22:dt,24:pt,26:yt,38:gt,39:223,42:mt,47:$,59:W,60:V,66:vt,74:bt,76:134,77:_t,78:145,79:xt,80:wt,81:kt,82:Tt,83:Et,84:Ct,85:St,87:136,88:At,98:X,99:Z,102:Mt,104:K,105:J,106:Nt,107:Dt,108:142,115:tt,116:et,117:nt,118:rt,119:it,120:at},{22:dt,24:pt,26:yt,38:gt,41:[1,224],42:mt,47:$,59:W,60:V,66:vt,74:bt,76:194,78:145,79:xt,80:wt,81:kt,82:Tt,83:Et,84:Ct,85:St,87:136,88:At,98:X,99:Z,102:Mt,104:K,105:J,106:Nt,107:Dt,108:142,115:tt,116:et,117:nt,118:rt,119:it,120:at},{22:dt,24:pt,26:yt,38:gt,42:mt,47:$,59:W,60:V,66:vt,68:[1,225],70:[1,226],74:bt,76:194,78:145,79:xt,80:wt,81:kt,82:Tt,83:Et,84:Ct,85:St,87:136,88:At,98:X,99:Z,102:Mt,104:K,105:J,106:Nt,107:Dt,108:142,115:tt,116:et,117:nt,118:rt,119:it,120:at},{22:dt,24:pt,26:yt,38:gt,42:mt,47:$,59:W,60:V,66:vt,68:[1,228],70:[1,227],74:bt,76:194,78:145,79:xt,80:wt,81:kt,82:Tt,83:Et,84:Ct,85:St,87:136,88:At,98:X,99:Z,102:Mt,104:K,105:J,106:Nt,107:Dt,108:142,115:tt,116:et,117:nt,118:rt,119:it,120:at},{9:229,20:Y,21:z,23:U},t(q,[2,49],{47:Bt}),t(ft,[2,73]),t(ft,[2,72]),{22:dt,24:pt,26:yt,38:gt,42:mt,47:$,59:W,60:V,61:[1,230],66:vt,74:bt,76:194,78:145,79:xt,80:wt,81:kt,82:Tt,83:Et,84:Ct,85:St,87:136,88:At,98:X,99:Z,102:Mt,104:K,105:J,106:Nt,107:Dt,108:142,115:tt,116:et,117:nt,118:rt,119:it,120:at},t(ft,[2,75]),t(It,[2,79]),{22:dt,24:pt,26:yt,38:gt,39:231,42:mt,47:$,59:W,60:V,66:vt,74:bt,76:134,77:_t,78:145,79:xt,80:wt,81:kt,82:Tt,83:Et,84:Ct,85:St,87:136,88:At,98:X,99:Z,102:Mt,104:K,105:J,106:Nt,107:Dt,108:142,115:tt,116:et,117:nt,118:rt,119:it,120:at},t(Ot,o,{17:232}),t(j,[2,43]),{46:233,47:f,49:43,59:d,60:p,84:_,88:x,98:w,99:k,102:T,104:E,105:C,109:44,115:D,116:O,117:B,118:L,119:I,120:R},{22:Pt,59:jt,60:Yt,79:zt,89:234,95:Ut,98:qt,100:235,101:236,102:Ht,103:$t,104:Wt,105:Vt,106:Gt},{22:Pt,59:jt,60:Yt,79:zt,89:248,95:Ut,98:qt,100:235,101:236,102:Ht,103:$t,104:Wt,105:Vt,106:Gt},{22:Pt,59:jt,60:Yt,79:zt,89:249,95:Ut,97:[1,250],98:qt,100:235,101:236,102:Ht,103:$t,104:Wt,105:Vt,106:Gt},{22:Pt,59:jt,60:Yt,79:zt,89:251,95:Ut,97:[1,252],98:qt,100:235,101:236,102:Ht,103:$t,104:Wt,105:Vt,106:Gt},{98:[1,253]},{22:Pt,59:jt,60:Yt,79:zt,89:254,95:Ut,98:qt,100:235,101:236,102:Ht,103:$t,104:Wt,105:Vt,106:Gt},{22:Pt,59:jt,60:Yt,79:zt,89:255,95:Ut,98:qt,100:235,101:236,102:Ht,103:$t,104:Wt,105:Vt,106:Gt},{26:H,47:$,59:W,60:V,84:G,90:256,98:X,99:Z,102:Q,104:K,105:J,108:95,110:93,115:tt,116:et,117:nt,118:rt,119:it,120:at},t(ut,[2,98]),{77:[1,257]},t(ut,[2,102],{22:[1,258]}),t(ut,[2,103]),t(ut,[2,106]),t(ut,[2,108],{22:[1,259]}),t(ut,[2,109]),t(st,[2,55]),{22:dt,24:pt,26:yt,38:gt,42:mt,47:$,51:[1,260],59:W,60:V,66:vt,74:bt,76:194,78:145,79:xt,80:wt,81:kt,82:Tt,83:Et,84:Ct,85:St,87:136,88:At,98:X,99:Z,102:Mt,104:K,105:J,106:Nt,107:Dt,108:142,115:tt,116:et,117:nt,118:rt,119:it,120:at},t(st,[2,62]),t(st,[2,57]),t(st,[2,58]),t(st,[2,59]),{59:[1,261]},t(st,[2,61]),t(st,[2,63]),{22:dt,24:pt,26:yt,38:gt,42:mt,47:$,59:W,60:V,65:[1,262],66:vt,74:bt,76:194,78:145,79:xt,80:wt,81:kt,82:Tt,83:Et,84:Ct,85:St,87:136,88:At,98:X,99:Z,102:Mt,104:K,105:J,106:Nt,107:Dt,108:142,115:tt,116:et,117:nt,118:rt,119:it,120:at},t(st,[2,65]),t(st,[2,66]),t(st,[2,68]),t(st,[2,67]),t(st,[2,69]),t(Rt,[2,4]),t([22,47,59,60,84,88,98,99,102,104,105,115,116,117,118,119,120],[2,77]),{22:dt,24:pt,26:yt,38:gt,41:[1,263],42:mt,47:$,59:W,60:V,66:vt,74:bt,76:194,78:145,79:xt,80:wt,81:kt,82:Tt,83:Et,84:Ct,85:St,87:136,88:At,98:X,99:Z,102:Mt,104:K,105:J,106:Nt,107:Dt,108:142,115:tt,116:et,117:nt,118:rt,119:it,120:at},{18:18,19:19,20:s,21:c,22:u,23:l,32:24,33:25,34:26,35:27,36:28,37:29,38:h,42:[1,264],43:31,45:32,46:42,47:f,49:43,59:d,60:p,79:y,80:g,81:m,82:v,83:b,84:_,88:x,98:w,99:k,102:T,104:E,105:C,109:44,111:S,112:A,113:M,114:N,115:D,116:O,117:B,118:L,119:I,120:R},t(ot,[2,53]),t(ut,[2,111],{99:Xt}),t(Zt,[2,121],{101:266,22:Pt,59:jt,60:Yt,79:zt,95:Ut,98:qt,102:Ht,103:$t,104:Wt,105:Vt,106:Gt}),t(Qt,[2,123]),t(Qt,[2,125]),t(Qt,[2,126]),t(Qt,[2,127]),t(Qt,[2,128]),t(Qt,[2,129]),t(Qt,[2,130]),t(Qt,[2,131]),t(Qt,[2,132]),t(Qt,[2,133]),t(Qt,[2,134]),t(Qt,[2,135]),t(ut,[2,112],{99:Xt}),t(ut,[2,113],{99:Xt}),{22:[1,267]},t(ut,[2,114],{99:Xt}),{22:[1,268]},t(Ft,[2,120]),t(ut,[2,94],{99:Xt}),t(ut,[2,95],{99:Xt}),t(ut,[2,96],{108:95,110:172,26:H,47:$,59:W,60:V,84:G,98:X,99:Z,102:Q,104:K,105:J,115:tt,116:et,117:nt,118:rt,119:it,120:at}),t(ut,[2,100]),{94:[1,269]},{94:[1,270]},{51:[1,271]},{61:[1,272]},{65:[1,273]},{9:274,20:Y,21:z,23:U},t(j,[2,42]),{22:Pt,59:jt,60:Yt,79:zt,95:Ut,98:qt,100:275,101:236,102:Ht,103:$t,104:Wt,105:Vt,106:Gt},t(Qt,[2,124]),{26:H,47:$,59:W,60:V,84:G,90:276,98:X,99:Z,102:Q,104:K,105:J,108:95,110:93,115:tt,116:et,117:nt,118:rt,119:it,120:at},{26:H,47:$,59:W,60:V,84:G,90:277,98:X,99:Z,102:Q,104:K,105:J,108:95,110:93,115:tt,116:et,117:nt,118:rt,119:it,120:at},t(ut,[2,104]),t(ut,[2,110]),t(st,[2,56]),{22:dt,24:pt,26:yt,38:gt,39:278,42:mt,47:$,59:W,60:V,66:vt,74:bt,76:134,77:_t,78:145,79:xt,80:wt,81:kt,82:Tt,83:Et,84:Ct,85:St,87:136,88:At,98:X,99:Z,102:Mt,104:K,105:J,106:Nt,107:Dt,108:142,115:tt,116:et,117:nt,118:rt,119:it,120:at},t(st,[2,64]),t(Ot,o,{17:279}),t(Zt,[2,122],{101:266,22:Pt,59:jt,60:Yt,79:zt,95:Ut,98:qt,102:Ht,103:$t,104:Wt,105:Vt,106:Gt}),t(ut,[2,117],{108:95,110:172,22:[1,280],26:H,47:$,59:W,60:V,84:G,98:X,99:Z,102:Q,104:K,105:J,115:tt,116:et,117:nt,118:rt,119:it,120:at}),t(ut,[2,118],{108:95,110:172,22:[1,281],26:H,47:$,59:W,60:V,84:G,98:X,99:Z,102:Q,104:K,105:J,115:tt,116:et,117:nt,118:rt,119:it,120:at}),{22:dt,24:pt,26:yt,38:gt,41:[1,282],42:mt,47:$,59:W,60:V,66:vt,74:bt,76:194,78:145,79:xt,80:wt,81:kt,82:Tt,83:Et,84:Ct,85:St,87:136,88:At,98:X,99:Z,102:Mt,104:K,105:J,106:Nt,107:Dt,108:142,115:tt,116:et,117:nt,118:rt,119:it,120:at},{18:18,19:19,20:s,21:c,22:u,23:l,32:24,33:25,34:26,35:27,36:28,37:29,38:h,42:[1,283],43:31,45:32,46:42,47:f,49:43,59:d,60:p,79:y,80:g,81:m,82:v,83:b,84:_,88:x,98:w,99:k,102:T,104:E,105:C,109:44,111:S,112:A,113:M,114:N,115:D,116:O,117:B,118:L,119:I,120:R},{22:Pt,59:jt,60:Yt,79:zt,89:284,95:Ut,98:qt,100:235,101:236,102:Ht,103:$t,104:Wt,105:Vt,106:Gt},{22:Pt,59:jt,60:Yt,79:zt,89:285,95:Ut,98:qt,100:235,101:236,102:Ht,103:$t,104:Wt,105:Vt,106:Gt},t(st,[2,60]),t(j,[2,41]),t(ut,[2,115],{99:Xt}),t(ut,[2,116],{99:Xt})],defaultActions:{2:[2,1],9:[2,5],10:[2,2],126:[2,7]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),y={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(y.yy[g]=this.yy[g]);p.setInput(t,y.yy),y.yy.lexer=p,y.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var m=p.yylloc;a.push(m);var v=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var _,x,w,k,T,E,C,S,A,M={};;){if(w=n[n.length-1],this.defaultActions[w]?k=this.defaultActions[w]:(null==_&&(_=b()),k=o[w]&&o[w][_]),void 0===k||!k.length||!k[0]){var N="";for(E in A=[],o[w])this.terminals_[E]&&E>h&&A.push("'"+this.terminals_[E]+"'");N=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[_]||_)+"'":"Parse error on line "+(c+1)+": Unexpected "+(_==f?"end of input":"'"+(this.terminals_[_]||_)+"'"),this.parseError(N,{text:p.match,token:this.terminals_[_]||_,line:p.yylineno,loc:m,expected:A})}if(k[0]instanceof Array&&k.length>1)throw new Error("Parse Error: multiple actions possible at state: "+w+", token: "+_);switch(k[0]){case 1:n.push(_),i.push(p.yytext),a.push(p.yylloc),n.push(k[1]),_=null,x?(_=x,x=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,m=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[k[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},v&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(T=this.performAction.apply(M,[s,u,c,y.yy,k[1],i,a].concat(d))))return T;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[k[1]][0]),i.push(M.$),a.push(M._$),S=o[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},Jt={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){return this.next()||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),12;case 1:return this.begin("type_directive"),13;case 2:return this.popState(),this.begin("arg_directive"),10;case 3:return this.popState(),this.popState(),15;case 4:return 14;case 5:case 6:break;case 7:this.begin("string");break;case 8:case 17:case 20:case 23:case 26:this.popState();break;case 9:return"STR";case 10:return 79;case 11:return 88;case 12:return 80;case 13:return 97;case 14:return 81;case 15:return 82;case 16:this.begin("href");break;case 18:return 93;case 19:this.begin("callbackname");break;case 21:this.popState(),this.begin("callbackargs");break;case 22:return 91;case 24:return 92;case 25:this.begin("click");break;case 27:return 83;case 28:case 29:return t.lex.firstGraph()&&this.begin("dir"),24;case 30:return 38;case 31:return 42;case 32:case 33:case 34:case 35:return 94;case 36:return this.popState(),25;case 37:case 38:case 39:case 40:case 41:case 42:case 43:case 44:case 45:case 46:return this.popState(),26;case 47:return 111;case 48:return 112;case 49:return 113;case 50:return 114;case 51:return 98;case 52:return 104;case 53:return 48;case 54:return 60;case 55:return 47;case 56:return 20;case 57:return 99;case 58:return 119;case 59:case 60:case 61:return 75;case 62:case 63:case 64:return 74;case 65:return 52;case 66:return 53;case 67:return 54;case 68:return 55;case 69:return 56;case 70:return 57;case 71:return 58;case 72:return 62;case 73:return 63;case 74:return 102;case 75:return 105;case 76:return 120;case 77:return 117;case 78:return 106;case 79:case 80:return 118;case 81:return 107;case 82:return 66;case 83:return 85;case 84:return"SEP";case 85:return 84;case 86:return 59;case 87:return 68;case 88:return 67;case 89:return 70;case 90:return 69;case 91:return 115;case 92:return 116;case 93:return 61;case 94:return 50;case 95:return 51;case 96:return 40;case 97:return 41;case 98:return 64;case 99:return 65;case 100:return 126;case 101:return 21;case 102:return 22;case 103:return 23}},rules:[/^(?:%%\{)/,/^(?:((?:(?!\}%%)[^:.])*))/,/^(?::)/,/^(?:\}%%)/,/^(?:((?:(?!\}%%).|\n)*))/,/^(?:%%(?!\{)[^\n]*)/,/^(?:[^\}]%%[^\n]*)/,/^(?:["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:style\b)/,/^(?:default\b)/,/^(?:linkStyle\b)/,/^(?:interpolate\b)/,/^(?:classDef\b)/,/^(?:class\b)/,/^(?:href[\s]+["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:click[\s]+)/,/^(?:[\s\n])/,/^(?:[^\s\n]*)/,/^(?:graph\b)/,/^(?:flowchart\b)/,/^(?:subgraph\b)/,/^(?:end\b\s*)/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:(\r?\n)*\s*\n)/,/^(?:\s*LR\b)/,/^(?:\s*RL\b)/,/^(?:\s*TB\b)/,/^(?:\s*BT\b)/,/^(?:\s*TD\b)/,/^(?:\s*BR\b)/,/^(?:\s*<)/,/^(?:\s*>)/,/^(?:\s*\^)/,/^(?:\s*v\b)/,/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:[0-9]+)/,/^(?:#)/,/^(?::::)/,/^(?::)/,/^(?:&)/,/^(?:;)/,/^(?:,)/,/^(?:\*)/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?:\s*[xo<]?--\s*)/,/^(?:\s*[xo<]?==\s*)/,/^(?:\s*[xo<]?-\.\s*)/,/^(?:\(-)/,/^(?:-\))/,/^(?:\(\[)/,/^(?:\]\))/,/^(?:\[\[)/,/^(?:\]\])/,/^(?:\[\|)/,/^(?:\[\()/,/^(?:\)\])/,/^(?:-)/,/^(?:\.)/,/^(?:[\_])/,/^(?:\+)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:<)/,/^(?:>)/,/^(?:\^)/,/^(?:\\\|)/,/^(?:v\b)/,/^(?:[A-Za-z]+)/,/^(?:\\\])/,/^(?:\[\/)/,/^(?:\/\])/,/^(?:\[\\)/,/^(?:[!"#$%&'*+,-.`?\\_/])/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\|)/,/^(?:\()/,/^(?:\))/,/^(?:\[)/,/^(?:\])/,/^(?:\{)/,/^(?:\})/,/^(?:")/,/^(?:(\r?\n)+)/,/^(?:\s)/,/^(?:$)/],conditions:{close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},callbackargs:{rules:[23,24],inclusive:!1},callbackname:{rules:[20,21,22],inclusive:!1},href:{rules:[17,18],inclusive:!1},click:{rules:[26,27],inclusive:!1},vertex:{rules:[],inclusive:!1},dir:{rules:[36,37,38,39,40,41,42,43,44,45,46],inclusive:!1},string:{rules:[8,9],inclusive:!1},INITIAL:{rules:[0,5,6,7,10,11,12,13,14,15,16,19,25,28,29,30,31,32,33,34,35,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103],inclusive:!0}}};function te(){this.yy={}}return Kt.lexer=Jt,te.prototype=Kt,Kt.Parser=te,new te}();e.parser=r,e.Parser=r.Parser,e.parse=function(){return r.parse.apply(r,arguments)},e.main=function(t){t[1]||(console.log("Usage: "+t[0]+" FILE"),process.exit(1));var r=n(5354).readFileSync(n(6470).normalize(t[1]),"utf8");return e.parser.parse(r)},n.c[n.s]===t&&e.main(process.argv.slice(1))},9959:(t,e,n)=>{t=n.nmd(t);var r=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,3],n=[1,5],r=[7,9,11,12,13,14,15,16,17,18,19,20,22,29,34],i=[1,15],a=[1,16],o=[1,17],s=[1,18],c=[1,19],u=[1,20],l=[1,21],h=[1,22],f=[1,23],d=[1,25],p=[1,27],y=[1,30],g=[5,7,9,11,12,13,14,15,16,17,18,19,20,22,29,34],m={trace:function(){},yy:{},symbols_:{error:2,start:3,directive:4,gantt:5,document:6,EOF:7,line:8,SPACE:9,statement:10,NL:11,dateFormat:12,inclusiveEndDates:13,topAxis:14,axisFormat:15,excludes:16,includes:17,todayMarker:18,title:19,section:20,clickStatement:21,taskTxt:22,taskData:23,openDirective:24,typeDirective:25,closeDirective:26,":":27,argDirective:28,click:29,callbackname:30,callbackargs:31,href:32,clickStatementDebug:33,open_directive:34,type_directive:35,arg_directive:36,close_directive:37,$accept:0,$end:1},terminals_:{2:"error",5:"gantt",7:"EOF",9:"SPACE",11:"NL",12:"dateFormat",13:"inclusiveEndDates",14:"topAxis",15:"axisFormat",16:"excludes",17:"includes",18:"todayMarker",19:"title",20:"section",22:"taskTxt",23:"taskData",27:":",29:"click",30:"callbackname",31:"callbackargs",32:"href",34:"open_directive",35:"type_directive",36:"arg_directive",37:"close_directive"},productions_:[0,[3,2],[3,3],[6,0],[6,2],[8,2],[8,1],[8,1],[8,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,2],[10,1],[4,4],[4,6],[21,2],[21,3],[21,3],[21,4],[21,3],[21,4],[21,2],[33,2],[33,3],[33,3],[33,4],[33,3],[33,4],[33,2],[24,1],[25,1],[28,1],[26,1]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 2:return a[s-1];case 3:case 7:case 8:this.$=[];break;case 4:a[s-1].push(a[s]),this.$=a[s-1];break;case 5:case 6:this.$=a[s];break;case 9:r.setDateFormat(a[s].substr(11)),this.$=a[s].substr(11);break;case 10:r.enableInclusiveEndDates(),this.$=a[s].substr(18);break;case 11:r.TopAxis(),this.$=a[s].substr(8);break;case 12:r.setAxisFormat(a[s].substr(11)),this.$=a[s].substr(11);break;case 13:r.setExcludes(a[s].substr(9)),this.$=a[s].substr(9);break;case 14:r.setIncludes(a[s].substr(9)),this.$=a[s].substr(9);break;case 15:r.setTodayMarker(a[s].substr(12)),this.$=a[s].substr(12);break;case 16:r.setTitle(a[s].substr(6)),this.$=a[s].substr(6);break;case 17:r.addSection(a[s].substr(8)),this.$=a[s].substr(8);break;case 19:r.addTask(a[s-1],a[s]),this.$="task";break;case 23:this.$=a[s-1],r.setClickEvent(a[s-1],a[s],null);break;case 24:this.$=a[s-2],r.setClickEvent(a[s-2],a[s-1],a[s]);break;case 25:this.$=a[s-2],r.setClickEvent(a[s-2],a[s-1],null),r.setLink(a[s-2],a[s]);break;case 26:this.$=a[s-3],r.setClickEvent(a[s-3],a[s-2],a[s-1]),r.setLink(a[s-3],a[s]);break;case 27:this.$=a[s-2],r.setClickEvent(a[s-2],a[s],null),r.setLink(a[s-2],a[s-1]);break;case 28:this.$=a[s-3],r.setClickEvent(a[s-3],a[s-1],a[s]),r.setLink(a[s-3],a[s-2]);break;case 29:this.$=a[s-1],r.setLink(a[s-1],a[s]);break;case 30:case 36:this.$=a[s-1]+" "+a[s];break;case 31:case 32:case 34:this.$=a[s-2]+" "+a[s-1]+" "+a[s];break;case 33:case 35:this.$=a[s-3]+" "+a[s-2]+" "+a[s-1]+" "+a[s];break;case 37:r.parseDirective("%%{","open_directive");break;case 38:r.parseDirective(a[s],"type_directive");break;case 39:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 40:r.parseDirective("}%%","close_directive","gantt")}},table:[{3:1,4:2,5:e,24:4,34:n},{1:[3]},{3:6,4:2,5:e,24:4,34:n},t(r,[2,3],{6:7}),{25:8,35:[1,9]},{35:[2,37]},{1:[2,1]},{4:26,7:[1,10],8:11,9:[1,12],10:13,11:[1,14],12:i,13:a,14:o,15:s,16:c,17:u,18:l,19:h,20:f,21:24,22:d,24:4,29:p,34:n},{26:28,27:[1,29],37:y},t([27,37],[2,38]),t(r,[2,8],{1:[2,2]}),t(r,[2,4]),{4:26,10:31,12:i,13:a,14:o,15:s,16:c,17:u,18:l,19:h,20:f,21:24,22:d,24:4,29:p,34:n},t(r,[2,6]),t(r,[2,7]),t(r,[2,9]),t(r,[2,10]),t(r,[2,11]),t(r,[2,12]),t(r,[2,13]),t(r,[2,14]),t(r,[2,15]),t(r,[2,16]),t(r,[2,17]),t(r,[2,18]),{23:[1,32]},t(r,[2,20]),{30:[1,33],32:[1,34]},{11:[1,35]},{28:36,36:[1,37]},{11:[2,40]},t(r,[2,5]),t(r,[2,19]),t(r,[2,23],{31:[1,38],32:[1,39]}),t(r,[2,29],{30:[1,40]}),t(g,[2,21]),{26:41,37:y},{37:[2,39]},t(r,[2,24],{32:[1,42]}),t(r,[2,25]),t(r,[2,27],{31:[1,43]}),{11:[1,44]},t(r,[2,26]),t(r,[2,28]),t(g,[2,22])],defaultActions:{5:[2,37],6:[2,1],30:[2,40],37:[2,39]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),y={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(y.yy[g]=this.yy[g]);p.setInput(t,y.yy),y.yy.lexer=p,y.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var m=p.yylloc;a.push(m);var v=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var _,x,w,k,T,E,C,S,A,M={};;){if(w=n[n.length-1],this.defaultActions[w]?k=this.defaultActions[w]:(null==_&&(_=b()),k=o[w]&&o[w][_]),void 0===k||!k.length||!k[0]){var N="";for(E in A=[],o[w])this.terminals_[E]&&E>h&&A.push("'"+this.terminals_[E]+"'");N=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[_]||_)+"'":"Parse error on line "+(c+1)+": Unexpected "+(_==f?"end of input":"'"+(this.terminals_[_]||_)+"'"),this.parseError(N,{text:p.match,token:this.terminals_[_]||_,line:p.yylineno,loc:m,expected:A})}if(k[0]instanceof Array&&k.length>1)throw new Error("Parse Error: multiple actions possible at state: "+w+", token: "+_);switch(k[0]){case 1:n.push(_),i.push(p.yytext),a.push(p.yylloc),n.push(k[1]),_=null,x?(_=x,x=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,m=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[k[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},v&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(T=this.performAction.apply(M,[s,u,c,y.yy,k[1],i,a].concat(d))))return T;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[k[1]][0]),i.push(M.$),a.push(M._$),S=o[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},v={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){return this.next()||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),34;case 1:return this.begin("type_directive"),35;case 2:return this.popState(),this.begin("arg_directive"),27;case 3:return this.popState(),this.popState(),37;case 4:return 36;case 5:case 6:case 7:case 9:case 10:case 11:break;case 8:return 11;case 12:this.begin("href");break;case 13:case 16:case 19:case 22:this.popState();break;case 14:return 32;case 15:this.begin("callbackname");break;case 17:this.popState(),this.begin("callbackargs");break;case 18:return 30;case 20:return 31;case 21:this.begin("click");break;case 23:return 29;case 24:return 5;case 25:return 12;case 26:return 13;case 27:return 14;case 28:return 15;case 29:return 17;case 30:return 16;case 31:return 18;case 32:return"date";case 33:return 19;case 34:return 20;case 35:return 22;case 36:return 23;case 37:return 27;case 38:return 7;case 39:return"INVALID"}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%%(?!\{)*[^\n]*)/i,/^(?:[^\}]%%*[^\n]*)/i,/^(?:%%*[^\n]*[\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:href[\s]+["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:call[\s]+)/i,/^(?:\([\s]*\))/i,/^(?:\()/i,/^(?:[^(]*)/i,/^(?:\))/i,/^(?:[^)]*)/i,/^(?:click[\s]+)/i,/^(?:[\s\n])/i,/^(?:[^\s\n]*)/i,/^(?:gantt\b)/i,/^(?:dateFormat\s[^#\n;]+)/i,/^(?:inclusiveEndDates\b)/i,/^(?:topAxis\b)/i,/^(?:axisFormat\s[^#\n;]+)/i,/^(?:includes\s[^#\n;]+)/i,/^(?:excludes\s[^#\n;]+)/i,/^(?:todayMarker\s[^\n;]+)/i,/^(?:\d\d\d\d-\d\d-\d\d\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:section\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},callbackargs:{rules:[19,20],inclusive:!1},callbackname:{rules:[16,17,18],inclusive:!1},href:{rules:[13,14],inclusive:!1},click:{rules:[22,23],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,11,12,15,21,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39],inclusive:!0}}};function b(){this.yy={}}return m.lexer=v,b.prototype=m,m.Parser=b,new b}();e.parser=r,e.Parser=r.Parser,e.parse=function(){return r.parse.apply(r,arguments)},e.main=function(t){t[1]||(console.log("Usage: "+t[0]+" FILE"),process.exit(1));var r=n(6878).readFileSync(n(6470).normalize(t[1]),"utf8");return e.parser.parse(r)},n.c[n.s]===t&&e.main(process.argv.slice(1))},2553:(t,e,n)=>{t=n.nmd(t);var r=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[2,3],n=[1,7],r=[7,12,15,17,19,20,21],i=[7,11,12,15,17,19,20,21],a=[2,20],o=[1,32],s={trace:function(){},yy:{},symbols_:{error:2,start:3,GG:4,":":5,document:6,EOF:7,DIR:8,options:9,body:10,OPT:11,NL:12,line:13,statement:14,COMMIT:15,commit_arg:16,BRANCH:17,ID:18,CHECKOUT:19,MERGE:20,RESET:21,reset_arg:22,STR:23,HEAD:24,reset_parents:25,CARET:26,$accept:0,$end:1},terminals_:{2:"error",4:"GG",5:":",7:"EOF",8:"DIR",11:"OPT",12:"NL",15:"COMMIT",17:"BRANCH",18:"ID",19:"CHECKOUT",20:"MERGE",21:"RESET",23:"STR",24:"HEAD",26:"CARET"},productions_:[0,[3,4],[3,5],[6,0],[6,2],[9,2],[9,1],[10,0],[10,2],[13,2],[13,1],[14,2],[14,2],[14,2],[14,2],[14,2],[16,0],[16,1],[22,2],[22,2],[25,0],[25,2]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 1:return a[s-1];case 2:return r.setDirection(a[s-3]),a[s-1];case 4:r.setOptions(a[s-1]),this.$=a[s];break;case 5:a[s-1]+=a[s],this.$=a[s-1];break;case 7:this.$=[];break;case 8:a[s-1].push(a[s]),this.$=a[s-1];break;case 9:this.$=a[s-1];break;case 11:r.commit(a[s]);break;case 12:r.branch(a[s]);break;case 13:r.checkout(a[s]);break;case 14:r.merge(a[s]);break;case 15:r.reset(a[s]);break;case 16:this.$="";break;case 17:this.$=a[s];break;case 18:this.$=a[s-1]+":"+a[s];break;case 19:this.$=a[s-1]+":"+r.count,r.count=0;break;case 20:r.count=0;break;case 21:r.count+=1}},table:[{3:1,4:[1,2]},{1:[3]},{5:[1,3],8:[1,4]},{6:5,7:e,9:6,12:n},{5:[1,8]},{7:[1,9]},t(r,[2,7],{10:10,11:[1,11]}),t(i,[2,6]),{6:12,7:e,9:6,12:n},{1:[2,1]},{7:[2,4],12:[1,15],13:13,14:14,15:[1,16],17:[1,17],19:[1,18],20:[1,19],21:[1,20]},t(i,[2,5]),{7:[1,21]},t(r,[2,8]),{12:[1,22]},t(r,[2,10]),{12:[2,16],16:23,23:[1,24]},{18:[1,25]},{18:[1,26]},{18:[1,27]},{18:[1,30],22:28,24:[1,29]},{1:[2,2]},t(r,[2,9]),{12:[2,11]},{12:[2,17]},{12:[2,12]},{12:[2,13]},{12:[2,14]},{12:[2,15]},{12:a,25:31,26:o},{12:a,25:33,26:o},{12:[2,18]},{12:a,25:34,26:o},{12:[2,19]},{12:[2,21]}],defaultActions:{9:[2,1],21:[2,2],23:[2,11],24:[2,17],25:[2,12],26:[2,13],27:[2,14],28:[2,15],31:[2,18],33:[2,19],34:[2,21]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),y={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(y.yy[g]=this.yy[g]);p.setInput(t,y.yy),y.yy.lexer=p,y.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var m=p.yylloc;a.push(m);var v=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var _,x,w,k,T,E,C,S,A,M={};;){if(w=n[n.length-1],this.defaultActions[w]?k=this.defaultActions[w]:(null==_&&(_=b()),k=o[w]&&o[w][_]),void 0===k||!k.length||!k[0]){var N="";for(E in A=[],o[w])this.terminals_[E]&&E>h&&A.push("'"+this.terminals_[E]+"'");N=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[_]||_)+"'":"Parse error on line "+(c+1)+": Unexpected "+(_==f?"end of input":"'"+(this.terminals_[_]||_)+"'"),this.parseError(N,{text:p.match,token:this.terminals_[_]||_,line:p.yylineno,loc:m,expected:A})}if(k[0]instanceof Array&&k.length>1)throw new Error("Parse Error: multiple actions possible at state: "+w+", token: "+_);switch(k[0]){case 1:n.push(_),i.push(p.yytext),a.push(p.yylloc),n.push(k[1]),_=null,x?(_=x,x=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,m=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[k[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},v&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(T=this.performAction.apply(M,[s,u,c,y.yy,k[1],i,a].concat(d))))return T;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[k[1]][0]),i.push(M.$),a.push(M._$),S=o[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},c={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){return this.next()||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return 12;case 1:case 2:case 3:break;case 4:return 4;case 5:return 15;case 6:return 17;case 7:return 20;case 8:return 21;case 9:return 19;case 10:case 11:return 8;case 12:return 5;case 13:return 26;case 14:this.begin("options");break;case 15:case 18:this.popState();break;case 16:return 11;case 17:this.begin("string");break;case 19:return 23;case 20:return 18;case 21:return 7}},rules:[/^(?:(\r?\n)+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:gitGraph\b)/i,/^(?:commit\b)/i,/^(?:branch\b)/i,/^(?:merge\b)/i,/^(?:reset\b)/i,/^(?:checkout\b)/i,/^(?:LR\b)/i,/^(?:BT\b)/i,/^(?::)/i,/^(?:\^)/i,/^(?:options\r?\n)/i,/^(?:end\r?\n)/i,/^(?:[^\n]+\r?\n)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[a-zA-Z][-_\.a-zA-Z0-9]*[-_a-zA-Z0-9])/i,/^(?:$)/i],conditions:{options:{rules:[15,16],inclusive:!1},string:{rules:[18,19],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,17,20,21],inclusive:!0}}};function u(){this.yy={}}return s.lexer=c,u.prototype=s,s.Parser=u,new u}();e.parser=r,e.Parser=r.Parser,e.parse=function(){return r.parse.apply(r,arguments)},e.main=function(t){t[1]||(console.log("Usage: "+t[0]+" FILE"),process.exit(1));var r=n(8183).readFileSync(n(6470).normalize(t[1]),"utf8");return e.parser.parse(r)},n.c[n.s]===t&&e.main(process.argv.slice(1))},6765:(t,e,n)=>{t=n.nmd(t);var r=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[6,9,10],n={trace:function(){},yy:{},symbols_:{error:2,start:3,info:4,document:5,EOF:6,line:7,statement:8,NL:9,showInfo:10,$accept:0,$end:1},terminals_:{2:"error",4:"info",6:"EOF",9:"NL",10:"showInfo"},productions_:[0,[3,3],[5,0],[5,2],[7,1],[7,1],[8,1]],performAction:function(t,e,n,r,i,a,o){switch(a.length,i){case 1:return r;case 4:break;case 6:r.setInfo(!0)}},table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:6,9:[1,7],10:[1,8]},{1:[2,1]},t(e,[2,3]),t(e,[2,4]),t(e,[2,5]),t(e,[2,6])],defaultActions:{4:[2,1]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),y={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(y.yy[g]=this.yy[g]);p.setInput(t,y.yy),y.yy.lexer=p,y.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var m=p.yylloc;a.push(m);var v=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var _,x,w,k,T,E,C,S,A,M={};;){if(w=n[n.length-1],this.defaultActions[w]?k=this.defaultActions[w]:(null==_&&(_=b()),k=o[w]&&o[w][_]),void 0===k||!k.length||!k[0]){var N="";for(E in A=[],o[w])this.terminals_[E]&&E>h&&A.push("'"+this.terminals_[E]+"'");N=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[_]||_)+"'":"Parse error on line "+(c+1)+": Unexpected "+(_==f?"end of input":"'"+(this.terminals_[_]||_)+"'"),this.parseError(N,{text:p.match,token:this.terminals_[_]||_,line:p.yylineno,loc:m,expected:A})}if(k[0]instanceof Array&&k.length>1)throw new Error("Parse Error: multiple actions possible at state: "+w+", token: "+_);switch(k[0]){case 1:n.push(_),i.push(p.yytext),a.push(p.yylloc),n.push(k[1]),_=null,x?(_=x,x=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,m=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[k[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},v&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(T=this.performAction.apply(M,[s,u,c,y.yy,k[1],i,a].concat(d))))return T;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[k[1]][0]),i.push(M.$),a.push(M._$),S=o[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},r={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){return this.next()||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return 4;case 1:return 9;case 2:return"space";case 3:return 10;case 4:return 6;case 5:return"TXT"}},rules:[/^(?:info\b)/i,/^(?:[\s\n\r]+)/i,/^(?:[\s]+)/i,/^(?:showInfo\b)/i,/^(?:$)/i,/^(?:.)/i],conditions:{INITIAL:{rules:[0,1,2,3,4,5],inclusive:!0}}};function i(){this.yy={}}return n.lexer=r,i.prototype=n,n.Parser=i,new i}();e.parser=r,e.Parser=r.Parser,e.parse=function(){return r.parse.apply(r,arguments)},e.main=function(t){t[1]||(console.log("Usage: "+t[0]+" FILE"),process.exit(1));var r=n(1428).readFileSync(n(6470).normalize(t[1]),"utf8");return e.parser.parse(r)},n.c[n.s]===t&&e.main(process.argv.slice(1))},7062:(t,e,n)=>{t=n.nmd(t);var r=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,4],n=[1,5],r=[1,6],i=[1,7],a=[1,9],o=[1,11,13,20,21,22,23],s=[2,5],c=[1,6,11,13,20,21,22,23],u=[20,21,22],l=[2,8],h=[1,18],f=[1,19],d=[1,24],p=[6,20,21,22,23],y={trace:function(){},yy:{},symbols_:{error:2,start:3,eol:4,directive:5,PIE:6,document:7,showData:8,line:9,statement:10,txt:11,value:12,title:13,title_value:14,openDirective:15,typeDirective:16,closeDirective:17,":":18,argDirective:19,NEWLINE:20,";":21,EOF:22,open_directive:23,type_directive:24,arg_directive:25,close_directive:26,$accept:0,$end:1},terminals_:{2:"error",6:"PIE",8:"showData",11:"txt",12:"value",13:"title",14:"title_value",18:":",20:"NEWLINE",21:";",22:"EOF",23:"open_directive",24:"type_directive",25:"arg_directive",26:"close_directive"},productions_:[0,[3,2],[3,2],[3,2],[3,3],[7,0],[7,2],[9,2],[10,0],[10,2],[10,2],[10,1],[5,3],[5,5],[4,1],[4,1],[4,1],[15,1],[16,1],[19,1],[17,1]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 4:r.setShowData(!0);break;case 7:this.$=a[s-1];break;case 9:r.addSection(a[s-1],r.cleanupValue(a[s]));break;case 10:this.$=a[s].trim(),r.setTitle(this.$);break;case 17:r.parseDirective("%%{","open_directive");break;case 18:r.parseDirective(a[s],"type_directive");break;case 19:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 20:r.parseDirective("}%%","close_directive","pie")}},table:[{3:1,4:2,5:3,6:e,15:8,20:n,21:r,22:i,23:a},{1:[3]},{3:10,4:2,5:3,6:e,15:8,20:n,21:r,22:i,23:a},{3:11,4:2,5:3,6:e,15:8,20:n,21:r,22:i,23:a},t(o,s,{7:12,8:[1,13]}),t(c,[2,14]),t(c,[2,15]),t(c,[2,16]),{16:14,24:[1,15]},{24:[2,17]},{1:[2,1]},{1:[2,2]},t(u,l,{15:8,9:16,10:17,5:20,1:[2,3],11:h,13:f,23:a}),t(o,s,{7:21}),{17:22,18:[1,23],26:d},t([18,26],[2,18]),t(o,[2,6]),{4:25,20:n,21:r,22:i},{12:[1,26]},{14:[1,27]},t(u,[2,11]),t(u,l,{15:8,9:16,10:17,5:20,1:[2,4],11:h,13:f,23:a}),t(p,[2,12]),{19:28,25:[1,29]},t(p,[2,20]),t(o,[2,7]),t(u,[2,9]),t(u,[2,10]),{17:30,26:d},{26:[2,19]},t(p,[2,13])],defaultActions:{9:[2,17],10:[2,1],11:[2,2],29:[2,19]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),y={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(y.yy[g]=this.yy[g]);p.setInput(t,y.yy),y.yy.lexer=p,y.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var m=p.yylloc;a.push(m);var v=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var _,x,w,k,T,E,C,S,A,M={};;){if(w=n[n.length-1],this.defaultActions[w]?k=this.defaultActions[w]:(null==_&&(_=b()),k=o[w]&&o[w][_]),void 0===k||!k.length||!k[0]){var N="";for(E in A=[],o[w])this.terminals_[E]&&E>h&&A.push("'"+this.terminals_[E]+"'");N=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[_]||_)+"'":"Parse error on line "+(c+1)+": Unexpected "+(_==f?"end of input":"'"+(this.terminals_[_]||_)+"'"),this.parseError(N,{text:p.match,token:this.terminals_[_]||_,line:p.yylineno,loc:m,expected:A})}if(k[0]instanceof Array&&k.length>1)throw new Error("Parse Error: multiple actions possible at state: "+w+", token: "+_);switch(k[0]){case 1:n.push(_),i.push(p.yytext),a.push(p.yylloc),n.push(k[1]),_=null,x?(_=x,x=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,m=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[k[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},v&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(T=this.performAction.apply(M,[s,u,c,y.yy,k[1],i,a].concat(d))))return T;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[k[1]][0]),i.push(M.$),a.push(M._$),S=o[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},g={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){return this.next()||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),23;case 1:return this.begin("type_directive"),24;case 2:return this.popState(),this.begin("arg_directive"),18;case 3:return this.popState(),this.popState(),26;case 4:return 25;case 5:case 6:case 8:case 9:break;case 7:return 20;case 10:return this.begin("title"),13;case 11:return this.popState(),"title_value";case 12:this.begin("string");break;case 13:this.popState();break;case 14:return"txt";case 15:return 6;case 16:return 8;case 17:return"value";case 18:return 22}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n\r]+)/i,/^(?:%%[^\n]*)/i,/^(?:[\s]+)/i,/^(?:title\b)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:pie\b)/i,/^(?:showData\b)/i,/^(?::[\s]*[\d]+(?:\.[\d]+)?)/i,/^(?:$)/i],conditions:{close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},title:{rules:[11],inclusive:!1},string:{rules:[13,14],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,12,15,16,17,18],inclusive:!0}}};function m(){this.yy={}}return y.lexer=g,m.prototype=y,y.Parser=m,new m}();e.parser=r,e.Parser=r.Parser,e.parse=function(){return r.parse.apply(r,arguments)},e.main=function(t){t[1]||(console.log("Usage: "+t[0]+" FILE"),process.exit(1));var r=n(4551).readFileSync(n(6470).normalize(t[1]),"utf8");return e.parser.parse(r)},n.c[n.s]===t&&e.main(process.argv.slice(1))},3176:(t,e,n)=>{t=n.nmd(t);var r=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,3],n=[1,5],r=[1,17],i=[2,10],a=[1,21],o=[1,22],s=[1,23],c=[1,24],u=[1,25],l=[1,26],h=[1,19],f=[1,27],d=[1,28],p=[1,31],y=[66,67],g=[5,8,14,35,36,37,38,39,40,48,55,57,66,67],m=[5,6,8,14,35,36,37,38,39,40,48,66,67],v=[1,51],b=[1,52],_=[1,53],x=[1,54],w=[1,55],k=[1,56],T=[1,57],E=[57,58],C=[1,69],S=[1,65],A=[1,66],M=[1,67],N=[1,68],D=[1,70],O=[1,74],B=[1,75],L=[1,72],I=[1,73],R=[5,8,14,35,36,37,38,39,40,48,66,67],F={trace:function(){},yy:{},symbols_:{error:2,start:3,directive:4,NEWLINE:5,RD:6,diagram:7,EOF:8,openDirective:9,typeDirective:10,closeDirective:11,":":12,argDirective:13,open_directive:14,type_directive:15,arg_directive:16,close_directive:17,requirementDef:18,elementDef:19,relationshipDef:20,requirementType:21,requirementName:22,STRUCT_START:23,requirementBody:24,ID:25,COLONSEP:26,id:27,TEXT:28,text:29,RISK:30,riskLevel:31,VERIFYMTHD:32,verifyType:33,STRUCT_STOP:34,REQUIREMENT:35,FUNCTIONAL_REQUIREMENT:36,INTERFACE_REQUIREMENT:37,PERFORMANCE_REQUIREMENT:38,PHYSICAL_REQUIREMENT:39,DESIGN_CONSTRAINT:40,LOW_RISK:41,MED_RISK:42,HIGH_RISK:43,VERIFY_ANALYSIS:44,VERIFY_DEMONSTRATION:45,VERIFY_INSPECTION:46,VERIFY_TEST:47,ELEMENT:48,elementName:49,elementBody:50,TYPE:51,type:52,DOCREF:53,ref:54,END_ARROW_L:55,relationship:56,LINE:57,END_ARROW_R:58,CONTAINS:59,COPIES:60,DERIVES:61,SATISFIES:62,VERIFIES:63,REFINES:64,TRACES:65,unqString:66,qString:67,$accept:0,$end:1},terminals_:{2:"error",5:"NEWLINE",6:"RD",8:"EOF",12:":",14:"open_directive",15:"type_directive",16:"arg_directive",17:"close_directive",23:"STRUCT_START",25:"ID",26:"COLONSEP",28:"TEXT",30:"RISK",32:"VERIFYMTHD",34:"STRUCT_STOP",35:"REQUIREMENT",36:"FUNCTIONAL_REQUIREMENT",37:"INTERFACE_REQUIREMENT",38:"PERFORMANCE_REQUIREMENT",39:"PHYSICAL_REQUIREMENT",40:"DESIGN_CONSTRAINT",41:"LOW_RISK",42:"MED_RISK",43:"HIGH_RISK",44:"VERIFY_ANALYSIS",45:"VERIFY_DEMONSTRATION",46:"VERIFY_INSPECTION",47:"VERIFY_TEST",48:"ELEMENT",51:"TYPE",53:"DOCREF",55:"END_ARROW_L",57:"LINE",58:"END_ARROW_R",59:"CONTAINS",60:"COPIES",61:"DERIVES",62:"SATISFIES",63:"VERIFIES",64:"REFINES",65:"TRACES",66:"unqString",67:"qString"},productions_:[0,[3,3],[3,2],[3,4],[4,3],[4,5],[9,1],[10,1],[13,1],[11,1],[7,0],[7,2],[7,2],[7,2],[7,2],[7,2],[18,5],[24,5],[24,5],[24,5],[24,5],[24,2],[24,1],[21,1],[21,1],[21,1],[21,1],[21,1],[21,1],[31,1],[31,1],[31,1],[33,1],[33,1],[33,1],[33,1],[19,5],[50,5],[50,5],[50,2],[50,1],[20,5],[20,5],[56,1],[56,1],[56,1],[56,1],[56,1],[56,1],[56,1],[22,1],[22,1],[27,1],[27,1],[29,1],[29,1],[49,1],[49,1],[52,1],[52,1],[54,1],[54,1]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 6:r.parseDirective("%%{","open_directive");break;case 7:r.parseDirective(a[s],"type_directive");break;case 8:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 9:r.parseDirective("}%%","close_directive","pie");break;case 10:this.$=[];break;case 16:r.addRequirement(a[s-3],a[s-4]);break;case 17:r.setNewReqId(a[s-2]);break;case 18:r.setNewReqText(a[s-2]);break;case 19:r.setNewReqRisk(a[s-2]);break;case 20:r.setNewReqVerifyMethod(a[s-2]);break;case 23:this.$=r.RequirementType.REQUIREMENT;break;case 24:this.$=r.RequirementType.FUNCTIONAL_REQUIREMENT;break;case 25:this.$=r.RequirementType.INTERFACE_REQUIREMENT;break;case 26:this.$=r.RequirementType.PERFORMANCE_REQUIREMENT;break;case 27:this.$=r.RequirementType.PHYSICAL_REQUIREMENT;break;case 28:this.$=r.RequirementType.DESIGN_CONSTRAINT;break;case 29:this.$=r.RiskLevel.LOW_RISK;break;case 30:this.$=r.RiskLevel.MED_RISK;break;case 31:this.$=r.RiskLevel.HIGH_RISK;break;case 32:this.$=r.VerifyType.VERIFY_ANALYSIS;break;case 33:this.$=r.VerifyType.VERIFY_DEMONSTRATION;break;case 34:this.$=r.VerifyType.VERIFY_INSPECTION;break;case 35:this.$=r.VerifyType.VERIFY_TEST;break;case 36:r.addElement(a[s-3]);break;case 37:r.setNewElementType(a[s-2]);break;case 38:r.setNewElementDocRef(a[s-2]);break;case 41:r.addRelationship(a[s-2],a[s],a[s-4]);break;case 42:r.addRelationship(a[s-2],a[s-4],a[s]);break;case 43:this.$=r.Relationships.CONTAINS;break;case 44:this.$=r.Relationships.COPIES;break;case 45:this.$=r.Relationships.DERIVES;break;case 46:this.$=r.Relationships.SATISFIES;break;case 47:this.$=r.Relationships.VERIFIES;break;case 48:this.$=r.Relationships.REFINES;break;case 49:this.$=r.Relationships.TRACES}},table:[{3:1,4:2,6:e,9:4,14:n},{1:[3]},{3:7,4:2,5:[1,6],6:e,9:4,14:n},{5:[1,8]},{10:9,15:[1,10]},{15:[2,6]},{3:11,4:2,6:e,9:4,14:n},{1:[2,2]},{4:16,5:r,7:12,8:i,9:4,14:n,18:13,19:14,20:15,21:18,27:20,35:a,36:o,37:s,38:c,39:u,40:l,48:h,66:f,67:d},{11:29,12:[1,30],17:p},t([12,17],[2,7]),{1:[2,1]},{8:[1,32]},{4:16,5:r,7:33,8:i,9:4,14:n,18:13,19:14,20:15,21:18,27:20,35:a,36:o,37:s,38:c,39:u,40:l,48:h,66:f,67:d},{4:16,5:r,7:34,8:i,9:4,14:n,18:13,19:14,20:15,21:18,27:20,35:a,36:o,37:s,38:c,39:u,40:l,48:h,66:f,67:d},{4:16,5:r,7:35,8:i,9:4,14:n,18:13,19:14,20:15,21:18,27:20,35:a,36:o,37:s,38:c,39:u,40:l,48:h,66:f,67:d},{4:16,5:r,7:36,8:i,9:4,14:n,18:13,19:14,20:15,21:18,27:20,35:a,36:o,37:s,38:c,39:u,40:l,48:h,66:f,67:d},{4:16,5:r,7:37,8:i,9:4,14:n,18:13,19:14,20:15,21:18,27:20,35:a,36:o,37:s,38:c,39:u,40:l,48:h,66:f,67:d},{22:38,66:[1,39],67:[1,40]},{49:41,66:[1,42],67:[1,43]},{55:[1,44],57:[1,45]},t(y,[2,23]),t(y,[2,24]),t(y,[2,25]),t(y,[2,26]),t(y,[2,27]),t(y,[2,28]),t(g,[2,52]),t(g,[2,53]),t(m,[2,4]),{13:46,16:[1,47]},t(m,[2,9]),{1:[2,3]},{8:[2,11]},{8:[2,12]},{8:[2,13]},{8:[2,14]},{8:[2,15]},{23:[1,48]},{23:[2,50]},{23:[2,51]},{23:[1,49]},{23:[2,56]},{23:[2,57]},{56:50,59:v,60:b,61:_,62:x,63:w,64:k,65:T},{56:58,59:v,60:b,61:_,62:x,63:w,64:k,65:T},{11:59,17:p},{17:[2,8]},{5:[1,60]},{5:[1,61]},{57:[1,62]},t(E,[2,43]),t(E,[2,44]),t(E,[2,45]),t(E,[2,46]),t(E,[2,47]),t(E,[2,48]),t(E,[2,49]),{58:[1,63]},t(m,[2,5]),{5:C,24:64,25:S,28:A,30:M,32:N,34:D},{5:O,34:B,50:71,51:L,53:I},{27:76,66:f,67:d},{27:77,66:f,67:d},t(R,[2,16]),{26:[1,78]},{26:[1,79]},{26:[1,80]},{26:[1,81]},{5:C,24:82,25:S,28:A,30:M,32:N,34:D},t(R,[2,22]),t(R,[2,36]),{26:[1,83]},{26:[1,84]},{5:O,34:B,50:85,51:L,53:I},t(R,[2,40]),t(R,[2,41]),t(R,[2,42]),{27:86,66:f,67:d},{29:87,66:[1,88],67:[1,89]},{31:90,41:[1,91],42:[1,92],43:[1,93]},{33:94,44:[1,95],45:[1,96],46:[1,97],47:[1,98]},t(R,[2,21]),{52:99,66:[1,100],67:[1,101]},{54:102,66:[1,103],67:[1,104]},t(R,[2,39]),{5:[1,105]},{5:[1,106]},{5:[2,54]},{5:[2,55]},{5:[1,107]},{5:[2,29]},{5:[2,30]},{5:[2,31]},{5:[1,108]},{5:[2,32]},{5:[2,33]},{5:[2,34]},{5:[2,35]},{5:[1,109]},{5:[2,58]},{5:[2,59]},{5:[1,110]},{5:[2,60]},{5:[2,61]},{5:C,24:111,25:S,28:A,30:M,32:N,34:D},{5:C,24:112,25:S,28:A,30:M,32:N,34:D},{5:C,24:113,25:S,28:A,30:M,32:N,34:D},{5:C,24:114,25:S,28:A,30:M,32:N,34:D},{5:O,34:B,50:115,51:L,53:I},{5:O,34:B,50:116,51:L,53:I},t(R,[2,17]),t(R,[2,18]),t(R,[2,19]),t(R,[2,20]),t(R,[2,37]),t(R,[2,38])],defaultActions:{5:[2,6],7:[2,2],11:[2,1],32:[2,3],33:[2,11],34:[2,12],35:[2,13],36:[2,14],37:[2,15],39:[2,50],40:[2,51],42:[2,56],43:[2,57],47:[2,8],88:[2,54],89:[2,55],91:[2,29],92:[2,30],93:[2,31],95:[2,32],96:[2,33],97:[2,34],98:[2,35],100:[2,58],101:[2,59],103:[2,60],104:[2,61]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),y={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(y.yy[g]=this.yy[g]);p.setInput(t,y.yy),y.yy.lexer=p,y.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var m=p.yylloc;a.push(m);var v=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var _,x,w,k,T,E,C,S,A,M={};;){if(w=n[n.length-1],this.defaultActions[w]?k=this.defaultActions[w]:(null==_&&(_=b()),k=o[w]&&o[w][_]),void 0===k||!k.length||!k[0]){var N="";for(E in A=[],o[w])this.terminals_[E]&&E>h&&A.push("'"+this.terminals_[E]+"'");N=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[_]||_)+"'":"Parse error on line "+(c+1)+": Unexpected "+(_==f?"end of input":"'"+(this.terminals_[_]||_)+"'"),this.parseError(N,{text:p.match,token:this.terminals_[_]||_,line:p.yylineno,loc:m,expected:A})}if(k[0]instanceof Array&&k.length>1)throw new Error("Parse Error: multiple actions possible at state: "+w+", token: "+_);switch(k[0]){case 1:n.push(_),i.push(p.yytext),a.push(p.yylloc),n.push(k[1]),_=null,x?(_=x,x=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,m=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[k[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},v&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(T=this.performAction.apply(M,[s,u,c,y.yy,k[1],i,a].concat(d))))return T;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[k[1]][0]),i.push(M.$),a.push(M._$),S=o[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},P={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){return this.next()||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),14;case 1:return this.begin("type_directive"),15;case 2:return this.popState(),this.begin("arg_directive"),12;case 3:return this.popState(),this.popState(),17;case 4:return 16;case 5:return 5;case 6:case 7:case 8:break;case 9:return 8;case 10:return 6;case 11:return 23;case 12:return 34;case 13:return 26;case 14:return 25;case 15:return 28;case 16:return 30;case 17:return 32;case 18:return 35;case 19:return 36;case 20:return 37;case 21:return 38;case 22:return 39;case 23:return 40;case 24:return 41;case 25:return 42;case 26:return 43;case 27:return 44;case 28:return 45;case 29:return 46;case 30:return 47;case 31:return 48;case 32:return 59;case 33:return 60;case 34:return 61;case 35:return 62;case 36:return 63;case 37:return 64;case 38:return 65;case 39:return 51;case 40:return 53;case 41:return 55;case 42:return 58;case 43:return 57;case 44:this.begin("string");break;case 45:this.popState();break;case 46:return"qString";case 47:return e.yytext=e.yytext.trim(),66}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:(\r?\n)+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:$)/i,/^(?:requirementDiagram\b)/i,/^(?:\{)/i,/^(?:\})/i,/^(?::)/i,/^(?:id\b)/i,/^(?:text\b)/i,/^(?:risk\b)/i,/^(?:verifyMethod\b)/i,/^(?:requirement\b)/i,/^(?:functionalRequirement\b)/i,/^(?:interfaceRequirement\b)/i,/^(?:performanceRequirement\b)/i,/^(?:physicalRequirement\b)/i,/^(?:designConstraint\b)/i,/^(?:low\b)/i,/^(?:medium\b)/i,/^(?:high\b)/i,/^(?:analysis\b)/i,/^(?:demonstration\b)/i,/^(?:inspection\b)/i,/^(?:test\b)/i,/^(?:element\b)/i,/^(?:contains\b)/i,/^(?:copies\b)/i,/^(?:derives\b)/i,/^(?:satisfies\b)/i,/^(?:verifies\b)/i,/^(?:refines\b)/i,/^(?:traces\b)/i,/^(?:type\b)/i,/^(?:docref\b)/i,/^(?:<-)/i,/^(?:->)/i,/^(?:-)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[\w][^\r\n\{\<\>\-\=]*)/i],conditions:{close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},unqString:{rules:[],inclusive:!1},token:{rules:[],inclusive:!1},string:{rules:[45,46],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,47],inclusive:!0}}};function j(){this.yy={}}return F.lexer=P,j.prototype=F,F.Parser=j,new j}();e.parser=r,e.Parser=r.Parser,e.parse=function(){return r.parse.apply(r,arguments)},e.main=function(t){t[1]||(console.log("Usage: "+t[0]+" FILE"),process.exit(1));var r=n(8800).readFileSync(n(6470).normalize(t[1]),"utf8");return e.parser.parse(r)},n.c[n.s]===t&&e.main(process.argv.slice(1))},6876:(t,e,n)=>{t=n.nmd(t);var r=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,2],n=[1,3],r=[1,5],i=[1,7],a=[2,5],o=[1,15],s=[1,17],c=[1,18],u=[1,19],l=[1,21],h=[1,22],f=[1,23],d=[1,29],p=[1,30],y=[1,31],g=[1,32],m=[1,33],v=[1,34],b=[1,37],_=[1,38],x=[1,39],w=[1,40],k=[1,41],T=[1,42],E=[1,45],C=[1,4,5,16,20,22,23,24,30,32,33,34,35,36,38,40,41,42,46,47,48,49,57,67],S=[1,58],A=[4,5,16,20,22,23,24,30,32,33,34,35,36,38,42,46,47,48,49,57,67],M=[4,5,16,20,22,23,24,30,32,33,34,35,36,38,41,42,46,47,48,49,57,67],N=[4,5,16,20,22,23,24,30,32,33,34,35,36,38,40,42,46,47,48,49,57,67],D=[55,56,57],O=[1,4,5,7,16,20,22,23,24,30,32,33,34,35,36,38,40,41,42,46,47,48,49,57,67],B={trace:function(){},yy:{},symbols_:{error:2,start:3,SPACE:4,NEWLINE:5,directive:6,SD:7,document:8,line:9,statement:10,openDirective:11,typeDirective:12,closeDirective:13,":":14,argDirective:15,participant:16,actor:17,AS:18,restOfLine:19,participant_actor:20,signal:21,autonumber:22,activate:23,deactivate:24,note_statement:25,links_statement:26,link_statement:27,properties_statement:28,details_statement:29,title:30,text2:31,loop:32,end:33,rect:34,opt:35,alt:36,else_sections:37,par:38,par_sections:39,and:40,else:41,note:42,placement:43,over:44,actor_pair:45,links:46,link:47,properties:48,details:49,spaceList:50,",":51,left_of:52,right_of:53,signaltype:54,"+":55,"-":56,ACTOR:57,SOLID_OPEN_ARROW:58,DOTTED_OPEN_ARROW:59,SOLID_ARROW:60,DOTTED_ARROW:61,SOLID_CROSS:62,DOTTED_CROSS:63,SOLID_POINT:64,DOTTED_POINT:65,TXT:66,open_directive:67,type_directive:68,arg_directive:69,close_directive:70,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NEWLINE",7:"SD",14:":",16:"participant",18:"AS",19:"restOfLine",20:"participant_actor",22:"autonumber",23:"activate",24:"deactivate",30:"title",32:"loop",33:"end",34:"rect",35:"opt",36:"alt",38:"par",40:"and",41:"else",42:"note",44:"over",46:"links",47:"link",48:"properties",49:"details",51:",",52:"left_of",53:"right_of",55:"+",56:"-",57:"ACTOR",58:"SOLID_OPEN_ARROW",59:"DOTTED_OPEN_ARROW",60:"SOLID_ARROW",61:"DOTTED_ARROW",62:"SOLID_CROSS",63:"DOTTED_CROSS",64:"SOLID_POINT",65:"DOTTED_POINT",66:"TXT",67:"open_directive",68:"type_directive",69:"arg_directive",70:"close_directive"},productions_:[0,[3,2],[3,2],[3,2],[3,2],[8,0],[8,2],[9,2],[9,1],[9,1],[6,4],[6,6],[10,5],[10,3],[10,5],[10,3],[10,2],[10,1],[10,3],[10,3],[10,2],[10,2],[10,2],[10,2],[10,2],[10,3],[10,4],[10,4],[10,4],[10,4],[10,4],[10,1],[39,1],[39,4],[37,1],[37,4],[25,4],[25,4],[26,3],[27,3],[28,3],[29,3],[50,2],[50,1],[45,3],[45,1],[43,1],[43,1],[21,5],[21,5],[21,4],[17,1],[54,1],[54,1],[54,1],[54,1],[54,1],[54,1],[54,1],[54,1],[31,1],[11,1],[12,1],[15,1],[13,1]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 4:return r.apply(a[s]),a[s];case 5:case 9:this.$=[];break;case 6:a[s-1].push(a[s]),this.$=a[s-1];break;case 7:case 8:case 45:this.$=a[s];break;case 12:a[s-3].type="addParticipant",a[s-3].description=r.parseMessage(a[s-1]),this.$=a[s-3];break;case 13:a[s-1].type="addParticipant",this.$=a[s-1];break;case 14:a[s-3].type="addActor",a[s-3].description=r.parseMessage(a[s-1]),this.$=a[s-3];break;case 15:a[s-1].type="addActor",this.$=a[s-1];break;case 17:r.enableSequenceNumbers();break;case 18:this.$={type:"activeStart",signalType:r.LINETYPE.ACTIVE_START,actor:a[s-1]};break;case 19:this.$={type:"activeEnd",signalType:r.LINETYPE.ACTIVE_END,actor:a[s-1]};break;case 25:this.$=[{type:"setTitle",text:a[s-1]}];break;case 26:a[s-1].unshift({type:"loopStart",loopText:r.parseMessage(a[s-2]),signalType:r.LINETYPE.LOOP_START}),a[s-1].push({type:"loopEnd",loopText:a[s-2],signalType:r.LINETYPE.LOOP_END}),this.$=a[s-1];break;case 27:a[s-1].unshift({type:"rectStart",color:r.parseMessage(a[s-2]),signalType:r.LINETYPE.RECT_START}),a[s-1].push({type:"rectEnd",color:r.parseMessage(a[s-2]),signalType:r.LINETYPE.RECT_END}),this.$=a[s-1];break;case 28:a[s-1].unshift({type:"optStart",optText:r.parseMessage(a[s-2]),signalType:r.LINETYPE.OPT_START}),a[s-1].push({type:"optEnd",optText:r.parseMessage(a[s-2]),signalType:r.LINETYPE.OPT_END}),this.$=a[s-1];break;case 29:a[s-1].unshift({type:"altStart",altText:r.parseMessage(a[s-2]),signalType:r.LINETYPE.ALT_START}),a[s-1].push({type:"altEnd",signalType:r.LINETYPE.ALT_END}),this.$=a[s-1];break;case 30:a[s-1].unshift({type:"parStart",parText:r.parseMessage(a[s-2]),signalType:r.LINETYPE.PAR_START}),a[s-1].push({type:"parEnd",signalType:r.LINETYPE.PAR_END}),this.$=a[s-1];break;case 33:this.$=a[s-3].concat([{type:"and",parText:r.parseMessage(a[s-1]),signalType:r.LINETYPE.PAR_AND},a[s]]);break;case 35:this.$=a[s-3].concat([{type:"else",altText:r.parseMessage(a[s-1]),signalType:r.LINETYPE.ALT_ELSE},a[s]]);break;case 36:this.$=[a[s-1],{type:"addNote",placement:a[s-2],actor:a[s-1].actor,text:a[s]}];break;case 37:a[s-2]=[].concat(a[s-1],a[s-1]).slice(0,2),a[s-2][0]=a[s-2][0].actor,a[s-2][1]=a[s-2][1].actor,this.$=[a[s-1],{type:"addNote",placement:r.PLACEMENT.OVER,actor:a[s-2].slice(0,2),text:a[s]}];break;case 38:this.$=[a[s-1],{type:"addLinks",actor:a[s-1].actor,text:a[s]}];break;case 39:this.$=[a[s-1],{type:"addALink",actor:a[s-1].actor,text:a[s]}];break;case 40:this.$=[a[s-1],{type:"addProperties",actor:a[s-1].actor,text:a[s]}];break;case 41:this.$=[a[s-1],{type:"addDetails",actor:a[s-1].actor,text:a[s]}];break;case 44:this.$=[a[s-2],a[s]];break;case 46:this.$=r.PLACEMENT.LEFTOF;break;case 47:this.$=r.PLACEMENT.RIGHTOF;break;case 48:this.$=[a[s-4],a[s-1],{type:"addMessage",from:a[s-4].actor,to:a[s-1].actor,signalType:a[s-3],msg:a[s]},{type:"activeStart",signalType:r.LINETYPE.ACTIVE_START,actor:a[s-1]}];break;case 49:this.$=[a[s-4],a[s-1],{type:"addMessage",from:a[s-4].actor,to:a[s-1].actor,signalType:a[s-3],msg:a[s]},{type:"activeEnd",signalType:r.LINETYPE.ACTIVE_END,actor:a[s-4]}];break;case 50:this.$=[a[s-3],a[s-1],{type:"addMessage",from:a[s-3].actor,to:a[s-1].actor,signalType:a[s-2],msg:a[s]}];break;case 51:this.$={type:"addParticipant",actor:a[s]};break;case 52:this.$=r.LINETYPE.SOLID_OPEN;break;case 53:this.$=r.LINETYPE.DOTTED_OPEN;break;case 54:this.$=r.LINETYPE.SOLID;break;case 55:this.$=r.LINETYPE.DOTTED;break;case 56:this.$=r.LINETYPE.SOLID_CROSS;break;case 57:this.$=r.LINETYPE.DOTTED_CROSS;break;case 58:this.$=r.LINETYPE.SOLID_POINT;break;case 59:this.$=r.LINETYPE.DOTTED_POINT;break;case 60:this.$=r.parseMessage(a[s].trim().substring(1));break;case 61:r.parseDirective("%%{","open_directive");break;case 62:r.parseDirective(a[s],"type_directive");break;case 63:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 64:r.parseDirective("}%%","close_directive","sequence")}},table:[{3:1,4:e,5:n,6:4,7:r,11:6,67:i},{1:[3]},{3:8,4:e,5:n,6:4,7:r,11:6,67:i},{3:9,4:e,5:n,6:4,7:r,11:6,67:i},{3:10,4:e,5:n,6:4,7:r,11:6,67:i},t([1,4,5,16,20,22,23,24,30,32,34,35,36,38,42,46,47,48,49,57,67],a,{8:11}),{12:12,68:[1,13]},{68:[2,61]},{1:[2,1]},{1:[2,2]},{1:[2,3]},{1:[2,4],4:o,5:s,6:35,9:14,10:16,11:6,16:c,17:36,20:u,21:20,22:l,23:h,24:f,25:24,26:25,27:26,28:27,29:28,30:d,32:p,34:y,35:g,36:m,38:v,42:b,46:_,47:x,48:w,49:k,57:T,67:i},{13:43,14:[1,44],70:E},t([14,70],[2,62]),t(C,[2,6]),{6:35,10:46,11:6,16:c,17:36,20:u,21:20,22:l,23:h,24:f,25:24,26:25,27:26,28:27,29:28,30:d,32:p,34:y,35:g,36:m,38:v,42:b,46:_,47:x,48:w,49:k,57:T,67:i},t(C,[2,8]),t(C,[2,9]),{17:47,57:T},{17:48,57:T},{5:[1,49]},t(C,[2,17]),{17:50,57:T},{17:51,57:T},{5:[1,52]},{5:[1,53]},{5:[1,54]},{5:[1,55]},{5:[1,56]},{31:57,66:S},{19:[1,59]},{19:[1,60]},{19:[1,61]},{19:[1,62]},{19:[1,63]},t(C,[2,31]),{54:64,58:[1,65],59:[1,66],60:[1,67],61:[1,68],62:[1,69],63:[1,70],64:[1,71],65:[1,72]},{43:73,44:[1,74],52:[1,75],53:[1,76]},{17:77,57:T},{17:78,57:T},{17:79,57:T},{17:80,57:T},t([5,18,51,58,59,60,61,62,63,64,65,66],[2,51]),{5:[1,81]},{15:82,69:[1,83]},{5:[2,64]},t(C,[2,7]),{5:[1,85],18:[1,84]},{5:[1,87],18:[1,86]},t(C,[2,16]),{5:[1,88]},{5:[1,89]},t(C,[2,20]),t(C,[2,21]),t(C,[2,22]),t(C,[2,23]),t(C,[2,24]),{5:[1,90]},{5:[2,60]},t(A,a,{8:91}),t(A,a,{8:92}),t(A,a,{8:93}),t(M,a,{37:94,8:95}),t(N,a,{39:96,8:97}),{17:100,55:[1,98],56:[1,99],57:T},t(D,[2,52]),t(D,[2,53]),t(D,[2,54]),t(D,[2,55]),t(D,[2,56]),t(D,[2,57]),t(D,[2,58]),t(D,[2,59]),{17:101,57:T},{17:103,45:102,57:T},{57:[2,46]},{57:[2,47]},{31:104,66:S},{31:105,66:S},{31:106,66:S},{31:107,66:S},t(O,[2,10]),{13:108,70:E},{70:[2,63]},{19:[1,109]},t(C,[2,13]),{19:[1,110]},t(C,[2,15]),t(C,[2,18]),t(C,[2,19]),t(C,[2,25]),{4:o,5:s,6:35,9:14,10:16,11:6,16:c,17:36,20:u,21:20,22:l,23:h,24:f,25:24,26:25,27:26,28:27,29:28,30:d,32:p,33:[1,111],34:y,35:g,36:m,38:v,42:b,46:_,47:x,48:w,49:k,57:T,67:i},{4:o,5:s,6:35,9:14,10:16,11:6,16:c,17:36,20:u,21:20,22:l,23:h,24:f,25:24,26:25,27:26,28:27,29:28,30:d,32:p,33:[1,112],34:y,35:g,36:m,38:v,42:b,46:_,47:x,48:w,49:k,57:T,67:i},{4:o,5:s,6:35,9:14,10:16,11:6,16:c,17:36,20:u,21:20,22:l,23:h,24:f,25:24,26:25,27:26,28:27,29:28,30:d,32:p,33:[1,113],34:y,35:g,36:m,38:v,42:b,46:_,47:x,48:w,49:k,57:T,67:i},{33:[1,114]},{4:o,5:s,6:35,9:14,10:16,11:6,16:c,17:36,20:u,21:20,22:l,23:h,24:f,25:24,26:25,27:26,28:27,29:28,30:d,32:p,33:[2,34],34:y,35:g,36:m,38:v,41:[1,115],42:b,46:_,47:x,48:w,49:k,57:T,67:i},{33:[1,116]},{4:o,5:s,6:35,9:14,10:16,11:6,16:c,17:36,20:u,21:20,22:l,23:h,24:f,25:24,26:25,27:26,28:27,29:28,30:d,32:p,33:[2,32],34:y,35:g,36:m,38:v,40:[1,117],42:b,46:_,47:x,48:w,49:k,57:T,67:i},{17:118,57:T},{17:119,57:T},{31:120,66:S},{31:121,66:S},{31:122,66:S},{51:[1,123],66:[2,45]},{5:[2,38]},{5:[2,39]},{5:[2,40]},{5:[2,41]},{5:[1,124]},{5:[1,125]},{5:[1,126]},t(C,[2,26]),t(C,[2,27]),t(C,[2,28]),t(C,[2,29]),{19:[1,127]},t(C,[2,30]),{19:[1,128]},{31:129,66:S},{31:130,66:S},{5:[2,50]},{5:[2,36]},{5:[2,37]},{17:131,57:T},t(O,[2,11]),t(C,[2,12]),t(C,[2,14]),t(M,a,{8:95,37:132}),t(N,a,{8:97,39:133}),{5:[2,48]},{5:[2,49]},{66:[2,44]},{33:[2,35]},{33:[2,33]}],defaultActions:{7:[2,61],8:[2,1],9:[2,2],10:[2,3],45:[2,64],58:[2,60],75:[2,46],76:[2,47],83:[2,63],104:[2,38],105:[2,39],106:[2,40],107:[2,41],120:[2,50],121:[2,36],122:[2,37],129:[2,48],130:[2,49],131:[2,44],132:[2,35],133:[2,33]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),y={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(y.yy[g]=this.yy[g]);p.setInput(t,y.yy),y.yy.lexer=p,y.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var m=p.yylloc;a.push(m);var v=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var _,x,w,k,T,E,C,S,A,M={};;){if(w=n[n.length-1],this.defaultActions[w]?k=this.defaultActions[w]:(null==_&&(_=b()),k=o[w]&&o[w][_]),void 0===k||!k.length||!k[0]){var N="";for(E in A=[],o[w])this.terminals_[E]&&E>h&&A.push("'"+this.terminals_[E]+"'");N=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[_]||_)+"'":"Parse error on line "+(c+1)+": Unexpected "+(_==f?"end of input":"'"+(this.terminals_[_]||_)+"'"),this.parseError(N,{text:p.match,token:this.terminals_[_]||_,line:p.yylineno,loc:m,expected:A})}if(k[0]instanceof Array&&k.length>1)throw new Error("Parse Error: multiple actions possible at state: "+w+", token: "+_);switch(k[0]){case 1:n.push(_),i.push(p.yytext),a.push(p.yylloc),n.push(k[1]),_=null,x?(_=x,x=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,m=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[k[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},v&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(T=this.performAction.apply(M,[s,u,c,y.yy,k[1],i,a].concat(d))))return T;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[k[1]][0]),i.push(M.$),a.push(M._$),S=o[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},L={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){return this.next()||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),67;case 1:return this.begin("type_directive"),68;case 2:return this.popState(),this.begin("arg_directive"),14;case 3:return this.popState(),this.popState(),70;case 4:return 69;case 5:case 39:case 52:return 5;case 6:case 7:case 8:case 9:case 10:break;case 11:return this.begin("ID"),16;case 12:return this.begin("ID"),20;case 13:return e.yytext=e.yytext.trim(),this.begin("ALIAS"),57;case 14:return this.popState(),this.popState(),this.begin("LINE"),18;case 15:return this.popState(),this.popState(),5;case 16:return this.begin("LINE"),32;case 17:return this.begin("LINE"),34;case 18:return this.begin("LINE"),35;case 19:return this.begin("LINE"),36;case 20:return this.begin("LINE"),41;case 21:return this.begin("LINE"),38;case 22:return this.begin("LINE"),40;case 23:return this.popState(),19;case 24:return 33;case 25:return 52;case 26:return 53;case 27:return 46;case 28:return 47;case 29:return 48;case 30:return 49;case 31:return 44;case 32:return 42;case 33:return this.begin("ID"),23;case 34:return this.begin("ID"),24;case 35:return 30;case 36:return 7;case 37:return 22;case 38:return 51;case 40:return e.yytext=e.yytext.trim(),57;case 41:return 60;case 42:return 61;case 43:return 58;case 44:return 59;case 45:return 62;case 46:return 63;case 47:return 64;case 48:return 65;case 49:return 66;case 50:return 55;case 51:return 56;case 53:return"INVALID"}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:participant\b)/i,/^(?:actor\b)/i,/^(?:[^\->:\n,;]+?(?=((?!\n)\s)+as(?!\n)\s|[#\n;]|$))/i,/^(?:as\b)/i,/^(?:(?:))/i,/^(?:loop\b)/i,/^(?:rect\b)/i,/^(?:opt\b)/i,/^(?:alt\b)/i,/^(?:else\b)/i,/^(?:par\b)/i,/^(?:and\b)/i,/^(?:(?:[:]?(?:no)?wrap)?[^#\n;]*)/i,/^(?:end\b)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:links\b)/i,/^(?:link\b)/i,/^(?:properties\b)/i,/^(?:details\b)/i,/^(?:over\b)/i,/^(?:note\b)/i,/^(?:activate\b)/i,/^(?:deactivate\b)/i,/^(?:title\b)/i,/^(?:sequenceDiagram\b)/i,/^(?:autonumber\b)/i,/^(?:,)/i,/^(?:;)/i,/^(?:[^\+\->:\n,;]+((?!(-x|--x|-\)|--\)))[\-]*[^\+\->:\n,;]+)*)/i,/^(?:->>)/i,/^(?:-->>)/i,/^(?:->)/i,/^(?:-->)/i,/^(?:-[x])/i,/^(?:--[x])/i,/^(?:-[\)])/i,/^(?:--[\)])/i,/^(?::(?:(?:no)?wrap)?[^#\n;]+)/i,/^(?:\+)/i,/^(?:-)/i,/^(?:$)/i,/^(?:.)/i],conditions:{open_directive:{rules:[1,8],inclusive:!1},type_directive:{rules:[2,3,8],inclusive:!1},arg_directive:{rules:[3,4,8],inclusive:!1},ID:{rules:[7,8,13],inclusive:!1},ALIAS:{rules:[7,8,14,15],inclusive:!1},LINE:{rules:[7,8,23],inclusive:!1},INITIAL:{rules:[0,5,6,8,9,10,11,12,16,17,18,19,20,21,22,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53],inclusive:!0}}};function I(){this.yy={}}return B.lexer=L,I.prototype=B,B.Parser=I,new I}();e.parser=r,e.Parser=r.Parser,e.parse=function(){return r.parse.apply(r,arguments)},e.main=function(t){t[1]||(console.log("Usage: "+t[0]+" FILE"),process.exit(1));var r=n(1993).readFileSync(n(6470).normalize(t[1]),"utf8");return e.parser.parse(r)},n.c[n.s]===t&&e.main(process.argv.slice(1))},3584:(t,e,n)=>{t=n.nmd(t);var r=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,2],n=[1,3],r=[1,5],i=[1,7],a=[2,5],o=[1,15],s=[1,17],c=[1,19],u=[1,20],l=[1,21],h=[1,22],f=[1,30],d=[1,23],p=[1,24],y=[1,25],g=[1,26],m=[1,27],v=[1,32],b=[1,33],_=[1,34],x=[1,35],w=[1,31],k=[1,38],T=[1,4,5,14,15,17,19,20,22,23,24,25,26,27,36,37,38,39,42,45],E=[1,4,5,12,13,14,15,17,19,20,22,23,24,25,26,27,36,37,38,39,42,45],C=[1,4,5,7,14,15,17,19,20,22,23,24,25,26,27,36,37,38,39,42,45],S=[4,5,14,15,17,19,20,22,23,24,25,26,27,36,37,38,39,42,45],A={trace:function(){},yy:{},symbols_:{error:2,start:3,SPACE:4,NL:5,directive:6,SD:7,document:8,line:9,statement:10,idStatement:11,DESCR:12,"--\x3e":13,HIDE_EMPTY:14,scale:15,WIDTH:16,COMPOSIT_STATE:17,STRUCT_START:18,STRUCT_STOP:19,STATE_DESCR:20,AS:21,ID:22,FORK:23,JOIN:24,CHOICE:25,CONCURRENT:26,note:27,notePosition:28,NOTE_TEXT:29,direction:30,openDirective:31,typeDirective:32,closeDirective:33,":":34,argDirective:35,direction_tb:36,direction_bt:37,direction_rl:38,direction_lr:39,eol:40,";":41,EDGE_STATE:42,left_of:43,right_of:44,open_directive:45,type_directive:46,arg_directive:47,close_directive:48,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NL",7:"SD",12:"DESCR",13:"--\x3e",14:"HIDE_EMPTY",15:"scale",16:"WIDTH",17:"COMPOSIT_STATE",18:"STRUCT_START",19:"STRUCT_STOP",20:"STATE_DESCR",21:"AS",22:"ID",23:"FORK",24:"JOIN",25:"CHOICE",26:"CONCURRENT",27:"note",29:"NOTE_TEXT",34:":",36:"direction_tb",37:"direction_bt",38:"direction_rl",39:"direction_lr",41:";",42:"EDGE_STATE",43:"left_of",44:"right_of",45:"open_directive",46:"type_directive",47:"arg_directive",48:"close_directive"},productions_:[0,[3,2],[3,2],[3,2],[3,2],[8,0],[8,2],[9,2],[9,1],[9,1],[10,1],[10,2],[10,3],[10,4],[10,1],[10,2],[10,1],[10,4],[10,3],[10,6],[10,1],[10,1],[10,1],[10,1],[10,4],[10,4],[10,1],[10,1],[6,3],[6,5],[30,1],[30,1],[30,1],[30,1],[40,1],[40,1],[11,1],[11,1],[28,1],[28,1],[31,1],[32,1],[35,1],[33,1]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 4:return r.setRootDoc(a[s]),a[s];case 5:this.$=[];break;case 6:"nl"!=a[s]&&(a[s-1].push(a[s]),this.$=a[s-1]);break;case 7:case 8:case 36:case 37:this.$=a[s];break;case 9:this.$="nl";break;case 10:this.$={stmt:"state",id:a[s],type:"default",description:""};break;case 11:this.$={stmt:"state",id:a[s-1],type:"default",description:r.trimColon(a[s])};break;case 12:this.$={stmt:"relation",state1:{stmt:"state",id:a[s-2],type:"default",description:""},state2:{stmt:"state",id:a[s],type:"default",description:""}};break;case 13:this.$={stmt:"relation",state1:{stmt:"state",id:a[s-3],type:"default",description:""},state2:{stmt:"state",id:a[s-1],type:"default",description:""},description:a[s].substr(1).trim()};break;case 17:this.$={stmt:"state",id:a[s-3],type:"default",description:"",doc:a[s-1]};break;case 18:var c=a[s],u=a[s-2].trim();if(a[s].match(":")){var l=a[s].split(":");c=l[0],u=[u,l[1]]}this.$={stmt:"state",id:c,type:"default",description:u};break;case 19:this.$={stmt:"state",id:a[s-3],type:"default",description:a[s-5],doc:a[s-1]};break;case 20:this.$={stmt:"state",id:a[s],type:"fork"};break;case 21:this.$={stmt:"state",id:a[s],type:"join"};break;case 22:this.$={stmt:"state",id:a[s],type:"choice"};break;case 23:this.$={stmt:"state",id:r.getDividerId(),type:"divider"};break;case 24:this.$={stmt:"state",id:a[s-1].trim(),note:{position:a[s-2].trim(),text:a[s].trim()}};break;case 30:r.setDirection("TB"),this.$={stmt:"dir",value:"TB"};break;case 31:r.setDirection("BT"),this.$={stmt:"dir",value:"BT"};break;case 32:r.setDirection("RL"),this.$={stmt:"dir",value:"RL"};break;case 33:r.setDirection("LR"),this.$={stmt:"dir",value:"LR"};break;case 40:r.parseDirective("%%{","open_directive");break;case 41:r.parseDirective(a[s],"type_directive");break;case 42:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 43:r.parseDirective("}%%","close_directive","state")}},table:[{3:1,4:e,5:n,6:4,7:r,31:6,45:i},{1:[3]},{3:8,4:e,5:n,6:4,7:r,31:6,45:i},{3:9,4:e,5:n,6:4,7:r,31:6,45:i},{3:10,4:e,5:n,6:4,7:r,31:6,45:i},t([1,4,5,14,15,17,20,22,23,24,25,26,27,36,37,38,39,42,45],a,{8:11}),{32:12,46:[1,13]},{46:[2,40]},{1:[2,1]},{1:[2,2]},{1:[2,3]},{1:[2,4],4:o,5:s,6:28,9:14,10:16,11:18,14:c,15:u,17:l,20:h,22:f,23:d,24:p,25:y,26:g,27:m,30:29,31:6,36:v,37:b,38:_,39:x,42:w,45:i},{33:36,34:[1,37],48:k},t([34,48],[2,41]),t(T,[2,6]),{6:28,10:39,11:18,14:c,15:u,17:l,20:h,22:f,23:d,24:p,25:y,26:g,27:m,30:29,31:6,36:v,37:b,38:_,39:x,42:w,45:i},t(T,[2,8]),t(T,[2,9]),t(T,[2,10],{12:[1,40],13:[1,41]}),t(T,[2,14]),{16:[1,42]},t(T,[2,16],{18:[1,43]}),{21:[1,44]},t(T,[2,20]),t(T,[2,21]),t(T,[2,22]),t(T,[2,23]),{28:45,29:[1,46],43:[1,47],44:[1,48]},t(T,[2,26]),t(T,[2,27]),t(E,[2,36]),t(E,[2,37]),t(T,[2,30]),t(T,[2,31]),t(T,[2,32]),t(T,[2,33]),t(C,[2,28]),{35:49,47:[1,50]},t(C,[2,43]),t(T,[2,7]),t(T,[2,11]),{11:51,22:f,42:w},t(T,[2,15]),t(S,a,{8:52}),{22:[1,53]},{22:[1,54]},{21:[1,55]},{22:[2,38]},{22:[2,39]},{33:56,48:k},{48:[2,42]},t(T,[2,12],{12:[1,57]}),{4:o,5:s,6:28,9:14,10:16,11:18,14:c,15:u,17:l,19:[1,58],20:h,22:f,23:d,24:p,25:y,26:g,27:m,30:29,31:6,36:v,37:b,38:_,39:x,42:w,45:i},t(T,[2,18],{18:[1,59]}),{29:[1,60]},{22:[1,61]},t(C,[2,29]),t(T,[2,13]),t(T,[2,17]),t(S,a,{8:62}),t(T,[2,24]),t(T,[2,25]),{4:o,5:s,6:28,9:14,10:16,11:18,14:c,15:u,17:l,19:[1,63],20:h,22:f,23:d,24:p,25:y,26:g,27:m,30:29,31:6,36:v,37:b,38:_,39:x,42:w,45:i},t(T,[2,19])],defaultActions:{7:[2,40],8:[2,1],9:[2,2],10:[2,3],47:[2,38],48:[2,39],50:[2,42]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),y={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(y.yy[g]=this.yy[g]);p.setInput(t,y.yy),y.yy.lexer=p,y.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var m=p.yylloc;a.push(m);var v=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var _,x,w,k,T,E,C,S,A,M={};;){if(w=n[n.length-1],this.defaultActions[w]?k=this.defaultActions[w]:(null==_&&(_=b()),k=o[w]&&o[w][_]),void 0===k||!k.length||!k[0]){var N="";for(E in A=[],o[w])this.terminals_[E]&&E>h&&A.push("'"+this.terminals_[E]+"'");N=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[_]||_)+"'":"Parse error on line "+(c+1)+": Unexpected "+(_==f?"end of input":"'"+(this.terminals_[_]||_)+"'"),this.parseError(N,{text:p.match,token:this.terminals_[_]||_,line:p.yylineno,loc:m,expected:A})}if(k[0]instanceof Array&&k.length>1)throw new Error("Parse Error: multiple actions possible at state: "+w+", token: "+_);switch(k[0]){case 1:n.push(_),i.push(p.yytext),a.push(p.yylloc),n.push(k[1]),_=null,x?(_=x,x=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,m=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[k[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},v&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(T=this.performAction.apply(M,[s,u,c,y.yy,k[1],i,a].concat(d))))return T;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[k[1]][0]),i.push(M.$),a.push(M._$),S=o[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},M={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){return this.next()||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:case 26:return 36;case 1:case 27:return 37;case 2:case 28:return 38;case 3:case 29:return 39;case 4:return this.begin("open_directive"),45;case 5:return this.begin("type_directive"),46;case 6:return this.popState(),this.begin("arg_directive"),34;case 7:return this.popState(),this.popState(),48;case 8:return 47;case 9:case 10:case 12:case 13:case 14:case 15:case 39:case 45:break;case 11:case 59:return 5;case 16:return this.pushState("SCALE"),15;case 17:return 16;case 18:case 33:case 36:this.popState();break;case 19:this.pushState("STATE");break;case 20:case 23:return this.popState(),e.yytext=e.yytext.slice(0,-8).trim(),23;case 21:case 24:return this.popState(),e.yytext=e.yytext.slice(0,-8).trim(),24;case 22:case 25:return this.popState(),e.yytext=e.yytext.slice(0,-10).trim(),25;case 30:this.begin("STATE_STRING");break;case 31:return this.popState(),this.pushState("STATE_ID"),"AS";case 32:case 47:return this.popState(),"ID";case 34:return"STATE_DESCR";case 35:return 17;case 37:return this.popState(),this.pushState("struct"),18;case 38:return this.popState(),19;case 40:return this.begin("NOTE"),27;case 41:return this.popState(),this.pushState("NOTE_ID"),43;case 42:return this.popState(),this.pushState("NOTE_ID"),44;case 43:this.popState(),this.pushState("FLOATING_NOTE");break;case 44:return this.popState(),this.pushState("FLOATING_NOTE_ID"),"AS";case 46:return"NOTE_TEXT";case 48:return this.popState(),this.pushState("NOTE_TEXT"),22;case 49:return this.popState(),e.yytext=e.yytext.substr(2).trim(),29;case 50:return this.popState(),e.yytext=e.yytext.slice(0,-8).trim(),29;case 51:case 52:return 7;case 53:return 14;case 54:return 42;case 55:return 22;case 56:return e.yytext=e.yytext.trim(),12;case 57:return 13;case 58:return 26;case 60:return"INVALID"}},rules:[/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:[\s]+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:scale\s+)/i,/^(?:\d+)/i,/^(?:\s+width\b)/i,/^(?:state\s+)/i,/^(?:.*<>)/i,/^(?:.*<>)/i,/^(?:.*<>)/i,/^(?:.*\[\[fork\]\])/i,/^(?:.*\[\[join\]\])/i,/^(?:.*\[\[choice\]\])/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:["])/i,/^(?:\s*as\s+)/i,/^(?:[^\n\{]*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n\s\{]+)/i,/^(?:\n)/i,/^(?:\{)/i,/^(?:\})/i,/^(?:[\n])/i,/^(?:note\s+)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:")/i,/^(?:\s*as\s*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n]*)/i,/^(?:\s*[^:\n\s\-]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:[\s\S]*?end note\b)/i,/^(?:stateDiagram\s+)/i,/^(?:stateDiagram-v2\s+)/i,/^(?:hide empty description\b)/i,/^(?:\[\*\])/i,/^(?:[^:\n\s\-\{]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:-->)/i,/^(?:--)/i,/^(?:$)/i,/^(?:.)/i],conditions:{LINE:{rules:[13,14],inclusive:!1},close_directive:{rules:[13,14],inclusive:!1},arg_directive:{rules:[7,8,13,14],inclusive:!1},type_directive:{rules:[6,7,13,14],inclusive:!1},open_directive:{rules:[5,13,14],inclusive:!1},struct:{rules:[13,14,19,26,27,28,29,38,39,40,54,55,56,57,58],inclusive:!1},FLOATING_NOTE_ID:{rules:[47],inclusive:!1},FLOATING_NOTE:{rules:[44,45,46],inclusive:!1},NOTE_TEXT:{rules:[49,50],inclusive:!1},NOTE_ID:{rules:[48],inclusive:!1},NOTE:{rules:[41,42,43],inclusive:!1},SCALE:{rules:[17,18],inclusive:!1},ALIAS:{rules:[],inclusive:!1},STATE_ID:{rules:[32],inclusive:!1},STATE_STRING:{rules:[33,34],inclusive:!1},FORK_STATE:{rules:[],inclusive:!1},STATE:{rules:[13,14,20,21,22,23,24,25,30,31,35,36,37],inclusive:!1},ID:{rules:[13,14],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,9,10,11,12,14,15,16,19,37,40,51,52,53,54,55,56,57,59,60],inclusive:!0}}};function N(){this.yy={}}return A.lexer=M,N.prototype=A,A.Parser=N,new N}();e.parser=r,e.Parser=r.Parser,e.parse=function(){return r.parse.apply(r,arguments)},e.main=function(t){t[1]||(console.log("Usage: "+t[0]+" FILE"),process.exit(1));var r=n(3069).readFileSync(n(6470).normalize(t[1]),"utf8");return e.parser.parse(r)},n.c[n.s]===t&&e.main(process.argv.slice(1))},9763:(t,e,n)=>{t=n.nmd(t);var r=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,2],n=[1,5],r=[6,9,11,17,18,19,21],i=[1,15],a=[1,16],o=[1,17],s=[1,21],c=[4,6,9,11,17,18,19,21],u={trace:function(){},yy:{},symbols_:{error:2,start:3,journey:4,document:5,EOF:6,directive:7,line:8,SPACE:9,statement:10,NEWLINE:11,openDirective:12,typeDirective:13,closeDirective:14,":":15,argDirective:16,title:17,section:18,taskName:19,taskData:20,open_directive:21,type_directive:22,arg_directive:23,close_directive:24,$accept:0,$end:1},terminals_:{2:"error",4:"journey",6:"EOF",9:"SPACE",11:"NEWLINE",15:":",17:"title",18:"section",19:"taskName",20:"taskData",21:"open_directive",22:"type_directive",23:"arg_directive",24:"close_directive"},productions_:[0,[3,3],[3,2],[5,0],[5,2],[8,2],[8,1],[8,1],[8,1],[7,4],[7,6],[10,1],[10,1],[10,2],[10,1],[12,1],[13,1],[16,1],[14,1]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 1:return a[s-1];case 3:case 7:case 8:this.$=[];break;case 4:a[s-1].push(a[s]),this.$=a[s-1];break;case 5:case 6:this.$=a[s];break;case 11:r.setTitle(a[s].substr(6)),this.$=a[s].substr(6);break;case 12:r.addSection(a[s].substr(8)),this.$=a[s].substr(8);break;case 13:r.addTask(a[s-1],a[s]),this.$="task";break;case 15:r.parseDirective("%%{","open_directive");break;case 16:r.parseDirective(a[s],"type_directive");break;case 17:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 18:r.parseDirective("}%%","close_directive","journey")}},table:[{3:1,4:e,7:3,12:4,21:n},{1:[3]},t(r,[2,3],{5:6}),{3:7,4:e,7:3,12:4,21:n},{13:8,22:[1,9]},{22:[2,15]},{6:[1,10],7:18,8:11,9:[1,12],10:13,11:[1,14],12:4,17:i,18:a,19:o,21:n},{1:[2,2]},{14:19,15:[1,20],24:s},t([15,24],[2,16]),t(r,[2,8],{1:[2,1]}),t(r,[2,4]),{7:18,10:22,12:4,17:i,18:a,19:o,21:n},t(r,[2,6]),t(r,[2,7]),t(r,[2,11]),t(r,[2,12]),{20:[1,23]},t(r,[2,14]),{11:[1,24]},{16:25,23:[1,26]},{11:[2,18]},t(r,[2,5]),t(r,[2,13]),t(c,[2,9]),{14:27,24:s},{24:[2,17]},{11:[1,28]},t(c,[2,10])],defaultActions:{5:[2,15],7:[2,2],21:[2,18],26:[2,17]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),y={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(y.yy[g]=this.yy[g]);p.setInput(t,y.yy),y.yy.lexer=p,y.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var m=p.yylloc;a.push(m);var v=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var _,x,w,k,T,E,C,S,A,M={};;){if(w=n[n.length-1],this.defaultActions[w]?k=this.defaultActions[w]:(null==_&&(_=b()),k=o[w]&&o[w][_]),void 0===k||!k.length||!k[0]){var N="";for(E in A=[],o[w])this.terminals_[E]&&E>h&&A.push("'"+this.terminals_[E]+"'");N=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[_]||_)+"'":"Parse error on line "+(c+1)+": Unexpected "+(_==f?"end of input":"'"+(this.terminals_[_]||_)+"'"),this.parseError(N,{text:p.match,token:this.terminals_[_]||_,line:p.yylineno,loc:m,expected:A})}if(k[0]instanceof Array&&k.length>1)throw new Error("Parse Error: multiple actions possible at state: "+w+", token: "+_);switch(k[0]){case 1:n.push(_),i.push(p.yytext),a.push(p.yylloc),n.push(k[1]),_=null,x?(_=x,x=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,m=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[k[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},v&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(T=this.performAction.apply(M,[s,u,c,y.yy,k[1],i,a].concat(d))))return T;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[k[1]][0]),i.push(M.$),a.push(M._$),S=o[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},l={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){return this.next()||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),21;case 1:return this.begin("type_directive"),22;case 2:return this.popState(),this.begin("arg_directive"),15;case 3:return this.popState(),this.popState(),24;case 4:return 23;case 5:case 6:case 8:case 9:break;case 7:return 11;case 10:return 4;case 11:return 17;case 12:return 18;case 13:return 19;case 14:return 20;case 15:return 15;case 16:return 6;case 17:return"INVALID"}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:journey\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:section\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{open_directive:{rules:[1],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,11,12,13,14,15,16,17],inclusive:!0}}};function h(){this.yy={}}return u.lexer=l,h.prototype=u,u.Parser=h,new h}();e.parser=r,e.Parser=r.Parser,e.parse=function(){return r.parse.apply(r,arguments)},e.main=function(t){t[1]||(console.log("Usage: "+t[0]+" FILE"),process.exit(1));var r=n(9143).readFileSync(n(6470).normalize(t[1]),"utf8");return e.parser.parse(r)},n.c[n.s]===t&&e.main(process.argv.slice(1))},9609:t=>{"use strict";var e=/^(%20|\s)*(javascript|data)/im,n=/[^\x20-\x7E]/gim,r=/^([^:]+):/gm,i=[".","/"];t.exports={sanitizeUrl:function(t){if(!t)return"about:blank";var a,o,s=t.replace(n,"").trim();return function(t){return i.indexOf(t[0])>-1}(s)?s:(o=s.match(r))?(a=o[0],e.test(a)?"about:blank":s):"about:blank"}}},3841:t=>{t.exports=function(t,e){return t.intersect(e)}},7458:(t,e,n)=>{"use strict";n.d(e,{default:()=>hC});var r=n(1941),i=n.n(r),a={debug:1,info:2,warn:3,error:4,fatal:5},o={debug:function(){},info:function(){},warn:function(){},error:function(){},fatal:function(){}},s=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"fatal";isNaN(t)&&(t=t.toLowerCase(),void 0!==a[t]&&(t=a[t])),o.trace=function(){},o.debug=function(){},o.info=function(){},o.warn=function(){},o.error=function(){},o.fatal=function(){},t<=a.fatal&&(o.fatal=console.error?console.error.bind(console,c("FATAL"),"color: orange"):console.log.bind(console,"",c("FATAL"))),t<=a.error&&(o.error=console.error?console.error.bind(console,c("ERROR"),"color: orange"):console.log.bind(console,"",c("ERROR"))),t<=a.warn&&(o.warn=console.warn?console.warn.bind(console,c("WARN"),"color: orange"):console.log.bind(console,"",c("WARN"))),t<=a.info&&(o.info=console.info?console.info.bind(console,c("INFO"),"color: lightblue"):console.log.bind(console,"",c("INFO"))),t<=a.debug&&(o.debug=console.debug?console.debug.bind(console,c("DEBUG"),"color: lightgreen"):console.log.bind(console,"",c("DEBUG")))},c=function(t){var e=i()().format("ss.SSS");return"%c".concat(e," : ").concat(t," : ")};function u(t,e){let n;if(void 0===e)for(const e of t)null!=e&&(n=e)&&(n=e);else{let r=-1;for(let i of t)null!=(i=e(i,++r,t))&&(n=i)&&(n=i)}return n}function l(t,e){let n;if(void 0===e)for(const e of t)null!=e&&(n>e||void 0===n&&e>=e)&&(n=e);else{let r=-1;for(let i of t)null!=(i=e(i,++r,t))&&(n>i||void 0===n&&i>=i)&&(n=i)}return n}function h(t){return t}var f=1e-6;function d(t){return"translate("+t+",0)"}function p(t){return"translate(0,"+t+")"}function y(t){return e=>+t(e)}function g(t,e){return e=Math.max(0,t.bandwidth()-2*e)/2,t.round()&&(e=Math.round(e)),n=>+t(n)+e}function m(){return!this.__axis}function v(t,e){var n=[],r=null,i=null,a=6,o=6,s=3,c="undefined"!=typeof window&&window.devicePixelRatio>1?0:.5,u=1===t||4===t?-1:1,l=4===t||2===t?"x":"y",v=1===t||3===t?d:p;function b(d){var p=null==r?e.ticks?e.ticks.apply(e,n):e.domain():r,b=null==i?e.tickFormat?e.tickFormat.apply(e,n):h:i,_=Math.max(a,0)+s,x=e.range(),w=+x[0]+c,k=+x[x.length-1]+c,T=(e.bandwidth?g:y)(e.copy(),c),E=d.selection?d.selection():d,C=E.selectAll(".domain").data([null]),S=E.selectAll(".tick").data(p,e).order(),A=S.exit(),M=S.enter().append("g").attr("class","tick"),N=S.select("line"),D=S.select("text");C=C.merge(C.enter().insert("path",".tick").attr("class","domain").attr("stroke","currentColor")),S=S.merge(M),N=N.merge(M.append("line").attr("stroke","currentColor").attr(l+"2",u*a)),D=D.merge(M.append("text").attr("fill","currentColor").attr(l,u*_).attr("dy",1===t?"0em":3===t?"0.71em":"0.32em")),d!==E&&(C=C.transition(d),S=S.transition(d),N=N.transition(d),D=D.transition(d),A=A.transition(d).attr("opacity",f).attr("transform",(function(t){return isFinite(t=T(t))?v(t+c):this.getAttribute("transform")})),M.attr("opacity",f).attr("transform",(function(t){var e=this.parentNode.__axis;return v((e&&isFinite(e=e(t))?e:T(t))+c)}))),A.remove(),C.attr("d",4===t||2===t?o?"M"+u*o+","+w+"H"+c+"V"+k+"H"+u*o:"M"+c+","+w+"V"+k:o?"M"+w+","+u*o+"V"+c+"H"+k+"V"+u*o:"M"+w+","+c+"H"+k),S.attr("opacity",1).attr("transform",(function(t){return v(T(t)+c)})),N.attr(l+"2",u*a),D.attr(l,u*_).text(b),E.filter(m).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",2===t?"start":4===t?"end":"middle"),E.each((function(){this.__axis=T}))}return b.scale=function(t){return arguments.length?(e=t,b):e},b.ticks=function(){return n=Array.from(arguments),b},b.tickArguments=function(t){return arguments.length?(n=null==t?[]:Array.from(t),b):n.slice()},b.tickValues=function(t){return arguments.length?(r=null==t?null:Array.from(t),b):r&&r.slice()},b.tickFormat=function(t){return arguments.length?(i=t,b):i},b.tickSize=function(t){return arguments.length?(a=o=+t,b):a},b.tickSizeInner=function(t){return arguments.length?(a=+t,b):a},b.tickSizeOuter=function(t){return arguments.length?(o=+t,b):o},b.tickPadding=function(t){return arguments.length?(s=+t,b):s},b.offset=function(t){return arguments.length?(c=+t,b):c},b}function b(){}function _(t){return null==t?b:function(){return this.querySelector(t)}}function x(t){return null==t?[]:Array.isArray(t)?t:Array.from(t)}function w(){return[]}function k(t){return null==t?w:function(){return this.querySelectorAll(t)}}function T(t){return function(){return this.matches(t)}}function E(t){return function(e){return e.matches(t)}}var C=Array.prototype.find;function S(){return this.firstElementChild}var A=Array.prototype.filter;function M(){return Array.from(this.children)}function N(t){return new Array(t.length)}function D(t,e){this.ownerDocument=t.ownerDocument,this.namespaceURI=t.namespaceURI,this._next=null,this._parent=t,this.__data__=e}function O(t){return function(){return t}}function B(t,e,n,r,i,a){for(var o,s=0,c=e.length,u=a.length;se?1:t>=e?0:NaN}D.prototype={constructor:D,appendChild:function(t){return this._parent.insertBefore(t,this._next)},insertBefore:function(t,e){return this._parent.insertBefore(t,e)},querySelector:function(t){return this._parent.querySelector(t)},querySelectorAll:function(t){return this._parent.querySelectorAll(t)}};var P="http://www.w3.org/1999/xhtml";const j={svg:"http://www.w3.org/2000/svg",xhtml:P,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};function Y(t){var e=t+="",n=e.indexOf(":");return n>=0&&"xmlns"!==(e=t.slice(0,n))&&(t=t.slice(n+1)),j.hasOwnProperty(e)?{space:j[e],local:t}:t}function z(t){return function(){this.removeAttribute(t)}}function U(t){return function(){this.removeAttributeNS(t.space,t.local)}}function q(t,e){return function(){this.setAttribute(t,e)}}function H(t,e){return function(){this.setAttributeNS(t.space,t.local,e)}}function $(t,e){return function(){var n=e.apply(this,arguments);null==n?this.removeAttribute(t):this.setAttribute(t,n)}}function W(t,e){return function(){var n=e.apply(this,arguments);null==n?this.removeAttributeNS(t.space,t.local):this.setAttributeNS(t.space,t.local,n)}}function V(t){return t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView}function G(t){return function(){this.style.removeProperty(t)}}function X(t,e,n){return function(){this.style.setProperty(t,e,n)}}function Z(t,e,n){return function(){var r=e.apply(this,arguments);null==r?this.style.removeProperty(t):this.style.setProperty(t,r,n)}}function Q(t,e){return t.style.getPropertyValue(e)||V(t).getComputedStyle(t,null).getPropertyValue(e)}function K(t){return function(){delete this[t]}}function J(t,e){return function(){this[t]=e}}function tt(t,e){return function(){var n=e.apply(this,arguments);null==n?delete this[t]:this[t]=n}}function et(t){return t.trim().split(/^|\s+/)}function nt(t){return t.classList||new rt(t)}function rt(t){this._node=t,this._names=et(t.getAttribute("class")||"")}function it(t,e){for(var n=nt(t),r=-1,i=e.length;++r=0&&(e=t.slice(n+1),t=t.slice(0,n)),{type:t,name:e}}))}function Et(t){return function(){var e=this.__on;if(e){for(var n,r=0,i=-1,a=e.length;r=0&&(this._names.splice(e,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(t){return this._names.indexOf(t)>=0}};var Nt=[null];function Dt(t,e){this._groups=t,this._parents=e}function Ot(){return new Dt([[document.documentElement]],Nt)}Dt.prototype=Ot.prototype={constructor:Dt,select:function(t){"function"!=typeof t&&(t=_(t));for(var e=this._groups,n=e.length,r=new Array(n),i=0;i=x&&(x=_+1);!(b=g[x])&&++x=0;)(r=i[a])&&(o&&4^r.compareDocumentPosition(o)&&o.parentNode.insertBefore(r,o),o=r);return this},sort:function(t){function e(e,n){return e&&n?t(e.__data__,n.__data__):!e-!n}t||(t=F);for(var n=this._groups,r=n.length,i=new Array(r),a=0;a1?this.each((null==e?G:"function"==typeof e?Z:X)(t,e,null==n?"":n)):Q(this.node(),t)},property:function(t,e){return arguments.length>1?this.each((null==e?K:"function"==typeof e?tt:J)(t,e)):this.node()[t]},classed:function(t,e){var n=et(t+"");if(arguments.length<2){for(var r=nt(this.node()),i=-1,a=n.length;++i{}};function It(){for(var t,e=0,n=arguments.length,r={};e=0&&(n=t.slice(r+1),t=t.slice(0,r)),t&&!e.hasOwnProperty(t))throw new Error("unknown type: "+t);return{type:t,name:n}}))}function Pt(t,e){for(var n,r=0,i=t.length;r0)for(var n,r,i=new Array(n),a=0;a=0&&e._call.call(void 0,t),e=e._next;--qt}()}finally{qt=0,function(){for(var t,e,n=zt,r=1/0;n;)n._call?(r>n._time&&(r=n._time),t=n,n=n._next):(e=n._next,n._next=null,n=t?t._next=e:zt=e);Ut=t,re(r)}(),Vt=0}}function ne(){var t=Xt.now(),e=t-Wt;e>1e3&&(Gt-=e,Wt=t)}function re(t){qt||(Ht&&(Ht=clearTimeout(Ht)),t-Vt>24?(t<1/0&&(Ht=setTimeout(ee,t-Xt.now()-Gt)),$t&&($t=clearInterval($t))):($t||(Wt=Xt.now(),$t=setInterval(ne,1e3)),qt=1,Zt(ee)))}function ie(t,e,n){var r=new Jt;return e=null==e?0:+e,r.restart((n=>{r.stop(),t(n+e)}),e,n),r}Jt.prototype=te.prototype={constructor:Jt,restart:function(t,e,n){if("function"!=typeof t)throw new TypeError("callback is not a function");n=(null==n?Qt():+n)+(null==e?0:+e),this._next||Ut===this||(Ut?Ut._next=this:zt=this,Ut=this),this._call=t,this._time=n,re()},stop:function(){this._call&&(this._call=null,this._time=1/0,re())}};var ae=Yt("start","end","cancel","interrupt"),oe=[];function se(t,e,n,r,i,a){var o=t.__transition;if(o){if(n in o)return}else t.__transition={};!function(t,e,n){var r,i=t.__transition;function a(c){var u,l,h,f;if(1!==n.state)return s();for(u in i)if((f=i[u]).name===n.name){if(3===f.state)return ie(a);4===f.state?(f.state=6,f.timer.stop(),f.on.call("interrupt",t,t.__data__,f.index,f.group),delete i[u]):+u0)throw new Error("too late; already scheduled");return n}function ue(t,e){var n=le(t,e);if(n.state>3)throw new Error("too late; already running");return n}function le(t,e){var n=t.__transition;if(!n||!(n=n[e]))throw new Error("transition not found");return n}function he(t,e){return t=+t,e=+e,function(n){return t*(1-n)+e*n}}var fe,de=180/Math.PI,pe={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1};function ye(t,e,n,r,i,a){var o,s,c;return(o=Math.sqrt(t*t+e*e))&&(t/=o,e/=o),(c=t*n+e*r)&&(n-=t*c,r-=e*c),(s=Math.sqrt(n*n+r*r))&&(n/=s,r/=s,c/=s),t*r180?e+=360:e-t>180&&(t+=360),a.push({i:n.push(i(n)+"rotate(",null,r)-2,x:he(t,e)})):e&&n.push(i(n)+"rotate("+e+r)}(a.rotate,o.rotate,s,c),function(t,e,n,a){t!==e?a.push({i:n.push(i(n)+"skewX(",null,r)-2,x:he(t,e)}):e&&n.push(i(n)+"skewX("+e+r)}(a.skewX,o.skewX,s,c),function(t,e,n,r,a,o){if(t!==n||e!==r){var s=a.push(i(a)+"scale(",null,",",null,")");o.push({i:s-4,x:he(t,n)},{i:s-2,x:he(e,r)})}else 1===n&&1===r||a.push(i(a)+"scale("+n+","+r+")")}(a.scaleX,a.scaleY,o.scaleX,o.scaleY,s,c),a=o=null,function(t){for(var e,n=-1,r=c.length;++n>8&15|e>>4&240,e>>4&15|240&e,(15&e)<<4|15&e,1):8===n?Ue(e>>24&255,e>>16&255,e>>8&255,(255&e)/255):4===n?Ue(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|240&e,((15&e)<<4|15&e)/255):null):(e=De.exec(t))?new $e(e[1],e[2],e[3],1):(e=Oe.exec(t))?new $e(255*e[1]/100,255*e[2]/100,255*e[3]/100,1):(e=Be.exec(t))?Ue(e[1],e[2],e[3],e[4]):(e=Le.exec(t))?Ue(255*e[1]/100,255*e[2]/100,255*e[3]/100,e[4]):(e=Ie.exec(t))?Xe(e[1],e[2]/100,e[3]/100,1):(e=Re.exec(t))?Xe(e[1],e[2]/100,e[3]/100,e[4]):Fe.hasOwnProperty(t)?ze(Fe[t]):"transparent"===t?new $e(NaN,NaN,NaN,0):null}function ze(t){return new $e(t>>16&255,t>>8&255,255&t,1)}function Ue(t,e,n,r){return r<=0&&(t=e=n=NaN),new $e(t,e,n,r)}function qe(t){return t instanceof Te||(t=Ye(t)),t?new $e((t=t.rgb()).r,t.g,t.b,t.opacity):new $e}function He(t,e,n,r){return 1===arguments.length?qe(t):new $e(t,e,n,null==r?1:r)}function $e(t,e,n,r){this.r=+t,this.g=+e,this.b=+n,this.opacity=+r}function We(){return"#"+Ge(this.r)+Ge(this.g)+Ge(this.b)}function Ve(){var t=this.opacity;return(1===(t=isNaN(t)?1:Math.max(0,Math.min(1,t)))?"rgb(":"rgba(")+Math.max(0,Math.min(255,Math.round(this.r)||0))+", "+Math.max(0,Math.min(255,Math.round(this.g)||0))+", "+Math.max(0,Math.min(255,Math.round(this.b)||0))+(1===t?")":", "+t+")")}function Ge(t){return((t=Math.max(0,Math.min(255,Math.round(t)||0)))<16?"0":"")+t.toString(16)}function Xe(t,e,n,r){return r<=0?t=e=n=NaN:n<=0||n>=1?t=e=NaN:e<=0&&(t=NaN),new Qe(t,e,n,r)}function Ze(t){if(t instanceof Qe)return new Qe(t.h,t.s,t.l,t.opacity);if(t instanceof Te||(t=Ye(t)),!t)return new Qe;if(t instanceof Qe)return t;var e=(t=t.rgb()).r/255,n=t.g/255,r=t.b/255,i=Math.min(e,n,r),a=Math.max(e,n,r),o=NaN,s=a-i,c=(a+i)/2;return s?(o=e===a?(n-r)/s+6*(n0&&c<1?0:o,new Qe(o,s,c,t.opacity)}function Qe(t,e,n,r){this.h=+t,this.s=+e,this.l=+n,this.opacity=+r}function Ke(t,e,n){return 255*(t<60?e+(n-e)*t/60:t<180?n:t<240?e+(n-e)*(240-t)/60:e)}function Je(t,e,n,r,i){var a=t*t,o=a*t;return((1-3*t+3*a-o)*e+(4-6*a+3*o)*n+(1+3*t+3*a-3*o)*r+o*i)/6}we(Te,Ye,{copy:function(t){return Object.assign(new this.constructor,this,t)},displayable:function(){return this.rgb().displayable()},hex:Pe,formatHex:Pe,formatHsl:function(){return Ze(this).formatHsl()},formatRgb:je,toString:je}),we($e,He,ke(Te,{brighter:function(t){return t=null==t?Ce:Math.pow(Ce,t),new $e(this.r*t,this.g*t,this.b*t,this.opacity)},darker:function(t){return t=null==t?Ee:Math.pow(Ee,t),new $e(this.r*t,this.g*t,this.b*t,this.opacity)},rgb:function(){return this},displayable:function(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:We,formatHex:We,formatRgb:Ve,toString:Ve})),we(Qe,(function(t,e,n,r){return 1===arguments.length?Ze(t):new Qe(t,e,n,null==r?1:r)}),ke(Te,{brighter:function(t){return t=null==t?Ce:Math.pow(Ce,t),new Qe(this.h,this.s,this.l*t,this.opacity)},darker:function(t){return t=null==t?Ee:Math.pow(Ee,t),new Qe(this.h,this.s,this.l*t,this.opacity)},rgb:function(){var t=this.h%360+360*(this.h<0),e=isNaN(t)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*e,i=2*n-r;return new $e(Ke(t>=240?t-240:t+120,i,r),Ke(t,i,r),Ke(t<120?t+240:t-120,i,r),this.opacity)},displayable:function(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl:function(){var t=this.opacity;return(1===(t=isNaN(t)?1:Math.max(0,Math.min(1,t)))?"hsl(":"hsla(")+(this.h||0)+", "+100*(this.s||0)+"%, "+100*(this.l||0)+"%"+(1===t?")":", "+t+")")}}));const tn=t=>()=>t;function en(t,e){var n=e-t;return n?function(t,e){return function(n){return t+n*e}}(t,n):tn(isNaN(t)?e:t)}const nn=function t(e){var n=function(t){return 1==(t=+t)?en:function(e,n){return n-e?function(t,e,n){return t=Math.pow(t,n),e=Math.pow(e,n)-t,n=1/n,function(r){return Math.pow(t+r*e,n)}}(e,n,t):tn(isNaN(e)?n:e)}}(e);function r(t,e){var r=n((t=He(t)).r,(e=He(e)).r),i=n(t.g,e.g),a=n(t.b,e.b),o=en(t.opacity,e.opacity);return function(e){return t.r=r(e),t.g=i(e),t.b=a(e),t.opacity=o(e),t+""}}return r.gamma=t,r}(1);function rn(t){return function(e){var n,r,i=e.length,a=new Array(i),o=new Array(i),s=new Array(i);for(n=0;n=1?(n=1,e-1):Math.floor(n*e),i=t[r],a=t[r+1],o=r>0?t[r-1]:2*i-a,s=ra&&(i=e.slice(a,i),s[o]?s[o]+=i:s[++o]=i),(n=n[0])===(r=r[0])?s[o]?s[o]+=r:s[++o]=r:(s[++o]=null,c.push({i:o,x:he(n,r)})),a=on.lastIndex;return a=0&&(t=t.slice(0,e)),!t||"start"===t}))}(e)?ce:ue;return function(){var o=a(this,t),s=o.on;s!==r&&(i=(r=s).copy()).on(e,n),o.on=i}}var En=Bt.prototype.constructor;function Cn(t){return function(){this.style.removeProperty(t)}}function Sn(t,e,n){return function(r){this.style.setProperty(t,e.call(this,r),n)}}function An(t,e,n){var r,i;function a(){var a=e.apply(this,arguments);return a!==i&&(r=(i=a)&&Sn(t,a,n)),r}return a._value=e,a}function Mn(t){return function(e){this.textContent=t.call(this,e)}}function Nn(t){var e,n;function r(){var r=t.apply(this,arguments);return r!==n&&(e=(n=r)&&Mn(r)),e}return r._value=t,r}var Dn=0;function On(t,e,n,r){this._groups=t,this._parents=e,this._name=n,this._id=r}function Bn(){return++Dn}var Ln=Bt.prototype;On.prototype=function(t){return Bt().transition(t)}.prototype={constructor:On,select:function(t){var e=this._name,n=this._id;"function"!=typeof t&&(t=_(t));for(var r=this._groups,i=r.length,a=new Array(i),o=0;o2&&n.state<5,n.state=6,n.timer.stop(),n.on.call(r?"interrupt":"cancel",t,t.__data__,n.index,n.group),delete a[i]):o=!1;o&&delete t.__transition}}(this,t)}))},Bt.prototype.transition=function(t){var e,n;t instanceof On?(e=t._id,t=t._name):(e=Bn(),(n=In).time=Qt(),t=null==t?null:t+"");for(var r=this._groups,i=r.length,a=0;a>8&15|e>>4&240,e>>4&15|240&e,(15&e)<<4|15&e,1):8===n?sr(e>>24&255,e>>16&255,e>>8&255,(255&e)/255):4===n?sr(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|240&e,((15&e)<<4|15&e)/255):null):(e=Zn.exec(t))?new lr(e[1],e[2],e[3],1):(e=Qn.exec(t))?new lr(255*e[1]/100,255*e[2]/100,255*e[3]/100,1):(e=Kn.exec(t))?sr(e[1],e[2],e[3],e[4]):(e=Jn.exec(t))?sr(255*e[1]/100,255*e[2]/100,255*e[3]/100,e[4]):(e=tr.exec(t))?pr(e[1],e[2]/100,e[3]/100,1):(e=er.exec(t))?pr(e[1],e[2]/100,e[3]/100,e[4]):nr.hasOwnProperty(t)?or(nr[t]):"transparent"===t?new lr(NaN,NaN,NaN,0):null}function or(t){return new lr(t>>16&255,t>>8&255,255&t,1)}function sr(t,e,n,r){return r<=0&&(t=e=n=NaN),new lr(t,e,n,r)}function cr(t){return t instanceof qn||(t=ar(t)),t?new lr((t=t.rgb()).r,t.g,t.b,t.opacity):new lr}function ur(t,e,n,r){return 1===arguments.length?cr(t):new lr(t,e,n,null==r?1:r)}function lr(t,e,n,r){this.r=+t,this.g=+e,this.b=+n,this.opacity=+r}function hr(){return"#"+dr(this.r)+dr(this.g)+dr(this.b)}function fr(){var t=this.opacity;return(1===(t=isNaN(t)?1:Math.max(0,Math.min(1,t)))?"rgb(":"rgba(")+Math.max(0,Math.min(255,Math.round(this.r)||0))+", "+Math.max(0,Math.min(255,Math.round(this.g)||0))+", "+Math.max(0,Math.min(255,Math.round(this.b)||0))+(1===t?")":", "+t+")")}function dr(t){return((t=Math.max(0,Math.min(255,Math.round(t)||0)))<16?"0":"")+t.toString(16)}function pr(t,e,n,r){return r<=0?t=e=n=NaN:n<=0||n>=1?t=e=NaN:e<=0&&(t=NaN),new gr(t,e,n,r)}function yr(t){if(t instanceof gr)return new gr(t.h,t.s,t.l,t.opacity);if(t instanceof qn||(t=ar(t)),!t)return new gr;if(t instanceof gr)return t;var e=(t=t.rgb()).r/255,n=t.g/255,r=t.b/255,i=Math.min(e,n,r),a=Math.max(e,n,r),o=NaN,s=a-i,c=(a+i)/2;return s?(o=e===a?(n-r)/s+6*(n0&&c<1?0:o,new gr(o,s,c,t.opacity)}function gr(t,e,n,r){this.h=+t,this.s=+e,this.l=+n,this.opacity=+r}function mr(t,e,n){return 255*(t<60?e+(n-e)*t/60:t<180?n:t<240?e+(n-e)*(240-t)/60:e)}zn(qn,ar,{copy:function(t){return Object.assign(new this.constructor,this,t)},displayable:function(){return this.rgb().displayable()},hex:rr,formatHex:rr,formatHsl:function(){return yr(this).formatHsl()},formatRgb:ir,toString:ir}),zn(lr,ur,Un(qn,{brighter:function(t){return t=null==t?$n:Math.pow($n,t),new lr(this.r*t,this.g*t,this.b*t,this.opacity)},darker:function(t){return t=null==t?Hn:Math.pow(Hn,t),new lr(this.r*t,this.g*t,this.b*t,this.opacity)},rgb:function(){return this},displayable:function(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:hr,formatHex:hr,formatRgb:fr,toString:fr})),zn(gr,(function(t,e,n,r){return 1===arguments.length?yr(t):new gr(t,e,n,null==r?1:r)}),Un(qn,{brighter:function(t){return t=null==t?$n:Math.pow($n,t),new gr(this.h,this.s,this.l*t,this.opacity)},darker:function(t){return t=null==t?Hn:Math.pow(Hn,t),new gr(this.h,this.s,this.l*t,this.opacity)},rgb:function(){var t=this.h%360+360*(this.h<0),e=isNaN(t)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*e,i=2*n-r;return new lr(mr(t>=240?t-240:t+120,i,r),mr(t,i,r),mr(t<120?t+240:t-120,i,r),this.opacity)},displayable:function(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl:function(){var t=this.opacity;return(1===(t=isNaN(t)?1:Math.max(0,Math.min(1,t)))?"hsl(":"hsla(")+(this.h||0)+", "+100*(this.s||0)+"%, "+100*(this.l||0)+"%"+(1===t?")":", "+t+")")}}));const vr=Math.PI/180,br=180/Math.PI,_r=.96422,xr=.82521,wr=4/29,kr=6/29,Tr=3*kr*kr;function Er(t){if(t instanceof Cr)return new Cr(t.l,t.a,t.b,t.opacity);if(t instanceof Br)return Lr(t);t instanceof lr||(t=cr(t));var e,n,r=Nr(t.r),i=Nr(t.g),a=Nr(t.b),o=Sr((.2225045*r+.7168786*i+.0606169*a)/1);return r===i&&i===a?e=n=o:(e=Sr((.4360747*r+.3850649*i+.1430804*a)/_r),n=Sr((.0139322*r+.0971045*i+.7141733*a)/xr)),new Cr(116*o-16,500*(e-o),200*(o-n),t.opacity)}function Cr(t,e,n,r){this.l=+t,this.a=+e,this.b=+n,this.opacity=+r}function Sr(t){return t>.008856451679035631?Math.pow(t,1/3):t/Tr+wr}function Ar(t){return t>kr?t*t*t:Tr*(t-wr)}function Mr(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function Nr(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function Dr(t){if(t instanceof Br)return new Br(t.h,t.c,t.l,t.opacity);if(t instanceof Cr||(t=Er(t)),0===t.a&&0===t.b)return new Br(NaN,0()=>t;function Rr(t,e){return function(n){return t+n*e}}function Fr(t,e){var n=e-t;return n?Rr(t,n):Ir(isNaN(t)?e:t)}function Pr(t){return function(e,n){var r=t((e=Or(e)).h,(n=Or(n)).h),i=Fr(e.c,n.c),a=Fr(e.l,n.l),o=Fr(e.opacity,n.opacity);return function(t){return e.h=r(t),e.c=i(t),e.l=a(t),e.opacity=o(t),e+""}}}const jr=Pr((function(t,e){var n=e-t;return n?Rr(t,n>180||n<-180?n-360*Math.round(n/360):n):Ir(isNaN(t)?e:t)}));Pr(Fr);var Yr=Math.sqrt(50),zr=Math.sqrt(10),Ur=Math.sqrt(2);function qr(t,e,n){var r=(e-t)/Math.max(0,n),i=Math.floor(Math.log(r)/Math.LN10),a=r/Math.pow(10,i);return i>=0?(a>=Yr?10:a>=zr?5:a>=Ur?2:1)*Math.pow(10,i):-Math.pow(10,-i)/(a>=Yr?10:a>=zr?5:a>=Ur?2:1)}function Hr(t,e,n){var r=Math.abs(e-t)/Math.max(0,n),i=Math.pow(10,Math.floor(Math.log(r)/Math.LN10)),a=r/i;return a>=Yr?i*=10:a>=zr?i*=5:a>=Ur&&(i*=2),ee?1:t>=e?0:NaN}function Wr(t){let e=t,n=t,r=t;function i(t,e,i=0,a=t.length){if(i>>1;r(t[n],e)<0?i=n+1:a=n}while(it(e)-n,n=$r,r=(e,n)=>$r(t(e),n)),{left:i,center:function(t,n,r=0,a=t.length){const o=i(t,n,r,a-1);return o>r&&e(t[o-1],n)>-e(t[o],n)?o-1:o},right:function(t,e,i=0,a=t.length){if(i>>1;r(t[n],e)<=0?i=n+1:a=n}while(i>8&15|e>>4&240,e>>4&15|240&e,(15&e)<<4|15&e,1):8===n?gi(e>>24&255,e>>16&255,e>>8&255,(255&e)/255):4===n?gi(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|240&e,((15&e)<<4|15&e)/255):null):(e=ai.exec(t))?new bi(e[1],e[2],e[3],1):(e=oi.exec(t))?new bi(255*e[1]/100,255*e[2]/100,255*e[3]/100,1):(e=si.exec(t))?gi(e[1],e[2],e[3],e[4]):(e=ci.exec(t))?gi(255*e[1]/100,255*e[2]/100,255*e[3]/100,e[4]):(e=ui.exec(t))?ki(e[1],e[2]/100,e[3]/100,1):(e=li.exec(t))?ki(e[1],e[2]/100,e[3]/100,e[4]):hi.hasOwnProperty(t)?yi(hi[t]):"transparent"===t?new bi(NaN,NaN,NaN,0):null}function yi(t){return new bi(t>>16&255,t>>8&255,255&t,1)}function gi(t,e,n,r){return r<=0&&(t=e=n=NaN),new bi(t,e,n,r)}function mi(t){return t instanceof Kr||(t=pi(t)),t?new bi((t=t.rgb()).r,t.g,t.b,t.opacity):new bi}function vi(t,e,n,r){return 1===arguments.length?mi(t):new bi(t,e,n,null==r?1:r)}function bi(t,e,n,r){this.r=+t,this.g=+e,this.b=+n,this.opacity=+r}function _i(){return"#"+wi(this.r)+wi(this.g)+wi(this.b)}function xi(){var t=this.opacity;return(1===(t=isNaN(t)?1:Math.max(0,Math.min(1,t)))?"rgb(":"rgba(")+Math.max(0,Math.min(255,Math.round(this.r)||0))+", "+Math.max(0,Math.min(255,Math.round(this.g)||0))+", "+Math.max(0,Math.min(255,Math.round(this.b)||0))+(1===t?")":", "+t+")")}function wi(t){return((t=Math.max(0,Math.min(255,Math.round(t)||0)))<16?"0":"")+t.toString(16)}function ki(t,e,n,r){return r<=0?t=e=n=NaN:n<=0||n>=1?t=e=NaN:e<=0&&(t=NaN),new Ei(t,e,n,r)}function Ti(t){if(t instanceof Ei)return new Ei(t.h,t.s,t.l,t.opacity);if(t instanceof Kr||(t=pi(t)),!t)return new Ei;if(t instanceof Ei)return t;var e=(t=t.rgb()).r/255,n=t.g/255,r=t.b/255,i=Math.min(e,n,r),a=Math.max(e,n,r),o=NaN,s=a-i,c=(a+i)/2;return s?(o=e===a?(n-r)/s+6*(n0&&c<1?0:o,new Ei(o,s,c,t.opacity)}function Ei(t,e,n,r){this.h=+t,this.s=+e,this.l=+n,this.opacity=+r}function Ci(t,e,n){return 255*(t<60?e+(n-e)*t/60:t<180?n:t<240?e+(n-e)*(240-t)/60:e)}function Si(t,e,n,r,i){var a=t*t,o=a*t;return((1-3*t+3*a-o)*e+(4-6*a+3*o)*n+(1+3*t+3*a-3*o)*r+o*i)/6}Zr(Kr,pi,{copy:function(t){return Object.assign(new this.constructor,this,t)},displayable:function(){return this.rgb().displayable()},hex:fi,formatHex:fi,formatHsl:function(){return Ti(this).formatHsl()},formatRgb:di,toString:di}),Zr(bi,vi,Qr(Kr,{brighter:function(t){return t=null==t?ti:Math.pow(ti,t),new bi(this.r*t,this.g*t,this.b*t,this.opacity)},darker:function(t){return t=null==t?Jr:Math.pow(Jr,t),new bi(this.r*t,this.g*t,this.b*t,this.opacity)},rgb:function(){return this},displayable:function(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:_i,formatHex:_i,formatRgb:xi,toString:xi})),Zr(Ei,(function(t,e,n,r){return 1===arguments.length?Ti(t):new Ei(t,e,n,null==r?1:r)}),Qr(Kr,{brighter:function(t){return t=null==t?ti:Math.pow(ti,t),new Ei(this.h,this.s,this.l*t,this.opacity)},darker:function(t){return t=null==t?Jr:Math.pow(Jr,t),new Ei(this.h,this.s,this.l*t,this.opacity)},rgb:function(){var t=this.h%360+360*(this.h<0),e=isNaN(t)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*e,i=2*n-r;return new bi(Ci(t>=240?t-240:t+120,i,r),Ci(t,i,r),Ci(t<120?t+240:t-120,i,r),this.opacity)},displayable:function(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl:function(){var t=this.opacity;return(1===(t=isNaN(t)?1:Math.max(0,Math.min(1,t)))?"hsl(":"hsla(")+(this.h||0)+", "+100*(this.s||0)+"%, "+100*(this.l||0)+"%"+(1===t?")":", "+t+")")}}));const Ai=t=>()=>t;function Mi(t,e){var n=e-t;return n?function(t,e){return function(n){return t+n*e}}(t,n):Ai(isNaN(t)?e:t)}const Ni=function t(e){var n=function(t){return 1==(t=+t)?Mi:function(e,n){return n-e?function(t,e,n){return t=Math.pow(t,n),e=Math.pow(e,n)-t,n=1/n,function(r){return Math.pow(t+r*e,n)}}(e,n,t):Ai(isNaN(e)?n:e)}}(e);function r(t,e){var r=n((t=vi(t)).r,(e=vi(e)).r),i=n(t.g,e.g),a=n(t.b,e.b),o=Mi(t.opacity,e.opacity);return function(e){return t.r=r(e),t.g=i(e),t.b=a(e),t.opacity=o(e),t+""}}return r.gamma=t,r}(1);function Di(t){return function(e){var n,r,i=e.length,a=new Array(i),o=new Array(i),s=new Array(i);for(n=0;n=1?(n=1,e-1):Math.floor(n*e),i=t[r],a=t[r+1],o=r>0?t[r-1]:2*i-a,s=ra&&(i=e.slice(a,i),s[o]?s[o]+=i:s[++o]=i),(n=n[0])===(r=r[0])?s[o]?s[o]+=r:s[++o]=r:(s[++o]=null,c.push({i:o,x:Li(n,r)})),a=Fi.lastIndex;return ae&&(n=t,t=e,e=n),u=function(n){return Math.max(t,Math.min(e,n))}),r=c>2?Vi:Wi,i=a=null,h}function h(e){return null==e||isNaN(e=+e)?n:(i||(i=r(o.map(t),s,c)))(t(u(e)))}return h.invert=function(n){return u(e((a||(a=r(s,o.map(t),Li)))(n)))},h.domain=function(t){return arguments.length?(o=Array.from(t,Ui),l()):o.slice()},h.range=function(t){return arguments.length?(s=Array.from(t),l()):s.slice()},h.rangeRound=function(t){return s=Array.from(t),c=zi,l()},h.clamp=function(t){return arguments.length?(u=!!t||Hi,l()):u!==Hi},h.interpolate=function(t){return arguments.length?(c=t,l()):c},h.unknown=function(t){return arguments.length?(n=t,h):n},function(n,r){return t=n,e=r,l()}}()(Hi,Hi)}function Zi(t,e){switch(arguments.length){case 0:break;case 1:this.range(t);break;default:this.range(e).domain(t)}return this}var Qi,Ki=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function Ji(t){if(!(e=Ki.exec(t)))throw new Error("invalid format: "+t);var e;return new ta({fill:e[1],align:e[2],sign:e[3],symbol:e[4],zero:e[5],width:e[6],comma:e[7],precision:e[8]&&e[8].slice(1),trim:e[9],type:e[10]})}function ta(t){this.fill=void 0===t.fill?" ":t.fill+"",this.align=void 0===t.align?">":t.align+"",this.sign=void 0===t.sign?"-":t.sign+"",this.symbol=void 0===t.symbol?"":t.symbol+"",this.zero=!!t.zero,this.width=void 0===t.width?void 0:+t.width,this.comma=!!t.comma,this.precision=void 0===t.precision?void 0:+t.precision,this.trim=!!t.trim,this.type=void 0===t.type?"":t.type+""}function ea(t,e){if((n=(t=e?t.toExponential(e-1):t.toExponential()).indexOf("e"))<0)return null;var n,r=t.slice(0,n);return[r.length>1?r[0]+r.slice(2):r,+t.slice(n+1)]}function na(t){return(t=ea(Math.abs(t)))?t[1]:NaN}function ra(t,e){var n=ea(t,e);if(!n)return t+"";var r=n[0],i=n[1];return i<0?"0."+new Array(-i).join("0")+r:r.length>i+1?r.slice(0,i+1)+"."+r.slice(i+1):r+new Array(i-r.length+2).join("0")}Ji.prototype=ta.prototype,ta.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(void 0===this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(void 0===this.precision?"":"."+Math.max(0,0|this.precision))+(this.trim?"~":"")+this.type};const ia={"%":(t,e)=>(100*t).toFixed(e),b:t=>Math.round(t).toString(2),c:t=>t+"",d:function(t){return Math.abs(t=Math.round(t))>=1e21?t.toLocaleString("en").replace(/,/g,""):t.toString(10)},e:(t,e)=>t.toExponential(e),f:(t,e)=>t.toFixed(e),g:(t,e)=>t.toPrecision(e),o:t=>Math.round(t).toString(8),p:(t,e)=>ra(100*t,e),r:ra,s:function(t,e){var n=ea(t,e);if(!n)return t+"";var r=n[0],i=n[1],a=i-(Qi=3*Math.max(-8,Math.min(8,Math.floor(i/3))))+1,o=r.length;return a===o?r:a>o?r+new Array(a-o+1).join("0"):a>0?r.slice(0,a)+"."+r.slice(a):"0."+new Array(1-a).join("0")+ea(t,Math.max(0,e+a-1))[0]},X:t=>Math.round(t).toString(16).toUpperCase(),x:t=>Math.round(t).toString(16)};function aa(t){return t}var oa,sa,ca,ua=Array.prototype.map,la=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];function ha(t){var e=t.domain;return t.ticks=function(t){var n=e();return function(t,e,n){var r,i,a,o,s=-1;if(n=+n,(t=+t)==(e=+e)&&n>0)return[t];if((r=e0){let n=Math.round(t/o),r=Math.round(e/o);for(n*oe&&--r,a=new Array(i=r-n+1);++se&&--r,a=new Array(i=r-n+1);++s0;){if((i=qr(c,u,n))===r)return a[o]=c,a[s]=u,e(a);if(i>0)c=Math.floor(c/i)*i,u=Math.ceil(u/i)*i;else{if(!(i<0))break;c=Math.ceil(c*i)/i,u=Math.floor(u*i)/i}r=i}return t},t}function fa(){var t=Xi();return t.copy=function(){return Gi(t,fa())},Zi.apply(t,arguments),ha(t)}oa=function(t){var e,n,r=void 0===t.grouping||void 0===t.thousands?aa:(e=ua.call(t.grouping,Number),n=t.thousands+"",function(t,r){for(var i=t.length,a=[],o=0,s=e[0],c=0;i>0&&s>0&&(c+s+1>r&&(s=Math.max(1,r-c)),a.push(t.substring(i-=s,i+s)),!((c+=s+1)>r));)s=e[o=(o+1)%e.length];return a.reverse().join(n)}),i=void 0===t.currency?"":t.currency[0]+"",a=void 0===t.currency?"":t.currency[1]+"",o=void 0===t.decimal?".":t.decimal+"",s=void 0===t.numerals?aa:function(t){return function(e){return e.replace(/[0-9]/g,(function(e){return t[+e]}))}}(ua.call(t.numerals,String)),c=void 0===t.percent?"%":t.percent+"",u=void 0===t.minus?"−":t.minus+"",l=void 0===t.nan?"NaN":t.nan+"";function h(t){var e=(t=Ji(t)).fill,n=t.align,h=t.sign,f=t.symbol,d=t.zero,p=t.width,y=t.comma,g=t.precision,m=t.trim,v=t.type;"n"===v?(y=!0,v="g"):ia[v]||(void 0===g&&(g=12),m=!0,v="g"),(d||"0"===e&&"="===n)&&(d=!0,e="0",n="=");var b="$"===f?i:"#"===f&&/[boxX]/.test(v)?"0"+v.toLowerCase():"",_="$"===f?a:/[%p]/.test(v)?c:"",x=ia[v],w=/[defgprs%]/.test(v);function k(t){var i,a,c,f=b,k=_;if("c"===v)k=x(t)+k,t="";else{var T=(t=+t)<0||1/t<0;if(t=isNaN(t)?l:x(Math.abs(t),g),m&&(t=function(t){t:for(var e,n=t.length,r=1,i=-1;r0&&(i=0)}return i>0?t.slice(0,i)+t.slice(e+1):t}(t)),T&&0==+t&&"+"!==h&&(T=!1),f=(T?"("===h?h:u:"-"===h||"("===h?"":h)+f,k=("s"===v?la[8+Qi/3]:"")+k+(T&&"("===h?")":""),w)for(i=-1,a=t.length;++i(c=t.charCodeAt(i))||c>57){k=(46===c?o+t.slice(i+1):t.slice(i))+k,t=t.slice(0,i);break}}y&&!d&&(t=r(t,1/0));var E=f.length+t.length+k.length,C=E>1)+f+t+k+C.slice(E);break;default:t=C+f+t+k}return s(t)}return g=void 0===g?6:/[gprs]/.test(v)?Math.max(1,Math.min(21,g)):Math.max(0,Math.min(20,g)),k.toString=function(){return t+""},k}return{format:h,formatPrefix:function(t,e){var n=h(((t=Ji(t)).type="f",t)),r=3*Math.max(-8,Math.min(8,Math.floor(na(e)/3))),i=Math.pow(10,-r),a=la[8+r/3];return function(t){return n(i*t)+a}}}}({thousands:",",grouping:[3],currency:["$",""]}),sa=oa.format,ca=oa.formatPrefix;class da extends Map{constructor(t,e=ya){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:e}}),null!=t)for(const[e,n]of t)this.set(e,n)}get(t){return super.get(pa(this,t))}has(t){return super.has(pa(this,t))}set(t,e){return super.set(function({_intern:t,_key:e},n){const r=e(n);return t.has(r)?t.get(r):(t.set(r,n),n)}(this,t),e)}delete(t){return super.delete(function({_intern:t,_key:e},n){const r=e(n);return t.has(r)&&(n=t.get(r),t.delete(r)),n}(this,t))}}function pa({_intern:t,_key:e},n){const r=e(n);return t.has(r)?t.get(r):n}function ya(t){return null!==t&&"object"==typeof t?t.valueOf():t}Set;const ga=Symbol("implicit");function ma(){var t=new da,e=[],n=[],r=ga;function i(i){let a=t.get(i);if(void 0===a){if(r!==ga)return r;t.set(i,a=e.push(i)-1)}return n[a%n.length]}return i.domain=function(n){if(!arguments.length)return e.slice();e=[],t=new da;for(const r of n)t.has(r)||t.set(r,e.push(r)-1);return i},i.range=function(t){return arguments.length?(n=Array.from(t),i):n.slice()},i.unknown=function(t){return arguments.length?(r=t,i):r},i.copy=function(){return ma(e,n).unknown(r)},Zi.apply(i,arguments),i}const va=1e3,ba=6e4,_a=36e5,xa=864e5,wa=6048e5,ka=31536e6;var Ta=new Date,Ea=new Date;function Ca(t,e,n,r){function i(e){return t(e=0===arguments.length?new Date:new Date(+e)),e}return i.floor=function(e){return t(e=new Date(+e)),e},i.ceil=function(n){return t(n=new Date(n-1)),e(n,1),t(n),n},i.round=function(t){var e=i(t),n=i.ceil(t);return t-e0))return s;do{s.push(o=new Date(+n)),e(n,a),t(n)}while(o=e)for(;t(e),!n(e);)e.setTime(e-1)}),(function(t,r){if(t>=t)if(r<0)for(;++r<=0;)for(;e(t,-1),!n(t););else for(;--r>=0;)for(;e(t,1),!n(t););}))},n&&(i.count=function(e,r){return Ta.setTime(+e),Ea.setTime(+r),t(Ta),t(Ea),Math.floor(n(Ta,Ea))},i.every=function(t){return t=Math.floor(t),isFinite(t)&&t>0?t>1?i.filter(r?function(e){return r(e)%t==0}:function(e){return i.count(0,e)%t==0}):i:null}),i}var Sa=Ca((function(){}),(function(t,e){t.setTime(+t+e)}),(function(t,e){return e-t}));Sa.every=function(t){return t=Math.floor(t),isFinite(t)&&t>0?t>1?Ca((function(e){e.setTime(Math.floor(e/t)*t)}),(function(e,n){e.setTime(+e+n*t)}),(function(e,n){return(n-e)/t})):Sa:null};const Aa=Sa;Sa.range;var Ma=Ca((function(t){t.setTime(t-t.getMilliseconds())}),(function(t,e){t.setTime(+t+e*va)}),(function(t,e){return(e-t)/va}),(function(t){return t.getUTCSeconds()}));const Na=Ma;Ma.range;var Da=Ca((function(t){t.setTime(t-t.getMilliseconds()-t.getSeconds()*va)}),(function(t,e){t.setTime(+t+e*ba)}),(function(t,e){return(e-t)/ba}),(function(t){return t.getMinutes()}));const Oa=Da;Da.range;var Ba=Ca((function(t){t.setTime(t-t.getMilliseconds()-t.getSeconds()*va-t.getMinutes()*ba)}),(function(t,e){t.setTime(+t+e*_a)}),(function(t,e){return(e-t)/_a}),(function(t){return t.getHours()}));const La=Ba;Ba.range;var Ia=Ca((t=>t.setHours(0,0,0,0)),((t,e)=>t.setDate(t.getDate()+e)),((t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*ba)/xa),(t=>t.getDate()-1));const Ra=Ia;function Fa(t){return Ca((function(e){e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)}),(function(t,e){t.setDate(t.getDate()+7*e)}),(function(t,e){return(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*ba)/wa}))}Ia.range;var Pa=Fa(0),ja=Fa(1),Ya=Fa(2),za=Fa(3),Ua=Fa(4),qa=Fa(5),Ha=Fa(6),$a=(Pa.range,ja.range,Ya.range,za.range,Ua.range,qa.range,Ha.range,Ca((function(t){t.setDate(1),t.setHours(0,0,0,0)}),(function(t,e){t.setMonth(t.getMonth()+e)}),(function(t,e){return e.getMonth()-t.getMonth()+12*(e.getFullYear()-t.getFullYear())}),(function(t){return t.getMonth()})));const Wa=$a;$a.range;var Va=Ca((function(t){t.setMonth(0,1),t.setHours(0,0,0,0)}),(function(t,e){t.setFullYear(t.getFullYear()+e)}),(function(t,e){return e.getFullYear()-t.getFullYear()}),(function(t){return t.getFullYear()}));Va.every=function(t){return isFinite(t=Math.floor(t))&&t>0?Ca((function(e){e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)}),(function(e,n){e.setFullYear(e.getFullYear()+n*t)})):null};const Ga=Va;Va.range;var Xa=Ca((function(t){t.setUTCSeconds(0,0)}),(function(t,e){t.setTime(+t+e*ba)}),(function(t,e){return(e-t)/ba}),(function(t){return t.getUTCMinutes()}));const Za=Xa;Xa.range;var Qa=Ca((function(t){t.setUTCMinutes(0,0,0)}),(function(t,e){t.setTime(+t+e*_a)}),(function(t,e){return(e-t)/_a}),(function(t){return t.getUTCHours()}));const Ka=Qa;Qa.range;var Ja=Ca((function(t){t.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCDate(t.getUTCDate()+e)}),(function(t,e){return(e-t)/xa}),(function(t){return t.getUTCDate()-1}));const to=Ja;function eo(t){return Ca((function(e){e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCDate(t.getUTCDate()+7*e)}),(function(t,e){return(e-t)/wa}))}Ja.range;var no=eo(0),ro=eo(1),io=eo(2),ao=eo(3),oo=eo(4),so=eo(5),co=eo(6),uo=(no.range,ro.range,io.range,ao.range,oo.range,so.range,co.range,Ca((function(t){t.setUTCDate(1),t.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCMonth(t.getUTCMonth()+e)}),(function(t,e){return e.getUTCMonth()-t.getUTCMonth()+12*(e.getUTCFullYear()-t.getUTCFullYear())}),(function(t){return t.getUTCMonth()})));const lo=uo;uo.range;var ho=Ca((function(t){t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCFullYear(t.getUTCFullYear()+e)}),(function(t,e){return e.getUTCFullYear()-t.getUTCFullYear()}),(function(t){return t.getUTCFullYear()}));ho.every=function(t){return isFinite(t=Math.floor(t))&&t>0?Ca((function(e){e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)}),(function(e,n){e.setUTCFullYear(e.getUTCFullYear()+n*t)})):null};const fo=ho;function po(t,e,n,r,i,a){const o=[[Na,1,va],[Na,5,5e3],[Na,15,15e3],[Na,30,3e4],[a,1,ba],[a,5,3e5],[a,15,9e5],[a,30,18e5],[i,1,_a],[i,3,108e5],[i,6,216e5],[i,12,432e5],[r,1,xa],[r,2,1728e5],[n,1,wa],[e,1,2592e6],[e,3,7776e6],[t,1,ka]];function s(e,n,r){const i=Math.abs(n-e)/r,a=Wr((([,,t])=>t)).right(o,i);if(a===o.length)return t.every(Hr(e/ka,n/ka,r));if(0===a)return Aa.every(Math.max(Hr(e,n,r),1));const[s,c]=o[i/o[a-1][2][t.toLowerCase(),e])))}function Oo(t,e,n){var r=Eo.exec(e.slice(n,n+1));return r?(t.w=+r[0],n+r[0].length):-1}function Bo(t,e,n){var r=Eo.exec(e.slice(n,n+1));return r?(t.u=+r[0],n+r[0].length):-1}function Lo(t,e,n){var r=Eo.exec(e.slice(n,n+2));return r?(t.U=+r[0],n+r[0].length):-1}function Io(t,e,n){var r=Eo.exec(e.slice(n,n+2));return r?(t.V=+r[0],n+r[0].length):-1}function Ro(t,e,n){var r=Eo.exec(e.slice(n,n+2));return r?(t.W=+r[0],n+r[0].length):-1}function Fo(t,e,n){var r=Eo.exec(e.slice(n,n+4));return r?(t.y=+r[0],n+r[0].length):-1}function Po(t,e,n){var r=Eo.exec(e.slice(n,n+2));return r?(t.y=+r[0]+(+r[0]>68?1900:2e3),n+r[0].length):-1}function jo(t,e,n){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(n,n+6));return r?(t.Z=r[1]?0:-(r[2]+(r[3]||"00")),n+r[0].length):-1}function Yo(t,e,n){var r=Eo.exec(e.slice(n,n+1));return r?(t.q=3*r[0]-3,n+r[0].length):-1}function zo(t,e,n){var r=Eo.exec(e.slice(n,n+2));return r?(t.m=r[0]-1,n+r[0].length):-1}function Uo(t,e,n){var r=Eo.exec(e.slice(n,n+2));return r?(t.d=+r[0],n+r[0].length):-1}function qo(t,e,n){var r=Eo.exec(e.slice(n,n+3));return r?(t.m=0,t.d=+r[0],n+r[0].length):-1}function Ho(t,e,n){var r=Eo.exec(e.slice(n,n+2));return r?(t.H=+r[0],n+r[0].length):-1}function $o(t,e,n){var r=Eo.exec(e.slice(n,n+2));return r?(t.M=+r[0],n+r[0].length):-1}function Wo(t,e,n){var r=Eo.exec(e.slice(n,n+2));return r?(t.S=+r[0],n+r[0].length):-1}function Vo(t,e,n){var r=Eo.exec(e.slice(n,n+3));return r?(t.L=+r[0],n+r[0].length):-1}function Go(t,e,n){var r=Eo.exec(e.slice(n,n+6));return r?(t.L=Math.floor(r[0]/1e3),n+r[0].length):-1}function Xo(t,e,n){var r=Co.exec(e.slice(n,n+1));return r?n+r[0].length:-1}function Zo(t,e,n){var r=Eo.exec(e.slice(n));return r?(t.Q=+r[0],n+r[0].length):-1}function Qo(t,e,n){var r=Eo.exec(e.slice(n));return r?(t.s=+r[0],n+r[0].length):-1}function Ko(t,e){return Ao(t.getDate(),e,2)}function Jo(t,e){return Ao(t.getHours(),e,2)}function ts(t,e){return Ao(t.getHours()%12||12,e,2)}function es(t,e){return Ao(1+Ra.count(Ga(t),t),e,3)}function ns(t,e){return Ao(t.getMilliseconds(),e,3)}function rs(t,e){return ns(t,e)+"000"}function is(t,e){return Ao(t.getMonth()+1,e,2)}function as(t,e){return Ao(t.getMinutes(),e,2)}function os(t,e){return Ao(t.getSeconds(),e,2)}function ss(t){var e=t.getDay();return 0===e?7:e}function cs(t,e){return Ao(Pa.count(Ga(t)-1,t),e,2)}function us(t){var e=t.getDay();return e>=4||0===e?Ua(t):Ua.ceil(t)}function ls(t,e){return t=us(t),Ao(Ua.count(Ga(t),t)+(4===Ga(t).getDay()),e,2)}function hs(t){return t.getDay()}function fs(t,e){return Ao(ja.count(Ga(t)-1,t),e,2)}function ds(t,e){return Ao(t.getFullYear()%100,e,2)}function ps(t,e){return Ao((t=us(t)).getFullYear()%100,e,2)}function ys(t,e){return Ao(t.getFullYear()%1e4,e,4)}function gs(t,e){var n=t.getDay();return Ao((t=n>=4||0===n?Ua(t):Ua.ceil(t)).getFullYear()%1e4,e,4)}function ms(t){var e=t.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+Ao(e/60|0,"0",2)+Ao(e%60,"0",2)}function vs(t,e){return Ao(t.getUTCDate(),e,2)}function bs(t,e){return Ao(t.getUTCHours(),e,2)}function _s(t,e){return Ao(t.getUTCHours()%12||12,e,2)}function xs(t,e){return Ao(1+to.count(fo(t),t),e,3)}function ws(t,e){return Ao(t.getUTCMilliseconds(),e,3)}function ks(t,e){return ws(t,e)+"000"}function Ts(t,e){return Ao(t.getUTCMonth()+1,e,2)}function Es(t,e){return Ao(t.getUTCMinutes(),e,2)}function Cs(t,e){return Ao(t.getUTCSeconds(),e,2)}function Ss(t){var e=t.getUTCDay();return 0===e?7:e}function As(t,e){return Ao(no.count(fo(t)-1,t),e,2)}function Ms(t){var e=t.getUTCDay();return e>=4||0===e?oo(t):oo.ceil(t)}function Ns(t,e){return t=Ms(t),Ao(oo.count(fo(t),t)+(4===fo(t).getUTCDay()),e,2)}function Ds(t){return t.getUTCDay()}function Os(t,e){return Ao(ro.count(fo(t)-1,t),e,2)}function Bs(t,e){return Ao(t.getUTCFullYear()%100,e,2)}function Ls(t,e){return Ao((t=Ms(t)).getUTCFullYear()%100,e,2)}function Is(t,e){return Ao(t.getUTCFullYear()%1e4,e,4)}function Rs(t,e){var n=t.getUTCDay();return Ao((t=n>=4||0===n?oo(t):oo.ceil(t)).getUTCFullYear()%1e4,e,4)}function Fs(){return"+0000"}function Ps(){return"%"}function js(t){return+t}function Ys(t){return Math.floor(+t/1e3)}function zs(t){return new Date(t)}function Us(t){return t instanceof Date?+t:+new Date(+t)}function qs(t,e,n,r,i,a,o,s,c,u){var l=Xi(),h=l.invert,f=l.domain,d=u(".%L"),p=u(":%S"),y=u("%I:%M"),g=u("%I %p"),m=u("%a %d"),v=u("%b %d"),b=u("%B"),_=u("%Y");function x(t){return(c(t)=12)]},q:function(t){return 1+~~(t.getMonth()/3)},Q:js,s:Ys,S:os,u:ss,U:cs,V:ls,w:hs,W:fs,x:null,X:null,y:ds,Y:ys,Z:ms,"%":Ps},_={a:function(t){return o[t.getUTCDay()]},A:function(t){return a[t.getUTCDay()]},b:function(t){return c[t.getUTCMonth()]},B:function(t){return s[t.getUTCMonth()]},c:null,d:vs,e:vs,f:ks,g:Ls,G:Rs,H:bs,I:_s,j:xs,L:ws,m:Ts,M:Es,p:function(t){return i[+(t.getUTCHours()>=12)]},q:function(t){return 1+~~(t.getUTCMonth()/3)},Q:js,s:Ys,S:Cs,u:Ss,U:As,V:Ns,w:Ds,W:Os,x:null,X:null,y:Bs,Y:Is,Z:Fs,"%":Ps},x={a:function(t,e,n){var r=d.exec(e.slice(n));return r?(t.w=p.get(r[0].toLowerCase()),n+r[0].length):-1},A:function(t,e,n){var r=h.exec(e.slice(n));return r?(t.w=f.get(r[0].toLowerCase()),n+r[0].length):-1},b:function(t,e,n){var r=m.exec(e.slice(n));return r?(t.m=v.get(r[0].toLowerCase()),n+r[0].length):-1},B:function(t,e,n){var r=y.exec(e.slice(n));return r?(t.m=g.get(r[0].toLowerCase()),n+r[0].length):-1},c:function(t,n,r){return T(t,e,n,r)},d:Uo,e:Uo,f:Go,g:Po,G:Fo,H:Ho,I:Ho,j:qo,L:Vo,m:zo,M:$o,p:function(t,e,n){var r=u.exec(e.slice(n));return r?(t.p=l.get(r[0].toLowerCase()),n+r[0].length):-1},q:Yo,Q:Zo,s:Qo,S:Wo,u:Bo,U:Lo,V:Io,w:Oo,W:Ro,x:function(t,e,r){return T(t,n,e,r)},X:function(t,e,n){return T(t,r,e,n)},y:Po,Y:Fo,Z:jo,"%":Xo};function w(t,e){return function(n){var r,i,a,o=[],s=-1,c=0,u=t.length;for(n instanceof Date||(n=new Date(+n));++s53)return null;"w"in a||(a.w=1),"Z"in a?(i=(r=_o(xo(a.y,0,1))).getUTCDay(),r=i>4||0===i?ro.ceil(r):ro(r),r=to.offset(r,7*(a.V-1)),a.y=r.getUTCFullYear(),a.m=r.getUTCMonth(),a.d=r.getUTCDate()+(a.w+6)%7):(i=(r=bo(xo(a.y,0,1))).getDay(),r=i>4||0===i?ja.ceil(r):ja(r),r=Ra.offset(r,7*(a.V-1)),a.y=r.getFullYear(),a.m=r.getMonth(),a.d=r.getDate()+(a.w+6)%7)}else("W"in a||"U"in a)&&("w"in a||(a.w="u"in a?a.u%7:"W"in a?1:0),i="Z"in a?_o(xo(a.y,0,1)).getUTCDay():bo(xo(a.y,0,1)).getDay(),a.m=0,a.d="W"in a?(a.w+6)%7+7*a.W-(i+5)%7:a.w+7*a.U-(i+6)%7);return"Z"in a?(a.H+=a.Z/100|0,a.M+=a.Z%100,_o(a)):bo(a)}}function T(t,e,n,r){for(var i,a,o=0,s=e.length,c=n.length;o=c)return-1;if(37===(i=e.charCodeAt(o++))){if(i=e.charAt(o++),!(a=x[i in To?e.charAt(o++):i])||(r=a(t,n,r))<0)return-1}else if(i!=n.charCodeAt(r++))return-1}return r}return b.x=w(n,b),b.X=w(r,b),b.c=w(e,b),_.x=w(n,_),_.X=w(r,_),_.c=w(e,_),{format:function(t){var e=w(t+="",b);return e.toString=function(){return t},e},parse:function(t){var e=k(t+="",!1);return e.toString=function(){return t},e},utcFormat:function(t){var e=w(t+="",_);return e.toString=function(){return t},e},utcParse:function(t){var e=k(t+="",!0);return e.toString=function(){return t},e}}}({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]}),ko=wo.format,wo.parse,wo.utcFormat,wo.utcParse;var Qs=Array.prototype.find;function Ks(){return this.firstElementChild}var Js=Array.prototype.filter;function tc(){return Array.from(this.children)}function ec(t){return new Array(t.length)}function nc(t,e){this.ownerDocument=t.ownerDocument,this.namespaceURI=t.namespaceURI,this._next=null,this._parent=t,this.__data__=e}function rc(t){return function(){return t}}function ic(t,e,n,r,i,a){for(var o,s=0,c=e.length,u=a.length;se?1:t>=e?0:NaN}nc.prototype={constructor:nc,appendChild:function(t){return this._parent.insertBefore(t,this._next)},insertBefore:function(t,e){return this._parent.insertBefore(t,e)},querySelector:function(t){return this._parent.querySelector(t)},querySelectorAll:function(t){return this._parent.querySelectorAll(t)}};var uc="http://www.w3.org/1999/xhtml";const lc={svg:"http://www.w3.org/2000/svg",xhtml:uc,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};function hc(t){var e=t+="",n=e.indexOf(":");return n>=0&&"xmlns"!==(e=t.slice(0,n))&&(t=t.slice(n+1)),lc.hasOwnProperty(e)?{space:lc[e],local:t}:t}function fc(t){return function(){this.removeAttribute(t)}}function dc(t){return function(){this.removeAttributeNS(t.space,t.local)}}function pc(t,e){return function(){this.setAttribute(t,e)}}function yc(t,e){return function(){this.setAttributeNS(t.space,t.local,e)}}function gc(t,e){return function(){var n=e.apply(this,arguments);null==n?this.removeAttribute(t):this.setAttribute(t,n)}}function mc(t,e){return function(){var n=e.apply(this,arguments);null==n?this.removeAttributeNS(t.space,t.local):this.setAttributeNS(t.space,t.local,n)}}function vc(t){return t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView}function bc(t){return function(){this.style.removeProperty(t)}}function _c(t,e,n){return function(){this.style.setProperty(t,e,n)}}function xc(t,e,n){return function(){var r=e.apply(this,arguments);null==r?this.style.removeProperty(t):this.style.setProperty(t,r,n)}}function wc(t,e){return t.style.getPropertyValue(e)||vc(t).getComputedStyle(t,null).getPropertyValue(e)}function kc(t){return function(){delete this[t]}}function Tc(t,e){return function(){this[t]=e}}function Ec(t,e){return function(){var n=e.apply(this,arguments);null==n?delete this[t]:this[t]=n}}function Cc(t){return t.trim().split(/^|\s+/)}function Sc(t){return t.classList||new Ac(t)}function Ac(t){this._node=t,this._names=Cc(t.getAttribute("class")||"")}function Mc(t,e){for(var n=Sc(t),r=-1,i=e.length;++r=0&&(e=t.slice(n+1),t=t.slice(0,n)),{type:t,name:e}}))}function Zc(t){return function(){var e=this.__on;if(e){for(var n,r=0,i=-1,a=e.length;r=0&&(this._names.splice(e,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(t){return this._names.indexOf(t)>=0}};var eu=[null];function nu(t,e){this._groups=t,this._parents=e}function ru(){return new nu([[document.documentElement]],eu)}nu.prototype=ru.prototype={constructor:nu,select:function(t){"function"!=typeof t&&(t=$s(t));for(var e=this._groups,n=e.length,r=new Array(n),i=0;i=x&&(x=_+1);!(b=g[x])&&++x=0;)(r=i[a])&&(o&&4^r.compareDocumentPosition(o)&&o.parentNode.insertBefore(r,o),o=r);return this},sort:function(t){function e(e,n){return e&&n?t(e.__data__,n.__data__):!e-!n}t||(t=cc);for(var n=this._groups,r=n.length,i=new Array(r),a=0;a1?this.each((null==e?bc:"function"==typeof e?xc:_c)(t,e,null==n?"":n)):wc(this.node(),t)},property:function(t,e){return arguments.length>1?this.each((null==e?kc:"function"==typeof e?Ec:Tc)(t,e)):this.node()[t]},classed:function(t,e){var n=Cc(t+"");if(arguments.length<2){for(var r=Sc(this.node()),i=-1,a=n.length;++iuu)if(Math.abs(l*s-c*u)>uu&&i){var f=n-a,d=r-o,p=s*s+c*c,y=f*f+d*d,g=Math.sqrt(p),m=Math.sqrt(h),v=i*Math.tan((su-Math.acos((p+h-y)/(2*g*m)))/2),b=v/m,_=v/g;Math.abs(b-1)>uu&&(this._+="L"+(t+b*u)+","+(e+b*l)),this._+="A"+i+","+i+",0,0,"+ +(l*f>u*d)+","+(this._x1=t+_*s)+","+(this._y1=e+_*c)}else this._+="L"+(this._x1=t)+","+(this._y1=e)},arc:function(t,e,n,r,i,a){t=+t,e=+e,a=!!a;var o=(n=+n)*Math.cos(r),s=n*Math.sin(r),c=t+o,u=e+s,l=1^a,h=a?r-i:i-r;if(n<0)throw new Error("negative radius: "+n);null===this._x1?this._+="M"+c+","+u:(Math.abs(this._x1-c)>uu||Math.abs(this._y1-u)>uu)&&(this._+="L"+c+","+u),n&&(h<0&&(h=h%cu+cu),h>lu?this._+="A"+n+","+n+",0,1,"+l+","+(t-o)+","+(e-s)+"A"+n+","+n+",0,1,"+l+","+(this._x1=c)+","+(this._y1=u):h>uu&&(this._+="A"+n+","+n+",0,"+ +(h>=su)+","+l+","+(this._x1=t+n*Math.cos(i))+","+(this._y1=e+n*Math.sin(i))))},rect:function(t,e,n,r){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+e)+"h"+ +n+"v"+ +r+"h"+-n+"Z"},toString:function(){return this._}};const du=fu;function pu(t){return function(){return t}}var yu=Math.abs,gu=Math.atan2,mu=Math.cos,vu=Math.max,bu=Math.min,_u=Math.sin,xu=Math.sqrt,wu=1e-12,ku=Math.PI,Tu=ku/2,Eu=2*ku;function Cu(t){return t>1?0:t<-1?ku:Math.acos(t)}function Su(t){return t>=1?Tu:t<=-1?-Tu:Math.asin(t)}function Au(t){return t.innerRadius}function Mu(t){return t.outerRadius}function Nu(t){return t.startAngle}function Du(t){return t.endAngle}function Ou(t){return t&&t.padAngle}function Bu(t,e,n,r,i,a,o,s){var c=n-t,u=r-e,l=o-i,h=s-a,f=h*c-l*u;if(!(f*fN*N+D*D&&(T=C,E=S),{cx:T,cy:E,x01:-l,y01:-h,x11:T*(i/x-1),y11:E*(i/x-1)}}function Iu(){var t=Au,e=Mu,n=pu(0),r=null,i=Nu,a=Du,o=Ou,s=null;function c(){var c,u,l=+t.apply(this,arguments),h=+e.apply(this,arguments),f=i.apply(this,arguments)-Tu,d=a.apply(this,arguments)-Tu,p=yu(d-f),y=d>f;if(s||(s=c=du()),hwu)if(p>Eu-wu)s.moveTo(h*mu(f),h*_u(f)),s.arc(0,0,h,f,d,!y),l>wu&&(s.moveTo(l*mu(d),l*_u(d)),s.arc(0,0,l,d,f,y));else{var g,m,v=f,b=d,_=f,x=d,w=p,k=p,T=o.apply(this,arguments)/2,E=T>wu&&(r?+r.apply(this,arguments):xu(l*l+h*h)),C=bu(yu(h-l)/2,+n.apply(this,arguments)),S=C,A=C;if(E>wu){var M=Su(E/l*_u(T)),N=Su(E/h*_u(T));(w-=2*M)>wu?(_+=M*=y?1:-1,x-=M):(w=0,_=x=(f+d)/2),(k-=2*N)>wu?(v+=N*=y?1:-1,b-=N):(k=0,v=b=(f+d)/2)}var D=h*mu(v),O=h*_u(v),B=l*mu(x),L=l*_u(x);if(C>wu){var I,R=h*mu(b),F=h*_u(b),P=l*mu(_),j=l*_u(_);if(pwu?A>wu?(g=Lu(P,j,D,O,h,A,y),m=Lu(R,F,B,L,h,A,y),s.moveTo(g.cx+g.x01,g.cy+g.y01),Awu&&w>wu?S>wu?(g=Lu(B,L,R,F,l,-S,y),m=Lu(D,O,P,j,l,-S,y),s.lineTo(g.cx+g.x01,g.cy+g.y01),St?1:e>=t?0:NaN}function qu(t){return t}function Hu(){}function $u(t,e,n){t._context.bezierCurveTo((2*t._x0+t._x1)/3,(2*t._y0+t._y1)/3,(t._x0+2*t._x1)/3,(t._y0+2*t._y1)/3,(t._x0+4*t._x1+e)/6,(t._y0+4*t._y1+n)/6)}function Wu(t){this._context=t}function Vu(t){return new Wu(t)}function Gu(t){this._context=t}function Xu(t){this._context=t}function Zu(t){this._context=t}function Qu(t){return t<0?-1:1}function Ku(t,e,n){var r=t._x1-t._x0,i=e-t._x1,a=(t._y1-t._y0)/(r||i<0&&-0),o=(n-t._y1)/(i||r<0&&-0),s=(a*i+o*r)/(r+i);return(Qu(a)+Qu(o))*Math.min(Math.abs(a),Math.abs(o),.5*Math.abs(s))||0}function Ju(t,e){var n=t._x1-t._x0;return n?(3*(t._y1-t._y0)/n-e)/2:e}function tl(t,e,n){var r=t._x0,i=t._y0,a=t._x1,o=t._y1,s=(a-r)/3;t._context.bezierCurveTo(r+s,i+s*e,a-s,o-s*n,a,o)}function el(t){this._context=t}function nl(t){this._context=new rl(t)}function rl(t){this._context=t}function il(t){this._context=t}function al(t){var e,n,r=t.length-1,i=new Array(r),a=new Array(r),o=new Array(r);for(i[0]=0,a[0]=2,o[0]=t[0]+2*t[1],e=1;e=0;--e)i[e]=(o[e]-i[e+1])/a[e];for(a[r-1]=(t[r]+i[r-1])/2,e=0;e=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,e),this._context.lineTo(t,e);else{var n=this._x*(1-this._t)+t*this._t;this._context.lineTo(n,this._y),this._context.lineTo(n,e)}}this._x=t,this._y=e}};var sl=new Date,cl=new Date;function ul(t,e,n,r){function i(e){return t(e=0===arguments.length?new Date:new Date(+e)),e}return i.floor=function(e){return t(e=new Date(+e)),e},i.ceil=function(n){return t(n=new Date(n-1)),e(n,1),t(n),n},i.round=function(t){var e=i(t),n=i.ceil(t);return t-e0))return s;do{s.push(o=new Date(+n)),e(n,a),t(n)}while(o=e)for(;t(e),!n(e);)e.setTime(e-1)}),(function(t,r){if(t>=t)if(r<0)for(;++r<=0;)for(;e(t,-1),!n(t););else for(;--r>=0;)for(;e(t,1),!n(t););}))},n&&(i.count=function(e,r){return sl.setTime(+e),cl.setTime(+r),t(sl),t(cl),Math.floor(n(sl,cl))},i.every=function(t){return t=Math.floor(t),isFinite(t)&&t>0?t>1?i.filter(r?function(e){return r(e)%t==0}:function(e){return i.count(0,e)%t==0}):i:null}),i}const ll=864e5,hl=6048e5;function fl(t){return ul((function(e){e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCDate(t.getUTCDate()+7*e)}),(function(t,e){return(e-t)/hl}))}var dl=fl(0),pl=fl(1),yl=fl(2),gl=fl(3),ml=fl(4),vl=fl(5),bl=fl(6),_l=(dl.range,pl.range,yl.range,gl.range,ml.range,vl.range,bl.range,ul((function(t){t.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCDate(t.getUTCDate()+e)}),(function(t,e){return(e-t)/ll}),(function(t){return t.getUTCDate()-1})));const xl=_l;function wl(t){return ul((function(e){e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)}),(function(t,e){t.setDate(t.getDate()+7*e)}),(function(t,e){return(e-t-6e4*(e.getTimezoneOffset()-t.getTimezoneOffset()))/hl}))}_l.range;var kl=wl(0),Tl=wl(1),El=wl(2),Cl=wl(3),Sl=wl(4),Al=wl(5),Ml=wl(6),Nl=(kl.range,Tl.range,El.range,Cl.range,Sl.range,Al.range,Ml.range,ul((t=>t.setHours(0,0,0,0)),((t,e)=>t.setDate(t.getDate()+e)),((t,e)=>(e-t-6e4*(e.getTimezoneOffset()-t.getTimezoneOffset()))/ll),(t=>t.getDate()-1)));const Dl=Nl;Nl.range;var Ol=ul((function(t){t.setMonth(0,1),t.setHours(0,0,0,0)}),(function(t,e){t.setFullYear(t.getFullYear()+e)}),(function(t,e){return e.getFullYear()-t.getFullYear()}),(function(t){return t.getFullYear()}));Ol.every=function(t){return isFinite(t=Math.floor(t))&&t>0?ul((function(e){e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)}),(function(e,n){e.setFullYear(e.getFullYear()+n*t)})):null};const Bl=Ol;Ol.range;var Ll=ul((function(t){t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCFullYear(t.getUTCFullYear()+e)}),(function(t,e){return e.getUTCFullYear()-t.getUTCFullYear()}),(function(t){return t.getUTCFullYear()}));Ll.every=function(t){return isFinite(t=Math.floor(t))&&t>0?ul((function(e){e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)}),(function(e,n){e.setUTCFullYear(e.getUTCFullYear()+n*t)})):null};const Il=Ll;function Rl(t){if(0<=t.y&&t.y<100){var e=new Date(-1,t.m,t.d,t.H,t.M,t.S,t.L);return e.setFullYear(t.y),e}return new Date(t.y,t.m,t.d,t.H,t.M,t.S,t.L)}function Fl(t){if(0<=t.y&&t.y<100){var e=new Date(Date.UTC(-1,t.m,t.d,t.H,t.M,t.S,t.L));return e.setUTCFullYear(t.y),e}return new Date(Date.UTC(t.y,t.m,t.d,t.H,t.M,t.S,t.L))}function Pl(t,e,n){return{y:t,m:e,d:n,H:0,M:0,S:0,L:0}}Ll.range;var jl,Yl,zl={"-":"",_:" ",0:"0"},Ul=/^\s*\d+/,ql=/^%/,Hl=/[\\^$*+?|[\]().{}]/g;function $l(t,e,n){var r=t<0?"-":"",i=(r?-t:t)+"",a=i.length;return r+(a[t.toLowerCase(),e])))}function Xl(t,e,n){var r=Ul.exec(e.slice(n,n+1));return r?(t.w=+r[0],n+r[0].length):-1}function Zl(t,e,n){var r=Ul.exec(e.slice(n,n+1));return r?(t.u=+r[0],n+r[0].length):-1}function Ql(t,e,n){var r=Ul.exec(e.slice(n,n+2));return r?(t.U=+r[0],n+r[0].length):-1}function Kl(t,e,n){var r=Ul.exec(e.slice(n,n+2));return r?(t.V=+r[0],n+r[0].length):-1}function Jl(t,e,n){var r=Ul.exec(e.slice(n,n+2));return r?(t.W=+r[0],n+r[0].length):-1}function th(t,e,n){var r=Ul.exec(e.slice(n,n+4));return r?(t.y=+r[0],n+r[0].length):-1}function eh(t,e,n){var r=Ul.exec(e.slice(n,n+2));return r?(t.y=+r[0]+(+r[0]>68?1900:2e3),n+r[0].length):-1}function nh(t,e,n){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(n,n+6));return r?(t.Z=r[1]?0:-(r[2]+(r[3]||"00")),n+r[0].length):-1}function rh(t,e,n){var r=Ul.exec(e.slice(n,n+1));return r?(t.q=3*r[0]-3,n+r[0].length):-1}function ih(t,e,n){var r=Ul.exec(e.slice(n,n+2));return r?(t.m=r[0]-1,n+r[0].length):-1}function ah(t,e,n){var r=Ul.exec(e.slice(n,n+2));return r?(t.d=+r[0],n+r[0].length):-1}function oh(t,e,n){var r=Ul.exec(e.slice(n,n+3));return r?(t.m=0,t.d=+r[0],n+r[0].length):-1}function sh(t,e,n){var r=Ul.exec(e.slice(n,n+2));return r?(t.H=+r[0],n+r[0].length):-1}function ch(t,e,n){var r=Ul.exec(e.slice(n,n+2));return r?(t.M=+r[0],n+r[0].length):-1}function uh(t,e,n){var r=Ul.exec(e.slice(n,n+2));return r?(t.S=+r[0],n+r[0].length):-1}function lh(t,e,n){var r=Ul.exec(e.slice(n,n+3));return r?(t.L=+r[0],n+r[0].length):-1}function hh(t,e,n){var r=Ul.exec(e.slice(n,n+6));return r?(t.L=Math.floor(r[0]/1e3),n+r[0].length):-1}function fh(t,e,n){var r=ql.exec(e.slice(n,n+1));return r?n+r[0].length:-1}function dh(t,e,n){var r=Ul.exec(e.slice(n));return r?(t.Q=+r[0],n+r[0].length):-1}function ph(t,e,n){var r=Ul.exec(e.slice(n));return r?(t.s=+r[0],n+r[0].length):-1}function yh(t,e){return $l(t.getDate(),e,2)}function gh(t,e){return $l(t.getHours(),e,2)}function mh(t,e){return $l(t.getHours()%12||12,e,2)}function vh(t,e){return $l(1+Dl.count(Bl(t),t),e,3)}function bh(t,e){return $l(t.getMilliseconds(),e,3)}function _h(t,e){return bh(t,e)+"000"}function xh(t,e){return $l(t.getMonth()+1,e,2)}function wh(t,e){return $l(t.getMinutes(),e,2)}function kh(t,e){return $l(t.getSeconds(),e,2)}function Th(t){var e=t.getDay();return 0===e?7:e}function Eh(t,e){return $l(kl.count(Bl(t)-1,t),e,2)}function Ch(t){var e=t.getDay();return e>=4||0===e?Sl(t):Sl.ceil(t)}function Sh(t,e){return t=Ch(t),$l(Sl.count(Bl(t),t)+(4===Bl(t).getDay()),e,2)}function Ah(t){return t.getDay()}function Mh(t,e){return $l(Tl.count(Bl(t)-1,t),e,2)}function Nh(t,e){return $l(t.getFullYear()%100,e,2)}function Dh(t,e){return $l((t=Ch(t)).getFullYear()%100,e,2)}function Oh(t,e){return $l(t.getFullYear()%1e4,e,4)}function Bh(t,e){var n=t.getDay();return $l((t=n>=4||0===n?Sl(t):Sl.ceil(t)).getFullYear()%1e4,e,4)}function Lh(t){var e=t.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+$l(e/60|0,"0",2)+$l(e%60,"0",2)}function Ih(t,e){return $l(t.getUTCDate(),e,2)}function Rh(t,e){return $l(t.getUTCHours(),e,2)}function Fh(t,e){return $l(t.getUTCHours()%12||12,e,2)}function Ph(t,e){return $l(1+xl.count(Il(t),t),e,3)}function jh(t,e){return $l(t.getUTCMilliseconds(),e,3)}function Yh(t,e){return jh(t,e)+"000"}function zh(t,e){return $l(t.getUTCMonth()+1,e,2)}function Uh(t,e){return $l(t.getUTCMinutes(),e,2)}function qh(t,e){return $l(t.getUTCSeconds(),e,2)}function Hh(t){var e=t.getUTCDay();return 0===e?7:e}function $h(t,e){return $l(dl.count(Il(t)-1,t),e,2)}function Wh(t){var e=t.getUTCDay();return e>=4||0===e?ml(t):ml.ceil(t)}function Vh(t,e){return t=Wh(t),$l(ml.count(Il(t),t)+(4===Il(t).getUTCDay()),e,2)}function Gh(t){return t.getUTCDay()}function Xh(t,e){return $l(pl.count(Il(t)-1,t),e,2)}function Zh(t,e){return $l(t.getUTCFullYear()%100,e,2)}function Qh(t,e){return $l((t=Wh(t)).getUTCFullYear()%100,e,2)}function Kh(t,e){return $l(t.getUTCFullYear()%1e4,e,4)}function Jh(t,e){var n=t.getUTCDay();return $l((t=n>=4||0===n?ml(t):ml.ceil(t)).getUTCFullYear()%1e4,e,4)}function tf(){return"+0000"}function ef(){return"%"}function nf(t){return+t}function rf(t){return Math.floor(+t/1e3)}jl=function(t){var e=t.dateTime,n=t.date,r=t.time,i=t.periods,a=t.days,o=t.shortDays,s=t.months,c=t.shortMonths,u=Vl(i),l=Gl(i),h=Vl(a),f=Gl(a),d=Vl(o),p=Gl(o),y=Vl(s),g=Gl(s),m=Vl(c),v=Gl(c),b={a:function(t){return o[t.getDay()]},A:function(t){return a[t.getDay()]},b:function(t){return c[t.getMonth()]},B:function(t){return s[t.getMonth()]},c:null,d:yh,e:yh,f:_h,g:Dh,G:Bh,H:gh,I:mh,j:vh,L:bh,m:xh,M:wh,p:function(t){return i[+(t.getHours()>=12)]},q:function(t){return 1+~~(t.getMonth()/3)},Q:nf,s:rf,S:kh,u:Th,U:Eh,V:Sh,w:Ah,W:Mh,x:null,X:null,y:Nh,Y:Oh,Z:Lh,"%":ef},_={a:function(t){return o[t.getUTCDay()]},A:function(t){return a[t.getUTCDay()]},b:function(t){return c[t.getUTCMonth()]},B:function(t){return s[t.getUTCMonth()]},c:null,d:Ih,e:Ih,f:Yh,g:Qh,G:Jh,H:Rh,I:Fh,j:Ph,L:jh,m:zh,M:Uh,p:function(t){return i[+(t.getUTCHours()>=12)]},q:function(t){return 1+~~(t.getUTCMonth()/3)},Q:nf,s:rf,S:qh,u:Hh,U:$h,V:Vh,w:Gh,W:Xh,x:null,X:null,y:Zh,Y:Kh,Z:tf,"%":ef},x={a:function(t,e,n){var r=d.exec(e.slice(n));return r?(t.w=p.get(r[0].toLowerCase()),n+r[0].length):-1},A:function(t,e,n){var r=h.exec(e.slice(n));return r?(t.w=f.get(r[0].toLowerCase()),n+r[0].length):-1},b:function(t,e,n){var r=m.exec(e.slice(n));return r?(t.m=v.get(r[0].toLowerCase()),n+r[0].length):-1},B:function(t,e,n){var r=y.exec(e.slice(n));return r?(t.m=g.get(r[0].toLowerCase()),n+r[0].length):-1},c:function(t,n,r){return T(t,e,n,r)},d:ah,e:ah,f:hh,g:eh,G:th,H:sh,I:sh,j:oh,L:lh,m:ih,M:ch,p:function(t,e,n){var r=u.exec(e.slice(n));return r?(t.p=l.get(r[0].toLowerCase()),n+r[0].length):-1},q:rh,Q:dh,s:ph,S:uh,u:Zl,U:Ql,V:Kl,w:Xl,W:Jl,x:function(t,e,r){return T(t,n,e,r)},X:function(t,e,n){return T(t,r,e,n)},y:eh,Y:th,Z:nh,"%":fh};function w(t,e){return function(n){var r,i,a,o=[],s=-1,c=0,u=t.length;for(n instanceof Date||(n=new Date(+n));++s53)return null;"w"in a||(a.w=1),"Z"in a?(i=(r=Fl(Pl(a.y,0,1))).getUTCDay(),r=i>4||0===i?pl.ceil(r):pl(r),r=xl.offset(r,7*(a.V-1)),a.y=r.getUTCFullYear(),a.m=r.getUTCMonth(),a.d=r.getUTCDate()+(a.w+6)%7):(i=(r=Rl(Pl(a.y,0,1))).getDay(),r=i>4||0===i?Tl.ceil(r):Tl(r),r=Dl.offset(r,7*(a.V-1)),a.y=r.getFullYear(),a.m=r.getMonth(),a.d=r.getDate()+(a.w+6)%7)}else("W"in a||"U"in a)&&("w"in a||(a.w="u"in a?a.u%7:"W"in a?1:0),i="Z"in a?Fl(Pl(a.y,0,1)).getUTCDay():Rl(Pl(a.y,0,1)).getDay(),a.m=0,a.d="W"in a?(a.w+6)%7+7*a.W-(i+5)%7:a.w+7*a.U-(i+6)%7);return"Z"in a?(a.H+=a.Z/100|0,a.M+=a.Z%100,Fl(a)):Rl(a)}}function T(t,e,n,r){for(var i,a,o=0,s=e.length,c=n.length;o=c)return-1;if(37===(i=e.charCodeAt(o++))){if(i=e.charAt(o++),!(a=x[i in zl?e.charAt(o++):i])||(r=a(t,n,r))<0)return-1}else if(i!=n.charCodeAt(r++))return-1}return r}return b.x=w(n,b),b.X=w(r,b),b.c=w(e,b),_.x=w(n,_),_.X=w(r,_),_.c=w(e,_),{format:function(t){var e=w(t+="",b);return e.toString=function(){return t},e},parse:function(t){var e=k(t+="",!1);return e.toString=function(){return t},e},utcFormat:function(t){var e=w(t+="",_);return e.toString=function(){return t},e},utcParse:function(t){var e=k(t+="",!0);return e.toString=function(){return t},e}}}({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]}),Yl=jl.format,jl.parse,jl.utcFormat,jl.utcParse;var af={value:()=>{}};function of(){for(var t,e=0,n=arguments.length,r={};e=0&&(n=t.slice(r+1),t=t.slice(0,r)),t&&!e.hasOwnProperty(t))throw new Error("unknown type: "+t);return{type:t,name:n}}))}function uf(t,e){for(var n,r=0,i=t.length;r0)for(var n,r,i=new Array(n),a=0;a=0&&e._call.call(void 0,t),e=e._next;--pf}()}finally{pf=0,function(){for(var t,e,n=ff,r=1/0;n;)n._call?(r>n._time&&(r=n._time),t=n,n=n._next):(e=n._next,n._next=null,n=t?t._next=e:ff=e);df=t,Af(r)}(),vf=0}}function Sf(){var t=_f.now(),e=t-mf;e>1e3&&(bf-=e,mf=t)}function Af(t){pf||(yf&&(yf=clearTimeout(yf)),t-vf>24?(t<1/0&&(yf=setTimeout(Cf,t-_f.now()-bf)),gf&&(gf=clearInterval(gf))):(gf||(mf=_f.now(),gf=setInterval(Sf,1e3)),pf=1,xf(Cf)))}function Mf(t,e,n){var r=new Tf;return e=null==e?0:+e,r.restart((n=>{r.stop(),t(n+e)}),e,n),r}Tf.prototype=Ef.prototype={constructor:Tf,restart:function(t,e,n){if("function"!=typeof t)throw new TypeError("callback is not a function");n=(null==n?wf():+n)+(null==e?0:+e),this._next||df===this||(df?df._next=this:ff=this,df=this),this._call=t,this._time=n,Af()},stop:function(){this._call&&(this._call=null,this._time=1/0,Af())}};var Nf=hf("start","end","cancel","interrupt"),Df=[];function Of(t,e,n,r,i,a){var o=t.__transition;if(o){if(n in o)return}else t.__transition={};!function(t,e,n){var r,i=t.__transition;function a(c){var u,l,h,f;if(1!==n.state)return s();for(u in i)if((f=i[u]).name===n.name){if(3===f.state)return Mf(a);4===f.state?(f.state=6,f.timer.stop(),f.on.call("interrupt",t,t.__data__,f.index,f.group),delete i[u]):+u0)throw new Error("too late; already scheduled");return n}function Lf(t,e){var n=If(t,e);if(n.state>3)throw new Error("too late; already running");return n}function If(t,e){var n=t.__transition;if(!n||!(n=n[e]))throw new Error("transition not found");return n}function Rf(t,e){return t=+t,e=+e,function(n){return t*(1-n)+e*n}}var Ff,Pf=180/Math.PI,jf={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1};function Yf(t,e,n,r,i,a){var o,s,c;return(o=Math.sqrt(t*t+e*e))&&(t/=o,e/=o),(c=t*n+e*r)&&(n-=t*c,r-=e*c),(s=Math.sqrt(n*n+r*r))&&(n/=s,r/=s,c/=s),t*r180?e+=360:e-t>180&&(t+=360),a.push({i:n.push(i(n)+"rotate(",null,r)-2,x:Rf(t,e)})):e&&n.push(i(n)+"rotate("+e+r)}(a.rotate,o.rotate,s,c),function(t,e,n,a){t!==e?a.push({i:n.push(i(n)+"skewX(",null,r)-2,x:Rf(t,e)}):e&&n.push(i(n)+"skewX("+e+r)}(a.skewX,o.skewX,s,c),function(t,e,n,r,a,o){if(t!==n||e!==r){var s=a.push(i(a)+"scale(",null,",",null,")");o.push({i:s-4,x:Rf(t,n)},{i:s-2,x:Rf(e,r)})}else 1===n&&1===r||a.push(i(a)+"scale("+n+","+r+")")}(a.scaleX,a.scaleY,o.scaleX,o.scaleY,s,c),a=o=null,function(t){for(var e,n=-1,r=c.length;++n=1?(n=1,e-1):Math.floor(n*e),i=t[r],a=t[r+1],o=r>0?t[r-1]:2*i-a,s=ra&&(i=e.slice(a,i),s[o]?s[o]+=i:s[++o]=i),(n=n[0])===(r=r[0])?s[o]?s[o]+=r:s[++o]=r:(s[++o]=null,c.push({i:o,x:Rf(n,r)})),a=Qf.lastIndex;return a=0&&(t=t.slice(0,e)),!t||"start"===t}))}(e)?Bf:Lf;return function(){var o=a(this,t),s=o.on;s!==r&&(i=(r=s).copy()).on(e,n),o.on=i}}var gd=iu.prototype.constructor;function md(t){return function(){this.style.removeProperty(t)}}function vd(t,e,n){return function(r){this.style.setProperty(t,e.call(this,r),n)}}function bd(t,e,n){var r,i;function a(){var a=e.apply(this,arguments);return a!==i&&(r=(i=a)&&vd(t,a,n)),r}return a._value=e,a}function _d(t){return function(e){this.textContent=t.call(this,e)}}function xd(t){var e,n;function r(){var r=t.apply(this,arguments);return r!==n&&(e=(n=r)&&_d(r)),e}return r._value=t,r}var wd=0;function kd(t,e,n,r){this._groups=t,this._parents=e,this._name=n,this._id=r}function Td(){return++wd}var Ed=iu.prototype;kd.prototype=function(t){return iu().transition(t)}.prototype={constructor:kd,select:function(t){var e=this._name,n=this._id;"function"!=typeof t&&(t=$s(t));for(var r=this._groups,i=r.length,a=new Array(i),o=0;o2&&n.state<5,n.state=6,n.timer.stop(),n.on.call(r?"interrupt":"cancel",t,t.__data__,n.index,n.group),delete a[i]):o=!1;o&&delete t.__transition}}(this,t)}))},iu.prototype.transition=function(t){var e,n;t instanceof kd?(e=t._id,t=t._name):(e=Td(),(n=Cd).time=wf(),t=null==t?null:t+"");for(var r=this._groups,i=r.length,a=0;ae?1:t>=e?0:NaN}Yd.prototype={constructor:Yd,appendChild:function(t){return this._parent.insertBefore(t,this._next)},insertBefore:function(t,e){return this._parent.insertBefore(t,e)},querySelector:function(t){return this._parent.querySelector(t)},querySelectorAll:function(t){return this._parent.querySelectorAll(t)}};var Vd="http://www.w3.org/1999/xhtml";const Gd={svg:"http://www.w3.org/2000/svg",xhtml:Vd,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};function Xd(t){var e=t+="",n=e.indexOf(":");return n>=0&&"xmlns"!==(e=t.slice(0,n))&&(t=t.slice(n+1)),Gd.hasOwnProperty(e)?{space:Gd[e],local:t}:t}function Zd(t){return function(){this.removeAttribute(t)}}function Qd(t){return function(){this.removeAttributeNS(t.space,t.local)}}function Kd(t,e){return function(){this.setAttribute(t,e)}}function Jd(t,e){return function(){this.setAttributeNS(t.space,t.local,e)}}function tp(t,e){return function(){var n=e.apply(this,arguments);null==n?this.removeAttribute(t):this.setAttribute(t,n)}}function ep(t,e){return function(){var n=e.apply(this,arguments);null==n?this.removeAttributeNS(t.space,t.local):this.setAttributeNS(t.space,t.local,n)}}function np(t){return t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView}function rp(t){return function(){this.style.removeProperty(t)}}function ip(t,e,n){return function(){this.style.setProperty(t,e,n)}}function ap(t,e,n){return function(){var r=e.apply(this,arguments);null==r?this.style.removeProperty(t):this.style.setProperty(t,r,n)}}function op(t,e){return t.style.getPropertyValue(e)||np(t).getComputedStyle(t,null).getPropertyValue(e)}function sp(t){return function(){delete this[t]}}function cp(t,e){return function(){this[t]=e}}function up(t,e){return function(){var n=e.apply(this,arguments);null==n?delete this[t]:this[t]=n}}function lp(t){return t.trim().split(/^|\s+/)}function hp(t){return t.classList||new fp(t)}function fp(t){this._node=t,this._names=lp(t.getAttribute("class")||"")}function dp(t,e){for(var n=hp(t),r=-1,i=e.length;++r=0&&(e=t.slice(n+1),t=t.slice(0,n)),{type:t,name:e}}))}function Lp(t){return function(){var e=this.__on;if(e){for(var n,r=0,i=-1,a=e.length;r=0&&(this._names.splice(e,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(t){return this._names.indexOf(t)>=0}};var jp=[null];function Yp(t,e){this._groups=t,this._parents=e}function zp(){return new Yp([[document.documentElement]],jp)}Yp.prototype=zp.prototype={constructor:Yp,select:function(t){"function"!=typeof t&&(t=Md(t));for(var e=this._groups,n=e.length,r=new Array(n),i=0;i=x&&(x=_+1);!(b=g[x])&&++x=0;)(r=i[a])&&(o&&4^r.compareDocumentPosition(o)&&o.parentNode.insertBefore(r,o),o=r);return this},sort:function(t){function e(e,n){return e&&n?t(e.__data__,n.__data__):!e-!n}t||(t=Wd);for(var n=this._groups,r=n.length,i=new Array(r),a=0;a1?this.each((null==e?rp:"function"==typeof e?ap:ip)(t,e,null==n?"":n)):op(this.node(),t)},property:function(t,e){return arguments.length>1?this.each((null==e?sp:"function"==typeof e?up:cp)(t,e)):this.node()[t]},classed:function(t,e){var n=lp(t+"");if(arguments.length<2){for(var r=hp(this.node()),i=-1,a=n.length;++i{}};function Hp(){for(var t,e=0,n=arguments.length,r={};e=0&&(n=t.slice(r+1),t=t.slice(0,r)),t&&!e.hasOwnProperty(t))throw new Error("unknown type: "+t);return{type:t,name:n}}))}function Vp(t,e){for(var n,r=0,i=t.length;r0)for(var n,r,i=new Array(n),a=0;a=0&&e._call.call(void 0,t),e=e._next;--Kp}()}finally{Kp=0,function(){for(var t,e,n=Zp,r=1/0;n;)n._call?(r>n._time&&(r=n._time),t=n,n=n._next):(e=n._next,n._next=null,n=t?t._next=e:Zp=e);Qp=t,fy(r)}(),ny=0}}function hy(){var t=iy.now(),e=t-ey;e>1e3&&(ry-=e,ey=t)}function fy(t){Kp||(Jp&&(Jp=clearTimeout(Jp)),t-ny>24?(t<1/0&&(Jp=setTimeout(ly,t-iy.now()-ry)),ty&&(ty=clearInterval(ty))):(ty||(ey=iy.now(),ty=setInterval(hy,1e3)),Kp=1,ay(ly)))}function dy(t,e,n){var r=new cy;return e=null==e?0:+e,r.restart((n=>{r.stop(),t(n+e)}),e,n),r}cy.prototype=uy.prototype={constructor:cy,restart:function(t,e,n){if("function"!=typeof t)throw new TypeError("callback is not a function");n=(null==n?oy():+n)+(null==e?0:+e),this._next||Qp===this||(Qp?Qp._next=this:Zp=this,Qp=this),this._call=t,this._time=n,fy()},stop:function(){this._call&&(this._call=null,this._time=1/0,fy())}};var py=Xp("start","end","cancel","interrupt"),yy=[];function gy(t,e,n,r,i,a){var o=t.__transition;if(o){if(n in o)return}else t.__transition={};!function(t,e,n){var r,i=t.__transition;function a(c){var u,l,h,f;if(1!==n.state)return s();for(u in i)if((f=i[u]).name===n.name){if(3===f.state)return dy(a);4===f.state?(f.state=6,f.timer.stop(),f.on.call("interrupt",t,t.__data__,f.index,f.group),delete i[u]):+u0)throw new Error("too late; already scheduled");return n}function vy(t,e){var n=by(t,e);if(n.state>3)throw new Error("too late; already running");return n}function by(t,e){var n=t.__transition;if(!n||!(n=n[e]))throw new Error("transition not found");return n}function _y(t,e){return t=+t,e=+e,function(n){return t*(1-n)+e*n}}var xy,wy=180/Math.PI,ky={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1};function Ty(t,e,n,r,i,a){var o,s,c;return(o=Math.sqrt(t*t+e*e))&&(t/=o,e/=o),(c=t*n+e*r)&&(n-=t*c,r-=e*c),(s=Math.sqrt(n*n+r*r))&&(n/=s,r/=s,c/=s),t*r180?e+=360:e-t>180&&(t+=360),a.push({i:n.push(i(n)+"rotate(",null,r)-2,x:_y(t,e)})):e&&n.push(i(n)+"rotate("+e+r)}(a.rotate,o.rotate,s,c),function(t,e,n,a){t!==e?a.push({i:n.push(i(n)+"skewX(",null,r)-2,x:_y(t,e)}):e&&n.push(i(n)+"skewX("+e+r)}(a.skewX,o.skewX,s,c),function(t,e,n,r,a,o){if(t!==n||e!==r){var s=a.push(i(a)+"scale(",null,",",null,")");o.push({i:s-4,x:_y(t,n)},{i:s-2,x:_y(e,r)})}else 1===n&&1===r||a.push(i(a)+"scale("+n+","+r+")")}(a.scaleX,a.scaleY,o.scaleX,o.scaleY,s,c),a=o=null,function(t){for(var e,n=-1,r=c.length;++n>8&15|e>>4&240,e>>4&15|240&e,(15&e)<<4|15&e,1):8===n?Qy(e>>24&255,e>>16&255,e>>8&255,(255&e)/255):4===n?Qy(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|240&e,((15&e)<<4|15&e)/255):null):(e=Yy.exec(t))?new tg(e[1],e[2],e[3],1):(e=zy.exec(t))?new tg(255*e[1]/100,255*e[2]/100,255*e[3]/100,1):(e=Uy.exec(t))?Qy(e[1],e[2],e[3],e[4]):(e=qy.exec(t))?Qy(255*e[1]/100,255*e[2]/100,255*e[3]/100,e[4]):(e=Hy.exec(t))?ig(e[1],e[2]/100,e[3]/100,1):(e=$y.exec(t))?ig(e[1],e[2]/100,e[3]/100,e[4]):Wy.hasOwnProperty(t)?Zy(Wy[t]):"transparent"===t?new tg(NaN,NaN,NaN,0):null}function Zy(t){return new tg(t>>16&255,t>>8&255,255&t,1)}function Qy(t,e,n,r){return r<=0&&(t=e=n=NaN),new tg(t,e,n,r)}function Ky(t){return t instanceof By||(t=Xy(t)),t?new tg((t=t.rgb()).r,t.g,t.b,t.opacity):new tg}function Jy(t,e,n,r){return 1===arguments.length?Ky(t):new tg(t,e,n,null==r?1:r)}function tg(t,e,n,r){this.r=+t,this.g=+e,this.b=+n,this.opacity=+r}function eg(){return"#"+rg(this.r)+rg(this.g)+rg(this.b)}function ng(){var t=this.opacity;return(1===(t=isNaN(t)?1:Math.max(0,Math.min(1,t)))?"rgb(":"rgba(")+Math.max(0,Math.min(255,Math.round(this.r)||0))+", "+Math.max(0,Math.min(255,Math.round(this.g)||0))+", "+Math.max(0,Math.min(255,Math.round(this.b)||0))+(1===t?")":", "+t+")")}function rg(t){return((t=Math.max(0,Math.min(255,Math.round(t)||0)))<16?"0":"")+t.toString(16)}function ig(t,e,n,r){return r<=0?t=e=n=NaN:n<=0||n>=1?t=e=NaN:e<=0&&(t=NaN),new og(t,e,n,r)}function ag(t){if(t instanceof og)return new og(t.h,t.s,t.l,t.opacity);if(t instanceof By||(t=Xy(t)),!t)return new og;if(t instanceof og)return t;var e=(t=t.rgb()).r/255,n=t.g/255,r=t.b/255,i=Math.min(e,n,r),a=Math.max(e,n,r),o=NaN,s=a-i,c=(a+i)/2;return s?(o=e===a?(n-r)/s+6*(n0&&c<1?0:o,new og(o,s,c,t.opacity)}function og(t,e,n,r){this.h=+t,this.s=+e,this.l=+n,this.opacity=+r}function sg(t,e,n){return 255*(t<60?e+(n-e)*t/60:t<180?n:t<240?e+(n-e)*(240-t)/60:e)}function cg(t,e,n,r,i){var a=t*t,o=a*t;return((1-3*t+3*a-o)*e+(4-6*a+3*o)*n+(1+3*t+3*a-3*o)*r+o*i)/6}Dy(By,Xy,{copy:function(t){return Object.assign(new this.constructor,this,t)},displayable:function(){return this.rgb().displayable()},hex:Vy,formatHex:Vy,formatHsl:function(){return ag(this).formatHsl()},formatRgb:Gy,toString:Gy}),Dy(tg,Jy,Oy(By,{brighter:function(t){return t=null==t?Iy:Math.pow(Iy,t),new tg(this.r*t,this.g*t,this.b*t,this.opacity)},darker:function(t){return t=null==t?Ly:Math.pow(Ly,t),new tg(this.r*t,this.g*t,this.b*t,this.opacity)},rgb:function(){return this},displayable:function(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:eg,formatHex:eg,formatRgb:ng,toString:ng})),Dy(og,(function(t,e,n,r){return 1===arguments.length?ag(t):new og(t,e,n,null==r?1:r)}),Oy(By,{brighter:function(t){return t=null==t?Iy:Math.pow(Iy,t),new og(this.h,this.s,this.l*t,this.opacity)},darker:function(t){return t=null==t?Ly:Math.pow(Ly,t),new og(this.h,this.s,this.l*t,this.opacity)},rgb:function(){var t=this.h%360+360*(this.h<0),e=isNaN(t)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*e,i=2*n-r;return new tg(sg(t>=240?t-240:t+120,i,r),sg(t,i,r),sg(t<120?t+240:t-120,i,r),this.opacity)},displayable:function(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl:function(){var t=this.opacity;return(1===(t=isNaN(t)?1:Math.max(0,Math.min(1,t)))?"hsl(":"hsla(")+(this.h||0)+", "+100*(this.s||0)+"%, "+100*(this.l||0)+"%"+(1===t?")":", "+t+")")}}));const ug=t=>()=>t;function lg(t,e){var n=e-t;return n?function(t,e){return function(n){return t+n*e}}(t,n):ug(isNaN(t)?e:t)}const hg=function t(e){var n=function(t){return 1==(t=+t)?lg:function(e,n){return n-e?function(t,e,n){return t=Math.pow(t,n),e=Math.pow(e,n)-t,n=1/n,function(r){return Math.pow(t+r*e,n)}}(e,n,t):ug(isNaN(e)?n:e)}}(e);function r(t,e){var r=n((t=Jy(t)).r,(e=Jy(e)).r),i=n(t.g,e.g),a=n(t.b,e.b),o=lg(t.opacity,e.opacity);return function(e){return t.r=r(e),t.g=i(e),t.b=a(e),t.opacity=o(e),t+""}}return r.gamma=t,r}(1);function fg(t){return function(e){var n,r,i=e.length,a=new Array(i),o=new Array(i),s=new Array(i);for(n=0;n=1?(n=1,e-1):Math.floor(n*e),i=t[r],a=t[r+1],o=r>0?t[r-1]:2*i-a,s=ra&&(i=e.slice(a,i),s[o]?s[o]+=i:s[++o]=i),(n=n[0])===(r=r[0])?s[o]?s[o]+=r:s[++o]=r:(s[++o]=null,c.push({i:o,x:_y(n,r)})),a=pg.lastIndex;return a=0&&(t=t.slice(0,e)),!t||"start"===t}))}(e)?my:vy;return function(){var o=a(this,t),s=o.on;s!==r&&(i=(r=s).copy()).on(e,n),o.on=i}}var Bg=Up.prototype.constructor;function Lg(t){return function(){this.style.removeProperty(t)}}function Ig(t,e,n){return function(r){this.style.setProperty(t,e.call(this,r),n)}}function Rg(t,e,n){var r,i;function a(){var a=e.apply(this,arguments);return a!==i&&(r=(i=a)&&Ig(t,a,n)),r}return a._value=e,a}function Fg(t){return function(e){this.textContent=t.call(this,e)}}function Pg(t){var e,n;function r(){var r=t.apply(this,arguments);return r!==n&&(e=(n=r)&&Fg(r)),e}return r._value=t,r}var jg=0;function Yg(t,e,n,r){this._groups=t,this._parents=e,this._name=n,this._id=r}function zg(){return++jg}var Ug=Up.prototype;Yg.prototype=function(t){return Up().transition(t)}.prototype={constructor:Yg,select:function(t){var e=this._name,n=this._id;"function"!=typeof t&&(t=Md(t));for(var r=this._groups,i=r.length,a=new Array(i),o=0;o2&&n.state<5,n.state=6,n.timer.stop(),n.on.call(r?"interrupt":"cancel",t,t.__data__,n.index,n.group),delete a[i]):o=!1;o&&delete t.__transition}}(this,t)}))},Up.prototype.transition=function(t){var e,n;t instanceof Yg?(e=t._id,t=t._name):(e=zg(),(n=qg).time=oy(),t=null==t?null:t+"");for(var r=this._groups,i=r.length,a=0;a0?tm(fm,--lm):0,cm--,10===hm&&(cm=1,sm--),hm}function ym(){return hm=lm2||bm(hm)>3?"":" "}function wm(t,e){for(;--e&&ym()&&!(hm<48||hm>102||hm>57&&hm<65||hm>70&&hm<97););return vm(t,mm()+(e<6&&32==gm()&&32==ym()))}function km(t){for(;ym();)switch(hm){case t:return lm;case 34:case 39:34!==t&&39!==t&&km(hm);break;case 40:41===t&&km(t);break;case 92:ym()}return lm}function Tm(t,e){for(;ym()&&t+hm!==57&&(t+hm!==84||47!==gm()););return"/*"+vm(e,lm-1)+"*"+Zg(47===t?t:ym())}function Em(t){for(;!bm(gm());)ym();return vm(t,lm)}function Cm(t){return function(t){return fm="",t}(Sm("",null,null,null,[""],t=function(t){return sm=cm=1,um=nm(fm=t),lm=0,[]}(t),0,[0],t))}function Sm(t,e,n,r,i,a,o,s,c){for(var u=0,l=0,h=o,f=0,d=0,p=0,y=1,g=1,m=1,v=0,b="",_=i,x=a,w=r,k=b;g;)switch(p=v,v=ym()){case 40:if(108!=p&&58==k.charCodeAt(h-1)){-1!=Jg(k+=Kg(_m(v),"&","&\f"),"&\f")&&(m=-1);break}case 34:case 39:case 91:k+=_m(v);break;case 9:case 10:case 13:case 32:k+=xm(p);break;case 92:k+=wm(mm()-1,7);continue;case 47:switch(gm()){case 42:case 47:im(Mm(Tm(ym(),mm()),e,n),c);break;default:k+="/"}break;case 123*y:s[u++]=nm(k)*m;case 125*y:case 59:case 0:switch(v){case 0:case 125:g=0;case 59+l:d>0&&nm(k)-h&&im(d>32?Nm(k+";",r,n,h-1):Nm(Kg(k," ","")+";",r,n,h-2),c);break;case 59:k+=";";default:if(im(w=Am(k,e,n,u,l,i,s,b,_=[],x=[],h),a),123===v)if(0===l)Sm(k,e,w,w,_,a,h,s,x);else switch(f){case 100:case 109:case 115:Sm(t,w,w,r&&im(Am(t,w,w,0,0,i,s,b,i,_=[],h),x),i,x,h,s,r?_:x);break;default:Sm(k,w,w,w,[""],x,0,s,x)}}u=l=d=0,y=m=1,b=k="",h=o;break;case 58:h=1+nm(k),d=p;default:if(y<1)if(123==v)--y;else if(125==v&&0==y++&&125==pm())continue;switch(k+=Zg(v),v*y){case 38:m=l>0?1:(k+="\f",-1);break;case 44:s[u++]=(nm(k)-1)*m,m=1;break;case 64:45===gm()&&(k+=_m(ym())),f=gm(),l=h=nm(b=k+=Em(mm())),v++;break;case 45:45===p&&2==nm(k)&&(y=0)}}return a}function Am(t,e,n,r,i,a,o,s,c,u,l){for(var h=i-1,f=0===i?a:[""],d=rm(f),p=0,y=0,g=0;p0?f[m]+" "+v:Kg(v,/&\f/g,f[m])))&&(c[g++]=b);return dm(t,e,n,0===i?Vg:s,c,u,l)}function Mm(t,e,n){return dm(t,e,n,Wg,Zg(hm),em(t,2,-2),0)}function Nm(t,e,n,r){return dm(t,e,n,Gg,em(t,0,r),em(t,r+1,-1),r)}const Dm="8.13.10";var Om=n(9609),Bm=n(7856),Lm=n.n(Bm),Im=function(t){var e=t.replace(/\\u[\dA-F]{4}/gi,(function(t){return String.fromCharCode(parseInt(t.replace(/\\u/g,""),16))}));return e=(e=(e=e.replace(/\\x([0-9a-f]{2})/gi,(function(t,e){return String.fromCharCode(parseInt(e,16))}))).replace(/\\[\d\d\d]{3}/gi,(function(t){return String.fromCharCode(parseInt(t.replace(/\\/g,""),8))}))).replace(/\\[\d\d\d]{2}/gi,(function(t){return String.fromCharCode(parseInt(t.replace(/\\/g,""),8))}))},Rm=function(t){for(var e="",n=0;n>=0;){if(!((n=t.indexOf("=0)){e+=t,n=-1;break}e+=t.substr(0,n),(n=(t=t.substr(n+1)).indexOf("<\/script>"))>=0&&(n+=9,t=t.substr(n))}var r=Im(e);return(r=(r=(r=r.replace(/script>/gi,"#")).replace(/javascript:/gi,"#")).replace(/onerror=/gi,"onerror:")).replace(/ + + + + +
    + +
    + + + + + + + + +
    +
    +

    Method lookup

    +

    Method lookup can be rather complex due to the interaction of a number +of factors, such as self types, autoderef, trait lookup, etc. This +file provides an overview of the process. More detailed notes are in +the code itself, naturally.

    +

    One way to think of method lookup is that we convert an expression of +the form receiver.method(...) into a more explicit fully-qualified syntax +(formerly called UFCS):

    +
      +
    • Trait::method(ADJ(receiver), ...) for a trait call
    • +
    • ReceiverType::method(ADJ(receiver), ...) for an inherent method call
    • +
    +

    Here ADJ is some kind of adjustment, which is typically a series of +autoderefs and then possibly an autoref (e.g., &**receiver). However +we sometimes do other adjustments and coercions along the way, in +particular unsizing (e.g., converting from [T; n] to [T]).

    +

    Method lookup is divided into two major phases:

    +
      +
    1. Probing (probe.rs). The probe phase is when we decide what method +to call and how to adjust the receiver.
    2. +
    3. Confirmation (confirm.rs). The confirmation phase "applies" +this selection, updating the side-tables, unifying type variables, and +otherwise doing side-effectful things.
    4. +
    +

    One reason for this division is to be more amenable to caching. The +probe phase produces a "pick" (probe::Pick), which is designed to be +cacheable across method-call sites. Therefore, it does not include +inference variables or other information.

    +

    The Probe phase

    +

    Steps

    +

    The first thing that the probe phase does is to create a series of +steps. This is done by progressively dereferencing the receiver type +until it cannot be deref'd anymore, as well as applying an optional +"unsize" step. So if the receiver has type Rc<Box<[T; 3]>>, this +might yield:

    +
      +
    1. Rc<Box<[T; 3]>>
    2. +
    3. Box<[T; 3]>
    4. +
    5. [T; 3]
    6. +
    7. [T]
    8. +
    +

    Candidate assembly

    +

    We then search along those steps to create a list of candidates. A +Candidate is a method item that might plausibly be the method being +invoked. For each candidate, we'll derive a "transformed self type" +that takes into account explicit self.

    +

    Candidates are grouped into two kinds, inherent and extension.

    +

    Inherent candidates are those that are derived from the +type of the receiver itself. So, if you have a receiver of some +nominal type Foo (e.g., a struct), any methods defined within an +impl like impl Foo are inherent methods. Nothing needs to be +imported to use an inherent method, they are associated with the type +itself (note that inherent impls can only be defined in the same +crate as the type itself).

    + +

    Extension candidates are derived from imported traits. If I have +the trait ToString imported, and I call to_string() as a method, +then we will list the to_string() definition in each impl of +ToString as a candidate. These kinds of method calls are called +"extension methods".

    +

    So, let's continue our example. Imagine that we were calling a method +foo with the receiver Rc<Box<[T; 3]>> and there is a trait Foo +that defines it with &self for the type Rc<U> as well as a method +on the type Box that defines foo but with &mut self. Then we +might have two candidates:

    +
      +
    • &Rc<U> as an extension candidate
    • +
    • &mut Box<U> as an inherent candidate
    • +
    + +

    Finally, to actually pick the method, we will search down the steps, +trying to match the receiver type against the candidate types. At +each step, we also consider an auto-ref and auto-mut-ref to see whether +that makes any of the candidates match. For each resulting receiver +type, we consider inherent candidates before extension candidates. +If there are multiple matching candidates in a group, we report an +error, except that multiple impls of the same trait are treated as a +single match. Otherwise we pick the first match we find.

    +

    In the case of our example, the first step is Rc<Box<[T; 3]>>, +which does not itself match any candidate. But when we autoref it, we +get the type &Rc<Box<[T; 3]>> which matches &Rc<U>. We would then +recursively consider all where-clauses that appear on the impl: if +those match (or we cannot rule out that they do), then this is the +method we would pick. Otherwise, we would continue down the series of +steps.

    + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mir/construction.html b/mir/construction.html new file mode 100644 index 000000000..90cc94a98 --- /dev/null +++ b/mir/construction.html @@ -0,0 +1,337 @@ + + + + + + MIR construction - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    MIR construction

    + +

    The lowering of HIR to MIR occurs for the following (probably incomplete) +list of items:

    +
      +
    • Function and closure bodies
    • +
    • Initializers of static and const items
    • +
    • Initializers of enum discriminants
    • +
    • Glue and shims of any kind +
        +
      • Tuple struct initializer functions
      • +
      • Drop code (the Drop::drop function is not called directly)
      • +
      • Drop implementations of types without an explicit Drop implementation
      • +
      +
    • +
    +

    The lowering is triggered by calling the mir_built query. The MIR builder does +not actually use the HIR but operates on the THIR instead, processing THIR +expressions recursively.

    +

    The lowering creates local variables for every argument as specified in the signature. +Next, it creates local variables for every binding specified (e.g. (a, b): (i32, String)) +produces 3 bindings, one for the argument, and two for the bindings. Next, it generates +field accesses that read the fields from the argument and writes the value to the binding +variable.

    +

    With this initialization out of the way, the lowering triggers a recursive call +to a function that generates the MIR for the body (a Block expression) and +writes the result into the RETURN_PLACE.

    +

    unpack! all the things

    +

    Functions that generate MIR tend to fall into one of two patterns. +First, if the function generates only statements, then it will take a +basic block as argument onto which those statements should be appended. +It can then return a result as normal:

    +
    fn generate_some_mir(&mut self, block: BasicBlock) -> ResultType {
    +   ...
    +}
    +

    But there are other functions that may generate new basic blocks as well. +For example, lowering an expression like if foo { 22 } else { 44 } +requires generating a small "diamond-shaped graph". +In this case, the functions take a basic block where their code starts +and return a (potentially) new basic block where the code generation ends. +The BlockAnd type is used to represent this:

    +
    fn generate_more_mir(&mut self, block: BasicBlock) -> BlockAnd<ResultType> {
    +    ...
    +}
    +

    When you invoke these functions, it is common to have a local variable block +that is effectively a "cursor". It represents the point at which we are adding new MIR. +When you invoke generate_more_mir, you want to update this cursor. +You can do this manually, but it's tedious:

    +
    let mut block;
    +let v = match self.generate_more_mir(..) {
    +    BlockAnd { block: new_block, value: v } => {
    +        block = new_block;
    +        v
    +    }
    +};
    +

    For this reason, we offer a macro that lets you write +let v = unpack!(block = self.generate_more_mir(...)). +It simply extracts the new block and overwrites the +variable block that you named in the unpack!.

    +

    Lowering expressions into the desired MIR

    +

    There are essentially four kinds of representations one might want of an expression:

    +
      +
    • Place refers to a (or part of a) preexisting memory location (local, static, promoted)
    • +
    • Rvalue is something that can be assigned to a Place
    • +
    • Operand is an argument to e.g. a + operation or a function call
    • +
    • a temporary variable containing a copy of the value
    • +
    +

    The following image depicts a general overview of the interactions between the +representations:

    + +

    Click here for a more detailed view

    +

    We start out with lowering the function body to an Rvalue so we can create an +assignment to RETURN_PLACE, This Rvalue lowering will in turn trigger lowering to +Operand for its arguments (if any). Operand lowering either produces a const +operand, or moves/copies out of a Place, thus triggering a Place lowering. An +expression being lowered to a Place can in turn trigger a temporary to be created +if the expression being lowered contains operations. This is where the snake bites its +own tail and we need to trigger an Rvalue lowering for the expression to be written +into the local.

    +

    Operator lowering

    +

    Operators on builtin types are not lowered to function calls (which would end up being +infinite recursion calls, because the trait impls just contain the operation itself +again). Instead there are Rvalues for binary and unary operators and index operations. +These Rvalues later get codegened to llvm primitive operations or llvm intrinsics.

    +

    Operators on all other types get lowered to a function call to their impl of the +operator's corresponding trait.

    +

    Regardless of the lowering kind, the arguments to the operator are lowered to Operands. +This means all arguments are either constants, or refer to an already existing value +somewhere in a local or static.

    +

    Method call lowering

    +

    Method calls are lowered to the same TerminatorKind that function calls are. +In MIR there is no difference between method calls and function calls anymore.

    +

    Conditions

    +

    if conditions and match statements for enums with variants that have no fields are +lowered to TerminatorKind::SwitchInt. Each possible value (so 0 and 1 for if +conditions) has a corresponding BasicBlock to which the code continues. +The argument being branched on is (again) an Operand representing the value of +the if condition.

    +

    Pattern matching

    +

    match statements for enums with variants that have fields are lowered to +TerminatorKind::SwitchInt, too, but the Operand refers to a Place where the +discriminant of the value can be found. This often involves reading the discriminant +to a new temporary variable.

    +

    Aggregate construction

    +

    Aggregate values of any kind (e.g. structs or tuples) are built via Rvalue::Aggregate. +All fields are +lowered to Operators. This is essentially equivalent to one assignment +statement per aggregate field plus an assignment to the discriminant in the +case of enums.

    + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + + diff --git a/mir/dataflow.html b/mir/dataflow.html new file mode 100644 index 000000000..b9c4920e2 --- /dev/null +++ b/mir/dataflow.html @@ -0,0 +1,378 @@ + + + + + + MIR dataflow - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    Dataflow Analysis

    + +

    If you work on the MIR, you will frequently come across various flavors of +dataflow analysis. rustc uses dataflow to find uninitialized +variables, determine what variables are live across a generator yield +statement, and compute which Places are borrowed at a given point in the +control-flow graph. Dataflow analysis is a fundamental concept in modern +compilers, and knowledge of the subject will be helpful to prospective +contributors.

    +

    However, this documentation is not a general introduction to dataflow analysis. +It is merely a description of the framework used to define these analyses in +rustc. It assumes that the reader is familiar with the core ideas as well as +some basic terminology, such as "transfer function", "fixpoint" and "lattice". +If you're unfamiliar with these terms, or if you want a quick refresher, +Static Program Analysis by Anders Møller and Michael I. Schwartzbach is an +excellent, freely available textbook. For those who prefer audiovisual +learning, we previously recommended a series of short lectures +by the Goethe University Frankfurt on YouTube, but it has since been deleted. +See this PR for the context and this comment +for the alternative lectures.

    +

    Defining a Dataflow Analysis

    +

    A dataflow analysis is defined by the Analysis trait. In addition to the +type of the dataflow state, this trait defines the initial value of that state +at entry to each block, as well as the direction of the analysis, either +forward or backward. The domain of your dataflow analysis must be a lattice +(strictly speaking a join-semilattice) with a well-behaved join operator. See +documentation for the lattice module, as well as the JoinSemiLattice +trait, for more information.

    +

    Transfer Functions and Effects

    +

    The dataflow framework in rustc allows each statement (and terminator) inside +a basic block to define its own transfer function. For brevity, these +individual transfer functions are known as "effects". Each effect is applied +successively in dataflow order, and together they define the transfer function +for the entire basic block. It's also possible to define an effect for +particular outgoing edges of some terminators (e.g. +apply_call_return_effect for the success edge of a Call +terminator). Collectively, these are referred to as "per-edge effects".

    +

    "Before" Effects

    +

    Observant readers of the documentation may notice that there are actually two +possible effects for each statement and terminator, the "before" effect and the +unprefixed (or "primary") effect. The "before" effects are applied immediately +before the unprefixed effect regardless of the direction of the analysis. +In other words, a backward analysis will apply the "before" effect and then the +"primary" effect when computing the transfer function for a basic block, just +like a forward analysis.

    +

    The vast majority of analyses should use only the unprefixed effects: Having +multiple effects for each statement makes it difficult for consumers to know +where they should be looking. However, the "before" variants can be useful in +some scenarios, such as when the effect of the right-hand side of an assignment +statement must be considered separately from the left-hand side.

    +

    Convergence

    +

    Your analysis must converge to "fixpoint", otherwise it will run forever. +Converging to fixpoint is just another way of saying "reaching equilibrium". +In order to reach equilibrium, your analysis must obey some laws. One of the +laws it must obey is that the bottom value1 joined with some +other value equals the second value. Or, as an equation:

    +
    +

    bottom join x = x

    +
    +

    Another law is that your analysis must have a "top value" such that

    +
    +

    top join x = top

    +
    +

    Having a top value ensures that your semilattice has a finite height, and the +law state above ensures that once the dataflow state reaches top, it will no +longer change (the fixpoint will be top).

    +

    A Brief Example

    +

    This section provides a brief example of a simple data-flow analysis at a high +level. It doesn't explain everything you need to know, but hopefully it will +make the rest of this page clearer.

    +

    Let's say we want to do a simple analysis to find if mem::transmute may have +been called by a certain point in the program. Our analysis domain will just +be a bool that records whether transmute has been called so far. The bottom +value will be false, since by default transmute has not been called. The top +value will be true, since our analysis is done as soon as we determine that +transmute has been called. Our join operator will just be the boolean OR (||) +operator. We use OR and not AND because of this case:

    +
    #![allow(unused)]
    +fn main() {
    +unsafe fn example(some_cond: bool) {
    +let x = if some_cond {
    +    std::mem::transmute::<i32, u32>(0_i32) // transmute was called!
    +} else {
    +    1_u32 // transmute was not called
    +};
    +
    +// Has transmute been called by this point? We conservatively approximate that
    +// as yes, and that is why we use the OR operator.
    +println!("x: {}", x);
    +}
    +}
    +

    Inspecting the Results of a Dataflow Analysis

    +

    Once you have constructed an analysis, you must call iterate_to_fixpoint +which will return a Results, which contains the dataflow state at fixpoint +upon entry of each block. Once you have a Results, you can inspect the +dataflow state at fixpoint at any point in the CFG. If you only need the state +at a few locations (e.g., each Drop terminator) use a ResultsCursor. If +you need the state at every location, a ResultsVisitor will be more +efficient.

    +
                             Analysis
    +                            |
    +                            | iterate_to_fixpoint()
    +                            |
    +                         Results
    +                         /     \
    + into_results_cursor(…) /       \  visit_with(…)
    +                       /         \
    +               ResultsCursor  ResultsVisitor
    +
    +

    For example, the following code uses a ResultsVisitor...

    +
    // Assuming `MyVisitor` implements `ResultsVisitor<FlowState = MyAnalysis::Domain>`...
    +let mut my_visitor = MyVisitor::new();
    +
    +// inspect the fixpoint state for every location within every block in RPO.
    +let results = MyAnalysis::new()
    +    .iterate_to_fixpoint(tcx, body, None);
    +results.visit_with(body, &mut my_visitor);`
    +

    whereas this code uses ResultsCursor:

    +
    let mut results = MyAnalysis::new()
    +    .iterate_to_fixpoint(tcx, body, None);
    +    .into_results_cursor(body);
    +
    +// Inspect the fixpoint state immediately before each `Drop` terminator.
    +for (bb, block) in body.basic_blocks().iter_enumerated() {
    +    if let TerminatorKind::Drop { .. } = block.terminator().kind {
    +        results.seek_before_primary_effect(body.terminator_loc(bb));
    +        let state = results.get();
    +        println!("state before drop: {:#?}", state);
    +    }
    +}
    +

    Graphviz Diagrams

    +

    When the results of a dataflow analysis are not what you expect, it often helps +to visualize them. This can be done with the -Z dump-mir flags described in +Debugging MIR. Start with -Z dump-mir=F -Z dump-mir-dataflow, where F is +either "all" or the name of the MIR body you are interested in.

    +

    These .dot files will be saved in your mir_dump directory and will have the +NAME of the analysis (e.g. maybe_inits) as part of their filename. Each +visualization will display the full dataflow state at entry and exit of each +block, as well as any changes that occur in each statement and terminator. See +the example below:

    +

    A graphviz diagram for a dataflow analysis

    +
    +
    1. +

      The bottom value's primary purpose is as the initial dataflow +state. Each basic block's entry state is initialized to bottom before the +analysis starts.

      +
    2. +
    +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + + diff --git a/mir/debugging.html b/mir/debugging.html new file mode 100644 index 000000000..e30aafaa2 --- /dev/null +++ b/mir/debugging.html @@ -0,0 +1,289 @@ + + + + + + Debugging MIR - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    MIR Debugging

    +

    The -Z dump-mir flag can be used to dump a text representation of the MIR. +The following optional flags, used in combination with -Z dump-mir, enable +additional output formats, including:

    +
      +
    • -Z dump-mir-graphviz - dumps a .dot file that represents MIR as a +control-flow graph
    • +
    • -Z dump-mir-dataflow - dumps a .dot file showing the dataflow state at +each point in the control-flow graph
    • +
    +

    -Z dump-mir=F is a handy compiler option that will let you view the MIR for +each function at each stage of compilation. -Z dump-mir takes a filter F +which allows you to control which functions and which passes you are +interested in. For example:

    +
    > rustc -Z dump-mir=foo ...
    +
    +

    This will dump the MIR for any function whose name contains foo; it +will dump the MIR both before and after every pass. Those files will +be created in the mir_dump directory. There will likely be quite a +lot of them!

    +
    > cat > foo.rs
    +fn main() {
    +    println!("Hello, world!");
    +}
    +^D
    +> rustc -Z dump-mir=main foo.rs
    +> ls mir_dump/* | wc -l
    +     161
    +
    +

    The files have names like rustc.main.000-000.CleanEndRegions.after.mir. These +names have a number of parts:

    +
    rustc.main.000-000.CleanEndRegions.after.mir
    +      ---- --- --- --------------- ----- either before or after
    +      |    |   |   name of the pass
    +      |    |   index of dump within the pass (usually 0, but some passes dump intermediate states)
    +      |    index of the pass
    +      def-path to the function etc being dumped
    +
    +

    You can also make more selective filters. For example, main & CleanEndRegions +will select for things that reference both main and the pass +CleanEndRegions:

    +
    > rustc -Z dump-mir='main & CleanEndRegions' foo.rs
    +> ls mir_dump
    +rustc.main.000-000.CleanEndRegions.after.mir	rustc.main.000-000.CleanEndRegions.before.mir
    +
    + +

    Filters can also have | parts to combine multiple sets of +&-filters. For example main & CleanEndRegions | main & NoLandingPads will select either main and CleanEndRegions or +main and NoLandingPads:

    +
    > rustc -Z dump-mir='main & CleanEndRegions | main & NoLandingPads' foo.rs
    +> ls mir_dump
    +rustc.main-promoted[0].002-000.NoLandingPads.after.mir
    +rustc.main-promoted[0].002-000.NoLandingPads.before.mir
    +rustc.main-promoted[0].002-006.NoLandingPads.after.mir
    +rustc.main-promoted[0].002-006.NoLandingPads.before.mir
    +rustc.main-promoted[1].002-000.NoLandingPads.after.mir
    +rustc.main-promoted[1].002-000.NoLandingPads.before.mir
    +rustc.main-promoted[1].002-006.NoLandingPads.after.mir
    +rustc.main-promoted[1].002-006.NoLandingPads.before.mir
    +rustc.main.000-000.CleanEndRegions.after.mir
    +rustc.main.000-000.CleanEndRegions.before.mir
    +rustc.main.002-000.NoLandingPads.after.mir
    +rustc.main.002-000.NoLandingPads.before.mir
    +rustc.main.002-006.NoLandingPads.after.mir
    +rustc.main.002-006.NoLandingPads.before.mir
    +
    +

    (Here, the main-promoted[0] files refer to the MIR for "promoted constants" +that appeared within the main function.)

    +

    The -Z unpretty=mir-cfg flag can be used to create a graphviz MIR +control-flow diagram for the whole crate:

    +

    A control-flow diagram

    +

    TODO: anything else?

    + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + + diff --git a/mir/drop-elaboration.html b/mir/drop-elaboration.html new file mode 100644 index 000000000..ae6240e78 --- /dev/null +++ b/mir/drop-elaboration.html @@ -0,0 +1,389 @@ + + + + + + Drop elaboration - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    Drop elaboration

    + +

    Dynamic drops

    +

    According to the reference:

    +
    +

    When an initialized variable or temporary goes out of scope, its destructor +is run, or it is dropped. Assignment also runs the destructor of its +left-hand operand, if it's initialized. If a variable has been partially +initialized, only its initialized fields are dropped.

    +
    +

    When building the MIR, the Drop and DropAndReplace terminators represent +places where drops may occur. However, in this phase, the presence of these +terminators does not guarantee that a destructor will run. That's because the +target of a drop may be uninitialized (usually because it has been moved from) +before the terminator is reached. In general, we cannot know at compile-time whether a +variable is initialized.

    +
    #![allow(unused)]
    +fn main() {
    +let mut y = vec![];
    +
    +{
    +    let x = vec![1, 2, 3];
    +    if std::process::id() % 2 == 0 {
    +        y = x; // conditionally move `x` into `y`
    +    }
    +} // `x` goes out of scope here. Should it be dropped?
    +}
    +

    In these cases, we need to keep track of whether a variable is initialized +dynamically. The rules are laid out in detail in RFC 320: Non-zeroing +dynamic drops.

    +

    Drop obligations

    +

    From the RFC:

    +
    +

    When a local variable becomes initialized, it establishes a set of "drop +obligations": a set of structural paths (e.g. a local a, or a path to a +field b.f.y) that need to be dropped.

    +

    The drop obligations for a local variable x of struct-type T are computed +from analyzing the structure of T. If T itself implements Drop, then x is a +drop obligation. If T does not implement Drop, then the set of drop +obligations is the union of the drop obligations of the fields of T.

    +
    +

    When a structural path is moved from (and thus becomes uninitialized), any drop +obligations for that path or its descendants (path.f, path.f.g.h, etc.) are +released. Types with Drop implementations do not permit moves from individual +fields, so there is no need to track initializedness through them.

    +

    When a local variable goes out of scope (Drop), or when a structural path is +overwritten via assignment (DropAndReplace), we check for any drop +obligations for that variable or path. Unless that obligation has been +released by this point, its associated Drop implementation will be called. +For enum types, only fields corresponding to the "active" variant need to be +dropped. When processing drop obligations for such types, we first check the +discriminant to determine the active variant. All drop obligations for variants +besides the active one are ignored.

    +

    Here are a few interesting types to help illustrate these rules:

    +
    #![allow(unused)]
    +fn main() {
    +struct NoDrop(u8); // No `Drop` impl. No fields with `Drop` impls.
    +
    +struct NeedsDrop(Vec<u8>); // No `Drop` impl but has fields with `Drop` impls.
    +
    +struct ThinVec(*const u8); // Custom `Drop` impl. Individual fields cannot be moved from.
    +
    +impl Drop for ThinVec {
    +    fn drop(&mut self) { /* ... */ }
    +}
    +
    +enum MaybeDrop {
    +    Yes(NeedsDrop),
    +    No(NoDrop),
    +}
    +}
    +

    Drop elaboration

    +

    One valid model for these rules is to keep a boolean flag (a "drop flag") for +every structural path that is used at any point in the function. This flag is +set when its path is initialized and is cleared when the path is moved from. +When a Drop occurs, we check the flags for every obligation associated with +the target of the Drop and call the associated Drop impl for those that are +still applicable.

    +

    This process—transforming the newly built MIR with its imprecise Drop and +DropAndReplace terminators into one with drop flags—is known as drop +elaboration. When a MIR statement causes a variable to become initialized (or +uninitialized), drop elaboration inserts code that sets (or clears) the drop +flag for that variable. It wraps Drop terminators in conditionals that check +the newly inserted drop flags.

    +

    Drop elaboration also splits DropAndReplace terminators into a Drop of the +target and a write of the newly dropped place. This is somewhat unrelated to what +we've discussed above.

    +

    Once this is complete, Drop terminators in the MIR correspond to a call to +the "drop glue" or "drop shim" for the type of the dropped place. The drop +glue for a type calls the Drop impl for that type (if one exists), and then +recursively calls the drop glue for all fields of that type.

    +

    Drop elaboration in rustc

    +

    The approach described above is more expensive than necessary. One can imagine +a few optimizations:

    +
      +
    • Only paths that are the target of a Drop (or have the target as a prefix) +need drop flags.
    • +
    • Some variables are known to be initialized (or uninitialized) when they are +dropped. These do not need drop flags.
    • +
    • If a set of paths are only dropped or moved from via a shared prefix, those +paths can share a single drop flag.
    • +
    +

    A subset of these are implemented in rustc.

    +

    In the compiler, drop elaboration is split across several modules. The pass +itself is defined here, but the main logic is +defined elsewhere since it is also used to build drop shims.

    +

    Drop elaboration designates each Drop in the newly built MIR as one of four +kinds:

    +
      +
    • Static, the target is always initialized.
    • +
    • Dead, the target is always uninitialized.
    • +
    • Conditional, the target is either wholly initialized or wholly +uninitialized. It is not partly initialized.
    • +
    • Open, the target may be partly initialized.
    • +
    +

    For this, it uses a pair of dataflow analyses, MaybeInitializedPlaces and +MaybeUninitializedPlaces. If a place is in one but not the other, then the +initializedness of the target is known at compile-time (Dead or Static). +In this case, drop elaboration does not add a flag for the target. It simply +removes (Dead) or preserves (Static) the Drop terminator.

    +

    For Conditional drops, we know that the initializedness of the variable as a +whole is the same as the initializedness of its fields. Therefore, once we +generate a drop flag for the target of that drop, it's safe to call the drop +glue for that target.

    +

    Open drops

    +

    Open drops are the most complex, since we need to break down a single Drop +terminator into several different ones, one for each field of the target whose +type has drop glue (Ty::needs_drop). We cannot call the drop glue for the +target itself because that requires all fields of the target to be initialized. +Remember, variables whose type has a custom Drop impl do not allow Open +drops because their fields cannot be moved from.

    +

    This is accomplished by recursively categorizing each field as Dead, +Static, Conditional or Open. Fields whose type does not have drop glue +are automatically Dead and need not be considered during the recursion. When +we reach a field whose kind is not Open, we handle it as we did above. If the +field is also Open, the recursion continues.

    +

    It's worth noting how we handle Open drops of enums. Inside drop elaboration, +each variant of the enum is treated like a field, with the invariant that only +one of those "variant fields" can be initialized at any given time. In the +general case, we do not know which variant is the active one, so we will have +to call the drop glue for the enum (which checks the discriminant) or check the +discriminant ourselves as part of an elaborated Open drop. However, in +certain cases (within a match arm, for example) we do know which variant of +an enum is active. This information is encoded in the MaybeInitializedPlaces +and MaybeUninitializedPlaces dataflow analyses by marking all places +corresponding to inactive variants as uninitialized.

    +

    Cleanup paths

    +

    TODO: Discuss drop elaboration and unwinding.

    +

    Aside: drop elaboration and const-eval

    +

    In Rust, functions that are eligible for evaluation at compile-time must be +marked explicitly using the const keyword. This includes implementations of +the Drop trait, which may or may not be const. Code that is eligible for +compile-time evaluation may only call const functions, so any calls to +non-const Drop implementations in such code must be forbidden.

    +

    A call to a Drop impl is encoded as a Drop terminator in the MIR. However, +as we discussed above, a Drop terminator in newly built MIR does not +necessarily result in a call to Drop::drop. The drop target may be +uninitialized at that point. This means that checking for non-const Drops on +the newly built MIR can result in spurious errors. Instead, we wait until after +drop elaboration runs, which eliminates Dead drops (ones where the target is +known to be uninitialized) to run these checks.

    + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + + diff --git a/mir/index.html b/mir/index.html new file mode 100644 index 000000000..fddb6feac --- /dev/null +++ b/mir/index.html @@ -0,0 +1,493 @@ + + + + + + The MIR (Mid-level IR) - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    The MIR (Mid-level IR)

    + +

    MIR is Rust's Mid-level Intermediate Representation. It is +constructed from HIR. MIR was introduced in +RFC 1211. It is a radically simplified form of Rust that is used for +certain flow-sensitive safety checks – notably the borrow checker! – +and also for optimization and code generation.

    +

    If you'd like a very high-level introduction to MIR, as well as some +of the compiler concepts that it relies on (such as control-flow +graphs and desugaring), you may enjoy the +rust-lang blog post that introduced MIR.

    +

    Introduction to MIR

    +

    MIR is defined in the compiler/rustc_middle/src/mir/ module, but much of the code +that manipulates it is found in compiler/rustc_mir_build, +compiler/rustc_mir_transform, and +compiler/rustc_mir_dataflow.

    +

    Some of the key characteristics of MIR are:

    +
      +
    • It is based on a control-flow graph.
    • +
    • It does not have nested expressions.
    • +
    • All types in MIR are fully explicit.
    • +
    +

    Key MIR vocabulary

    +

    This section introduces the key concepts of MIR, summarized here:

    +
      +
    • Basic blocks: units of the control-flow graph, consisting of: +
        +
      • statements: actions with one successor
      • +
      • terminators: actions with potentially multiple successors; always at +the end of a block
      • +
      • (if you're not familiar with the term basic block, see the background +chapter)
      • +
      +
    • +
    • Locals: Memory locations allocated on the stack (conceptually, at +least), such as function arguments, local variables, and +temporaries. These are identified by an index, written with a +leading underscore, like _1. There is also a special "local" +(_0) allocated to store the return value.
    • +
    • Places: expressions that identify a location in memory, like _1 or +_1.f.
    • +
    • Rvalues: expressions that produce a value. The "R" stands for +the fact that these are the "right-hand side" of an assignment. +
        +
      • Operands: the arguments to an rvalue, which can either be a +constant (like 22) or a place (like _1).
      • +
      +
    • +
    +

    You can get a feeling for how MIR is constructed by translating simple +programs into MIR and reading the pretty printed output. In fact, the +playground makes this easy, since it supplies a MIR button that will +show you the MIR for your program. Try putting this program into play +(or clicking on this link), and then clicking the "MIR" +button on the top:

    +
    fn main() {
    +    let mut vec = Vec::new();
    +    vec.push(1);
    +    vec.push(2);
    +}
    +

    You should see something like:

    +
    // WARNING: This output format is intended for human consumers only
    +// and is subject to change without notice. Knock yourself out.
    +fn main() -> () {
    +    ...
    +}
    +
    +

    This is the MIR format for the main function. +MIR shown by above link is optimized. +Some statements like StorageLive are removed in optimization. +This happens because the compiler notices the value is never accessed in the code. +We can use rustc [filename].rs -Z mir-opt-level=0 --emit mir to view unoptimized MIR. +This requires the nightly toolchain.

    +

    Variable declarations. If we drill in a bit, we'll see it begins +with a bunch of variable declarations. They look like this:

    +
    let mut _0: ();                      // return place
    +let mut _1: std::vec::Vec<i32>;      // in scope 0 at src/main.rs:2:9: 2:16
    +let mut _2: ();
    +let mut _3: &mut std::vec::Vec<i32>;
    +let mut _4: ();
    +let mut _5: &mut std::vec::Vec<i32>;
    +
    +

    You can see that variables in MIR don't have names, they have indices, +like _0 or _1. We also intermingle the user's variables (e.g., +_1) with temporary values (e.g., _2 or _3). You can tell apart +user-defined variables because they have debuginfo associated to them (see below).

    +

    User variable debuginfo. Below the variable declarations, we find the only +hint that _1 represents a user variable:

    +
    scope 1 {
    +    debug vec => _1;                 // in scope 1 at src/main.rs:2:9: 2:16
    +}
    +
    +

    Each debug <Name> => <Place>; annotation describes a named user variable, +and where (i.e. the place) a debugger can find the data of that variable. +Here the mapping is trivial, but optimizations may complicate the place, +or lead to multiple user variables sharing the same place. +Additionally, closure captures are described using the same system, and so +they're complicated even without optimizations, e.g.: debug x => (*((*_1).0: &T));.

    +

    The "scope" blocks (e.g., scope 1 { .. }) describe the lexical structure of +the source program (which names were in scope when), so any part of the program +annotated with // in scope 0 would be missing vec, if you were stepping +through the code in a debugger, for example.

    +

    Basic blocks. Reading further, we see our first basic block (naturally +it may look slightly different when you view it, and I am ignoring some of the +comments):

    +
    bb0: {
    +    StorageLive(_1);
    +    _1 = const <std::vec::Vec<T>>::new() -> bb2;
    +}
    +
    +

    A basic block is defined by a series of statements and a final +terminator. In this case, there is one statement:

    +
    StorageLive(_1);
    +
    +

    This statement indicates that the variable _1 is "live", meaning +that it may be used later – this will persist until we encounter a +StorageDead(_1) statement, which indicates that the variable _1 is +done being used. These "storage statements" are used by LLVM to +allocate stack space.

    +

    The terminator of the block bb0 is the call to Vec::new:

    +
    _1 = const <std::vec::Vec<T>>::new() -> bb2;
    +
    +

    Terminators are different from statements because they can have more +than one successor – that is, control may flow to different +places. Function calls like the call to Vec::new are always +terminators because of the possibility of unwinding, although in the +case of Vec::new we are able to see that indeed unwinding is not +possible, and hence we list only one successor block, bb2.

    +

    If we look ahead to bb2, we will see it looks like this:

    +
    bb2: {
    +    StorageLive(_3);
    +    _3 = &mut _1;
    +    _2 = const <std::vec::Vec<T>>::push(move _3, const 1i32) -> [return: bb3, unwind: bb4];
    +}
    +
    +

    Here there are two statements: another StorageLive, introducing the _3 +temporary, and then an assignment:

    +
    _3 = &mut _1;
    +
    +

    Assignments in general have the form:

    +
    <Place> = <Rvalue>
    +
    +

    A place is an expression like _3, _3.f or *_3 – it denotes a +location in memory. An Rvalue is an expression that creates a +value: in this case, the rvalue is a mutable borrow expression, which +looks like &mut <Place>. So we can kind of define a grammar for +rvalues like so:

    +
    <Rvalue>  = & (mut)? <Place>
    +          | <Operand> + <Operand>
    +          | <Operand> - <Operand>
    +          | ...
    +
    +<Operand> = Constant
    +          | copy Place
    +          | move Place
    +
    +

    As you can see from this grammar, rvalues cannot be nested – they can +only reference places and constants. Moreover, when you use a place, +we indicate whether we are copying it (which requires that the +place have a type T where T: Copy) or moving it (which works +for a place of any type). So, for example, if we had the expression x = a + b + c in Rust, that would get compiled to two statements and a +temporary:

    +
    TMP1 = a + b
    +x = TMP1 + c
    +
    +

    (Try it and see, though you may want to do release mode to skip +over the overflow checks.)

    +

    MIR data types

    +

    The MIR data types are defined in the compiler/rustc_middle/src/mir/ +module. Each of the key concepts mentioned in the previous section +maps in a fairly straightforward way to a Rust type.

    +

    The main MIR data type is Body. It contains the data for a single +function (along with sub-instances of Mir for "promoted constants", +but you can read about those below).

    +
      +
    • Basic blocks: The basic blocks are stored in the field +Body::basic_blocks; this is a vector +of BasicBlockData structures. Nobody ever references a +basic block directly: instead, we pass around BasicBlock +values, which are newtype'd indices into this vector.
    • +
    • Statements are represented by the type Statement.
    • +
    • Terminators are represented by the Terminator.
    • +
    • Locals are represented by a newtype'd index type Local. +The data for a local variable is found in the +Body::local_decls vector. There is also a special constant +RETURN_PLACE identifying the special "local" representing the return value.
    • +
    • Places are identified by the struct Place. There are a few +fields: +
        +
      • Local variables like _1
      • +
      • Projections, which are fields or other things that "project +out" from a base place. These are represented by the newtype'd type +ProjectionElem. So e.g. the place _1.f is a projection, +with f being the "projection element" and _1 being the base +path. *_1 is also a projection, with the * being represented +by the ProjectionElem::Deref element.
      • +
      +
    • +
    • Rvalues are represented by the enum Rvalue.
    • +
    • Operands are represented by the enum Operand.
    • +
    +

    Representing constants

    +

    When code has reached the MIR stage, constants can generally come in two forms: +MIR constants (mir::Constant) and type system constants (ty::Const). +MIR constants are used as operands: in x + CONST, CONST is a MIR constant; +similarly, in x + 2, 2 is a MIR constant. Type system constants are used in +the type system, in particular for array lengths but also for const generics.

    +

    Generally, both kinds of constants can be "unevaluated" or "already evaluated". +An unevaluated constant simply stores the DefId of what needs to be evaluated +to compute this result. An evaluated constant (a "value") has already been +computed; their representation differs between type system constants and MIR +constants: MIR constants evaluate to a mir::ConstValue; type system constants +evaluate to a ty::ValTree.

    +

    Type system constants have some more variants to support const generics: they +can refer to local const generic parameters, and they are subject to inference. +Furthermore, the mir::Constant::Ty variant lets us use an arbitrary type +system constant as a MIR constant; this happens whenever a const generic +parameter is used as an operand.

    +

    MIR constant values

    +

    In general, a MIR constant value (mir::ConstValue) was computed by evaluating +some constant the user wrote. This const evaluation produces +a very low-level representation of the result in terms of individual bytes. We +call this an "indirect" constant (mir::ConstValue::Indirect) since the value +is stored in-memory.

    +

    However, storing everything in-memory would be awfully inefficient. Hence there +are some other variants in mir::ConstValue that can represent certain simple +and common values more efficiently. In particular, everything that can be +directly written as a literal in Rust (integers, floats, chars, bools, but also +"string literals" and b"byte string literals") has an optimized variant that +avoids the full overhead of the in-memory representation.

    +

    ValTrees

    +

    An evaluated type system constant is a "valtree". The ty::ValTree datastructure +allows us to represent

    +
      +
    • arrays,
    • +
    • many structs,
    • +
    • tuples,
    • +
    • enums and,
    • +
    • most primitives.
    • +
    +

    The most important rule for +this representation is that every value must be uniquely represented. In other +words: a specific value must only be representable in one specific way. For example: there is only +one way to represent an array of two integers as a ValTree: +Branch([Leaf(first_int), Leaf(second_int)]). +Even though theoretically a [u32; 2] could be encoded in a u64 and thus just be a +Leaf(bits_of_two_u32), that is not a legal construction of ValTree +(and is very complex to do, so it is unlikely anyone is tempted to do so).

    +

    These rules also mean that some values are not representable. There can be no unions in type +level constants, as it is not clear how they should be represented, because their active variant +is unknown. Similarly there is no way to represent raw pointers, as addresses are unknown at +compile-time and thus we cannot make any assumptions about them. References on the other hand +can be represented, as equality for references is defined as equality on their value, so we +ignore their address and just look at the backing value. We must make sure that the pointer values +of the references are not observable at compile time. We thus encode &42 exactly like 42. +Any conversion from +valtree back to a MIR constant value must reintroduce an actual indirection. At codegen time the +addresses may be deduplicated between multiple uses or not, entirely depending on arbitrary +optimization choices.

    +

    As a consequence, all decoding of ValTree must happen by matching on the type first and making +decisions depending on that. The value itself gives no useful information without the type that +belongs to it.

    +

    + +

    See the const-eval WG's docs on promotion.

    + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + + diff --git a/mir/mir_cfg.svg b/mir/mir_cfg.svg new file mode 100644 index 000000000..70705ec04 --- /dev/null +++ b/mir/mir_cfg.svg @@ -0,0 +1,270 @@ + + + + + + +__crate__ + + +cluster_Mir_0_4 + +fn main() -> () +let _1: i32; +let mut _2: i32; +let mut _3: bool; +let mut _4: i32; +let mut _5: i32; +debug x => _1; +debug y => _2; + + +cluster_Mir_0_3 + +fn incr() -> i32 +let mut _1: i32; +let mut _2: bool; +let mut _3: bool; +debug ret => _1; + + + +bb0__0_4 + + +0 + +StorageLive(_1) +_1 = const 5_i32 +StorageLive(_2) +_2 = const 3_i32 +StorageLive(_3) +StorageLive(_4) +_4 = _1 +_3 = Gt(move _4, const 3_i32) +StorageDead(_4) + +switchInt(move _3) + + + +bb1__0_4 + + +1 + +_2 = const 4_i32 +_0 = const () + +goto + + + +bb0__0_4->bb1__0_4 + + +otherwise + + + +bb2__0_4 + + +2 + +StorageLive(_5) + +_5 = incr() + + + +bb0__0_4->bb2__0_4 + + +false + + + +bb4__0_4 + + +4 + +StorageDead(_3) +StorageDead(_2) +StorageDead(_1) + +return + + + +bb1__0_4->bb4__0_4 + + + + + +bb3__0_4 + + +3 + +_2 = Add(_2, move _5) +StorageDead(_5) +_0 = const () + +goto + + + +bb2__0_4->bb3__0_4 + + +return + + + +bb3__0_4->bb4__0_4 + + + + + +bb0__0_3 + + +0 + +StorageLive(_1) +StorageLive(_2) +_2 = const true + +switchInt(move _2) + + + +bb1__0_3 + + +1 + +_1 = const 7_i32 + +goto + + + +bb0__0_3->bb1__0_3 + + +otherwise + + + +bb2__0_3 + + +2 + +StorageLive(_3) +_3 = const true + +switchInt(move _3) + + + +bb0__0_3->bb2__0_3 + + +false + + + +bb6__0_3 + + +6 + +StorageDead(_2) +_1 = Add(_1, const 1_i32) +_0 = _1 +StorageDead(_1) + +return + + + +bb1__0_3->bb6__0_3 + + + + + +bb3__0_3 + + +3 + +_1 = const 8_i32 + +goto + + + +bb2__0_3->bb3__0_3 + + +otherwise + + + +bb4__0_3 + + +4 + +_1 = const 9_i32 + +goto + + + +bb2__0_3->bb4__0_3 + + +false + + + +bb5__0_3 + + +5 + +StorageDead(_3) + +goto + + + +bb3__0_3->bb5__0_3 + + + + + +bb4__0_3->bb5__0_3 + + + + + +bb5__0_3->bb6__0_3 + + + + + diff --git a/mir/mir_detailed.dot b/mir/mir_detailed.dot new file mode 100644 index 000000000..1494f4f0b --- /dev/null +++ b/mir/mir_detailed.dot @@ -0,0 +1,27 @@ +digraph G { + Operand -> Constant + Operand -> Place [taillabel="read"] + Place -> Projection + Projection -> Place + Place -> LocalId + Rvalue -> "Rvalue\nAggregate" + Rvalue -> "Rvalue\nBinaryOp" + Rvalue -> "Rvalue\nUnaryOp" + Rvalue -> "Rvalue\n..." + "Rvalue\nAggregate" -> Operand [headlabel="*"] + "Rvalue\nBinaryOp" -> Operand [headlabel="2"] + "Rvalue\nUnaryOp" -> Operand + "Statement\nAssignment" -> Place [taillabel="write"] + "Statement\nAssignment" -> Rvalue + Statement -> "Statement\nAssignment" + Statement -> "Statement\n..." + Block -> Statement [headlabel="*"] + Block -> Terminator + Terminator -> "Terminator\nSwitchInt" + "Terminator\nSwitchInt" -> Operand + "Terminator\nSwitchInt" -> Constant [headlabel="*"] + "Terminator\nSwitchInt" -> BlockId [headlabel="*"] + Terminator -> "Terminator\n..." + Mir -> Block [headlabel="*"] + Mir -> Local [headlabel="*"] +} \ No newline at end of file diff --git a/mir/mir_detailed.svg b/mir/mir_detailed.svg new file mode 100644 index 000000000..771e9e5dc --- /dev/null +++ b/mir/mir_detailed.svg @@ -0,0 +1,300 @@ + + + + + + +G + + + +Operand + +Operand + + + +Constant + +Constant + + + +Operand->Constant + + + + + +Place + +Place + + + +Operand->Place + + +read + + + +Projection + +Projection + + + +Place->Projection + + + + + +LocalId + +LocalId + + + +Place->LocalId + + + + + +Projection->Place + + + + + +Rvalue + +Rvalue + + + +Rvalue\nAggregate + +Rvalue +Aggregate + + + +Rvalue->Rvalue\nAggregate + + + + + +Rvalue\nBinaryOp + +Rvalue +BinaryOp + + + +Rvalue->Rvalue\nBinaryOp + + + + + +Rvalue\nUnaryOp + +Rvalue +UnaryOp + + + +Rvalue->Rvalue\nUnaryOp + + + + + +Rvalue\n... + +Rvalue +... + + + +Rvalue->Rvalue\n... + + + + + +Rvalue\nAggregate->Operand + + +* + + + +Rvalue\nBinaryOp->Operand + + +2 + + + +Rvalue\nUnaryOp->Operand + + + + + +Statement\nAssignment + +Statement +Assignment + + + +Statement\nAssignment->Place + + +write + + + +Statement\nAssignment->Rvalue + + + + + +Statement + +Statement + + + +Statement->Statement\nAssignment + + + + + +Statement\n... + +Statement +... + + + +Statement->Statement\n... + + + + + +Block + +Block + + + +Block->Statement + + +* + + + +Terminator + +Terminator + + + +Block->Terminator + + + + + +Terminator\nSwitchInt + +Terminator +SwitchInt + + + +Terminator->Terminator\nSwitchInt + + + + + +Terminator\n... + +Terminator +... + + + +Terminator->Terminator\n... + + + + + +Terminator\nSwitchInt->Operand + + + + + +Terminator\nSwitchInt->Constant + + +* + + + +BlockId + +BlockId + + + +Terminator\nSwitchInt->BlockId + + +* + + + +Mir + +Mir + + + +Mir->Block + + +* + + + +Local + +Local + + + +Mir->Local + + +* + + + diff --git a/mir/mir_overview.dot b/mir/mir_overview.dot new file mode 100644 index 000000000..c0b51674d --- /dev/null +++ b/mir/mir_overview.dot @@ -0,0 +1,10 @@ +digraph G { + Operand -> Constant + Operand -> Place + Place -> Projection + Projection -> Place + Place -> Local + Rvalue -> Operand + Assignment -> Place + Assignment -> Operand +} \ No newline at end of file diff --git a/mir/mir_overview.svg b/mir/mir_overview.svg new file mode 100644 index 000000000..b8f092cd2 --- /dev/null +++ b/mir/mir_overview.svg @@ -0,0 +1,103 @@ + + + + + + +G + + + +Operand + +Operand + + + +Constant + +Constant + + + +Operand->Constant + + + + + +Place + +Place + + + +Operand->Place + + + + + +Projection + +Projection + + + +Place->Projection + + + + + +Local + +Local + + + +Place->Local + + + + + +Projection->Place + + + + + +Rvalue + +Rvalue + + + +Rvalue->Operand + + + + + +Assignment + +Assignment + + + +Assignment->Operand + + + + + +Assignment->Place + + + + + diff --git a/mir/optimizations.html b/mir/optimizations.html new file mode 100644 index 000000000..97e134206 --- /dev/null +++ b/mir/optimizations.html @@ -0,0 +1,307 @@ + + + + + + MIR optimizations - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    MIR optimizations

    +

    MIR optimizations are optimizations run on the MIR to produce better MIR +before codegen. This is important for two reasons: first, it makes the final +generated executable code better, and second, it means that LLVM has less work +to do, so compilation is faster. Note that since MIR is generic (not +monomorphized yet), these optimizations are particularly +effective; we can optimize the generic version, so all of the monomorphizations +are cheaper!

    +

    MIR optimizations run after borrow checking. We run a series of optimization +passes over the MIR to improve it. Some passes are required to run on all code, +some passes don't actually do optimizations but only check stuff, and some +passes are only turned on in release mode.

    +

    The optimized_mir query is called to produce the optimized MIR +for a given DefId. This query makes sure that the borrow checker has +run and that some validation has occurred. Then, it steals the MIR, +optimizes it, and returns the improved MIR.

    +

    Quickstart for adding a new optimization

    +
      +
    1. +

      Make a Rust source file in tests/mir-opt that shows the code you want to +optimize. This should be kept simple, so avoid println! or other formatting +code if it's not necessary for the optimization. The reason for this is that +println!, format!, etc. generate a lot of MIR that can make it harder to +understand what the optimization does to the test.

      +
    2. +
    3. +

      Run ./x test --bless tests/mir-opt/<your-test>.rs to generate a MIR +dump. Read this README for instructions on how to dump +things.

      +
    4. +
    5. +

      Commit the current working directory state. The reason you should commit the +test output before you implement the optimization is so that you (and your +reviewers) can see a before/after diff of what the optimization changed.

      +
    6. +
    7. +

      Implement a new optimization in compiler/rustc_mir_transform/src. +The fastest and easiest way to do this is to

      +
        +
      1. pick a small optimization (such as remove_storage_markers) and copy it +to a new file,
      2. +
      3. add your optimization to one of the lists in the +run_optimization_passes() function,
      4. +
      5. and then start modifying the copied optimization.
      6. +
      +
    8. +
    9. +

      Rerun ./x test --bless tests/mir-opt/<your-test>.rs to regenerate the +MIR dumps. Look at the diffs to see if they are what you expect.

      +
    10. +
    11. +

      Run ./x test tests/ui to see if your optimization broke anything.

      +
    12. +
    13. +

      If there are issues with your optimization, experiment with it a bit and +repeat steps 5 and 6.

      +
    14. +
    15. +

      Commit and open a PR. You can do this at any point, even if things aren't +working yet, so that you can ask for feedback on the PR. Open a "WIP" PR +(just prefix your PR title with [WIP] or otherwise note that it is a +work in progress) in that case.

      +

      Make sure to commit the blessed test output as well! It's necessary for CI to +pass and it's very helpful to reviewers.

      +
    16. +
    +

    If you have any questions along the way, feel free to ask in +#t-compiler/wg-mir-opt on Zulip.

    +

    Defining optimization passes

    +

    The list of passes run and the order in which they are run is defined by the +run_optimization_passes function. It contains an array of passes to +run. Each pass in the array is a struct that implements the MirPass trait. +The array is an array of &dyn MirPass trait objects. Typically, a pass is +implemented in its own module of the rustc_mir_transform crate.

    +

    Some examples of passes are:

    +
      +
    • CleanupPostBorrowck: Remove some of the info that is only needed for +analyses, rather than codegen.
    • +
    • ConstProp: Does constant propagation.
    • +
    +

    You can see the "Implementors" section of the MirPass rustdocs for more examples.

    +

    MIR optimization levels

    +

    MIR optimizations can come in various levels of readiness. Experimental +optimizations may cause miscompilations, or slow down compile times. +These passes are still included in nightly builds to gather feedback and make it easier to modify +the pass. To enable working with slow or otherwise experimental optimization passes, +you can specify the -Z mir-opt-level debug flag. You can find the +definitions of the levels in the compiler MCP. If you are developing a MIR pass and +want to query whether your optimization pass should run, you can check the +current level using tcx.sess.opts.unstable_opts.mir_opt_level.

    + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + + diff --git a/mir/passes.html b/mir/passes.html new file mode 100644 index 000000000..fa5f9e2af --- /dev/null +++ b/mir/passes.html @@ -0,0 +1,369 @@ + + + + + + MIR queries and passes: getting the MIR - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    MIR queries and passes

    +

    If you would like to get the MIR:

    +
      +
    • for a function - you can use the optimized_mir query (typically used by codegen) or the mir_for_ctfe query (typically used by compile time function evaluation, i.e., CTFE);
    • +
    • for a promoted - you can use the promoted_mir query.
    • +
    +

    These will give you back the final, optimized MIR. For foreign def-ids, we simply read the MIR +from the other crate's metadata. But for local def-ids, the query will +construct the optimized MIR by requesting a pipeline of upstream queries1. +Each query will contain a series of passes. +This section describes how those queries and passes work and how you can extend them.

    +

    To produce the optimized MIR for a given def-id D, optimized_mir(D) +goes through several suites of passes, each grouped by a +query. Each suite consists of passes which perform linting, analysis, transformation or +optimization. Each query represent a useful intermediate point +where we can access the MIR dialect for type checking or other purposes:

    +
      +
    • mir_built(D) – it gives the initial MIR just after it's built;
    • +
    • mir_const(D) – it applies some simple transformation passes to make MIR ready for +const qualification;
    • +
    • mir_promoted(D) - it extracts promotable temps into separate MIR bodies, and also makes MIR +ready for borrow checking;
    • +
    • mir_drops_elaborated_and_const_checked(D) - it performs borrow checking, runs major +transformation passes (such as drop elaboration) and makes MIR ready for optimization;
    • +
    • optimized_mir(D) – it performs all enabled optimizations and reaches the final state.
    • +
    +

    Implementing and registering a pass

    +

    A MirPass is some bit of code that processes the MIR, typically transforming it along the way +somehow. But it may also do other things like linting (e.g., CheckPackedRef, +CheckConstItemMutation, FunctionItemReferences, which implement MirLint) or +optimization (e.g., SimplifyCfg, RemoveUnneededDrops). While most MIR passes +are defined in the rustc_mir_transform crate, the MirPass trait itself is +found in the rustc_middle crate, and it basically consists of one primary method, +run_pass, that simply gets an &mut Body (along with the tcx). +The MIR is therefore modified in place (which helps to keep things efficient).

    +

    A basic example of a MIR pass is RemoveStorageMarkers, which walks +the MIR and removes all storage marks if they won't be emitted during codegen. As you +can see from its source, a MIR pass is defined by first defining a +dummy type, a struct with no fields:

    +
    #![allow(unused)]
    +fn main() {
    +pub struct RemoveStorageMarkers;
    +}
    +

    for which we implement the MirPass trait. We can then insert +this pass into the appropriate list of passes found in a query like +mir_built, optimized_mir, etc. (If this is an optimization, it +should go into the optimized_mir list.)

    +

    Another example of a simple MIR pass is CleanupPostBorrowck, which walks +the MIR and removes all statements that are not relevant to code generation. As you can see from +its source, it is defined by first defining a dummy type, a struct with no +fields:

    +
    #![allow(unused)]
    +fn main() {
    +pub struct CleanupPostBorrowck;
    +}
    +

    for which we implement the MirPass trait:

    +
    #![allow(unused)]
    +fn main() {
    +impl<'tcx> MirPass<'tcx> for CleanupPostBorrowck {
    +    fn run_pass(&self, tcx: TyCtxt<'tcx>, body: &mut Body<'tcx>) {
    +        ...
    +    }
    +}
    +}
    +

    We register this pass inside the mir_drops_elaborated_and_const_checked query. +(If this is an optimization, it should go into the optimized_mir list.)

    +

    If you are writing a pass, there's a good chance that you are going to +want to use a MIR visitor. MIR visitors are a handy way to walk all +the parts of the MIR, either to search for something or to make small +edits.

    +

    Stealing

    +

    The intermediate queries mir_const() and mir_promoted() yield up +a &'tcx Steal<Body<'tcx>>, allocated using tcx.alloc_steal_mir(). +This indicates that the result may be stolen by a subsequent query – this is an +optimization to avoid cloning the MIR. Attempting to use a stolen +result will cause a panic in the compiler. Therefore, it is important +that you do not accidentally read from these intermediate queries without +the consideration of the dependency in the MIR processing pipeline.

    +

    Because of this stealing mechanism, some care must be taken to +ensure that, before the MIR at a particular phase in the processing +pipeline is stolen, anyone who may want to read from it has already +done so.

    +

    Concretely, this means that if you have a query foo(D) +that wants to access the result of mir_promoted(D), you need to have foo(D) +calling the mir_const(D) query first. This will force it +to execute even though you don't directly require its result.

    +
    +

    This mechanism is a bit dodgy. There is a discussion of more elegant +alternatives in rust-lang/rust#41710.

    +
    +

    Overview

    +

    Below is an overview of the stealing dependency in the MIR processing pipeline2:

    +
    flowchart BT
    +  mir_for_ctfe* --borrow--> id40
    +  id5 --steal--> id40
    +
    +  mir_borrowck* --borrow--> id3
    +  id41 --steal part 1--> id3
    +  id40 --steal part 0--> id3
    +
    +  mir_const_qualif* -- borrow --> id2
    +  id3 -- steal --> id2
    +
    +  id2 -- steal --> id1
    +
    +  id1([mir_built])
    +  id2([mir_const])
    +  id3([mir_promoted])
    +  id40([mir_drops_elaborated_and_const_checked])
    +  id41([promoted_mir])
    +  id5([optimized_mir])
    +
    +  style id1 fill:#bbf
    +  style id2 fill:#bbf
    +  style id3 fill:#bbf
    +  style id40 fill:#bbf
    +  style id41 fill:#bbf
    +  style id5 fill:#bbf
    +
    +

    The stadium-shape queries (e.g., mir_built) with a deep color are the primary queries in the +pipeline, while the rectangle-shape queries (e.g., mir_const_qualif*3) with a shallow color +are those subsequent queries that need to read the results from &'tcx Steal<Body<'tcx>>. With the +stealing mechanism, the rectangle-shape queries must be performed before any stadium-shape queries, +that have an equal or larger height in the dependency tree, ever do.

    +

    Example

    +

    As an example, consider MIR const qualification. It wants to read the result produced by the +mir_const query. However, that result will be stolen by the mir_promoted query at some +time in the pipeline. Before mir_promoted is ever queried, calling the mir_const_qualif query +will succeed since mir_const will produce (if queried the first time) or cache (if queried +multiple times) the Steal result and the result is not stolen yet. After mir_promoted is +queried, the result would be stolen and calling the mir_const_qualif query to read the result +would cause a panic.

    +

    Therefore, with this stealing mechanism, mir_promoted should guarantee any mir_const_qualif* +queries are called before it actually steals, thus ensuring that the reads have already happened +(remember that queries are memoized, so executing a query twice +simply loads from a cache the second time).

    +
    +
    1. +

      See the Queries chapter for the general concept of query.

      +
    2. +
    3. +

      The mir_promoted query will yield up a tuple +(&'tcx Steal<Body<'tcx>>, &'tcx Steal<IndexVec<Promoted, Body<'tcx>>>), promoted_mir will steal +part 1 (&'tcx Steal<IndexVec<Promoted, Body<'tcx>>>) and mir_drops_elaborated_and_const_checked +will steal part 0 (&'tcx Steal<Body<'tcx>>). And their stealing is irrelevant to each other, +i.e., can be performed separately.

      +
    4. +
    5. +

      Note that the * suffix in the queries represent a set of queries with the same prefix. +For example, mir_borrowck* represents mir_borrowck, mir_borrowck_const_arg and +mir_borrowck_opt_const_arg.

      +
    6. +
    +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + + diff --git a/mir/visitor.html b/mir/visitor.html new file mode 100644 index 000000000..1c044e142 --- /dev/null +++ b/mir/visitor.html @@ -0,0 +1,251 @@ + + + + + + MIR visitor and traversal - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    MIR visitor

    +

    The MIR visitor is a convenient tool for traversing the MIR and either +looking for things or making changes to it. The visitor traits are +defined in the rustc_middle::mir::visit module – there are two of +them, generated via a single macro: Visitor (which operates on a +&Mir and gives back shared references) and MutVisitor (which +operates on a &mut Mir and gives back mutable references).

    +

    To implement a visitor, you have to create a type that represents +your visitor. Typically, this type wants to "hang on" to whatever +state you will need while processing MIR:

    +
    struct MyVisitor<...> {
    +    tcx: TyCtxt<'tcx>,
    +    ...
    +}
    +

    and you then implement the Visitor or MutVisitor trait for that type:

    +
    impl<'tcx> MutVisitor<'tcx> for MyVisitor {
    +    fn visit_foo(&mut self, ...) {
    +        ...
    +        self.super_foo(...);
    +    }
    +}
    +

    As shown above, within the impl, you can override any of the +visit_foo methods (e.g., visit_terminator) in order to write some +code that will execute whenever a foo is found. If you want to +recursively walk the contents of the foo, you then invoke the +super_foo method. (NB. You never want to override super_foo.)

    +

    A very simple example of a visitor can be found in LocalFinder. +By implementing visit_local method, this visitor identifies local variables that +can be candidates for reordering.

    +

    Traversal

    +

    In addition the visitor, the rustc_middle::mir::traversal module +contains useful functions for walking the MIR CFG in +different standard orders (e.g. pre-order, reverse +post-order, and so forth).

    + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + + diff --git a/miri.html b/miri.html new file mode 100644 index 000000000..22e0d442c --- /dev/null +++ b/miri.html @@ -0,0 +1,12 @@ + + + + + Redirecting... + + + + +

    Redirecting to... const-eval/interpret.html.

    + + diff --git a/name-resolution.html b/name-resolution.html new file mode 100644 index 000000000..c7cf241f2 --- /dev/null +++ b/name-resolution.html @@ -0,0 +1,372 @@ + + + + + + Name resolution - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    Name resolution

    + +

    In the previous chapters, we saw how the Abstract Syntax Tree (AST) +is built with all macros expanded. We saw how doing that requires doing some +name resolution to resolve imports and macro names. In this chapter, we show +how this is actually done and more.

    +

    In fact, we don't do full name resolution during macro expansion -- we only +resolve imports and macros at that time. This is required to know what to even +expand. Later, after we have the whole AST, we do full name resolution to +resolve all names in the crate. This happens in rustc_resolve::late. +Unlike during macro expansion, in this late expansion, we only need to try to +resolve a name once, since no new names can be added. If we fail to resolve a +name, then it is a compiler error.

    +

    Name resolution is complex. There are different namespaces (e.g. +macros, values, types, lifetimes), and names may be valid at different (nested) +scopes. Also, different types of names can fail resolution differently, and +failures can happen differently at different scopes. For example, in a module +scope, failure means no unexpanded macros and no unresolved glob imports in +that module. On the other hand, in a function body scope, failure requires that a +name be absent from the block we are in, all outer scopes, and the global +scope.

    +

    Basics

    +

    In our programs we refer to variables, types, functions, etc, by giving them +a name. These names are not always unique. For example, take this valid Rust +program:

    +
    #![allow(unused)]
    +fn main() {
    +type x = u32;
    +let x: x = 1;
    +let y: x = 2;
    +}
    +

    How do we know on line 3 whether x is a type (u32) or a value (1)? These +conflicts are resolved during name resolution. In this specific case, name +resolution defines that type names and variable names live in separate +namespaces and therefore can co-exist.

    +

    The name resolution in Rust is a two-phase process. In the first phase, which runs +during macro expansion, we build a tree of modules and resolve imports. Macro +expansion and name resolution communicate with each other via the +ResolverAstLoweringExt trait.

    +

    The input to the second phase is the syntax tree, produced by parsing input +files and expanding macros. This phase produces links from all the names in the +source to relevant places where the name was introduced. It also generates +helpful error messages, like typo suggestions, traits to import or lints about +unused items.

    +

    A successful run of the second phase (Resolver::resolve_crate) creates kind +of an index the rest of the compilation may use to ask about the present names +(through the hir::lowering::Resolver interface).

    +

    The name resolution lives in the rustc_resolve crate, with the bulk in +lib.rs and some helpers or symbol-type specific logic in the other modules.

    +

    Namespaces

    +

    Different kind of symbols live in different namespaces ‒ e.g. types don't +clash with variables. This usually doesn't happen, because variables start with +lower-case letter while types with upper-case one, but this is only a +convention. This is legal Rust code that will compile (with warnings):

    +
    #![allow(unused)]
    +fn main() {
    +type x = u32;
    +let x: x = 1;
    +let y: x = 2; // See? x is still a type here.
    +}
    +

    To cope with this, and with slightly different scoping rules for these +namespaces, the resolver keeps them separated and builds separate structures for +them.

    +

    In other words, when the code talks about namespaces, it doesn't mean the module +hierarchy, it's types vs. values vs. macros.

    +

    Scopes and ribs

    +

    A name is visible only in certain area in the source code. This forms a +hierarchical structure, but not necessarily a simple one ‒ if one scope is +part of another, it doesn't mean a name visible in the outer scope is also +visible in the inner scope, or that it refers to the same thing.

    +

    To cope with that, the compiler introduces the concept of Ribs. This is +an abstraction of a scope. Every time the set of visible names potentially changes, +a new Rib is pushed onto a stack. The places where this can happen include for +example:

    +
      +
    • The obvious places ‒ curly braces enclosing a block, function boundaries, +modules.
    • +
    • Introducing a let binding ‒ this can shadow another binding with the same +name.
    • +
    • Macro expansion border ‒ to cope with macro hygiene.
    • +
    +

    When searching for a name, the stack of ribs is traversed from the innermost +outwards. This helps to find the closest meaning of the name (the one not +shadowed by anything else). The transition to outer Rib may also affect +what names are usable ‒ if there are nested functions (not closures), +the inner one can't access parameters and local bindings of the outer one, +even though they should be visible by ordinary scoping rules. An example:

    +
    #![allow(unused)]
    +fn main() {
    +fn do_something<T: Default>(val: T) { // <- New rib in both types and values (1)
    +    // `val` is accessible, as is the helper function
    +    // `T` is accessible
    +   let helper = || { // New rib on the block (2)
    +        // `val` is accessible here
    +    }; // End of (2), new rib on `helper` (3)
    +    // `val` is accessible, `helper` variable shadows `helper` function
    +    fn helper() { // <- New rib in both types and values (4)
    +        // `val` is not accessible here, (4) is not transparent for locals
    +        // `T` is not accessible here
    +    } // End of (4)
    +    let val = T::default(); // New rib (5)
    +    // `val` is the variable, not the parameter here
    +} // End of (5), (3) and (1)
    +}
    +

    Because the rules for different namespaces are a bit different, each namespace +has its own independent Rib stack that is constructed in parallel to the others. +In addition, there's also a Rib stack for local labels (e.g. names of loops or +blocks), which isn't a full namespace in its own right.

    +

    Overall strategy

    +

    To perform the name resolution of the whole crate, the syntax tree is traversed +top-down and every encountered name is resolved. This works for most kinds of +names, because at the point of use of a name it is already introduced in the Rib +hierarchy.

    +

    There are some exceptions to this. Items are bit tricky, because they can be +used even before encountered ‒ therefore every block needs to be first scanned +for items to fill in its Rib.

    +

    Other, even more problematic ones, are imports which need recursive fixed-point +resolution and macros, that need to be resolved and expanded before the rest of +the code can be processed.

    +

    Therefore, the resolution is performed in multiple stages.

    +

    Speculative crate loading

    +

    To give useful errors, rustc suggests importing paths into scope if they're +not found. How does it do this? It looks through every module of every crate +and looks for possible matches. This even includes crates that haven't yet +been loaded!

    +

    Eagerly loading crates to include import suggestions that haven't yet been +loaded is called speculative crate loading, because any errors it encounters +shouldn't be reported: rustc_resolve decided to load them, not the user. The function +that does this is lookup_import_candidates and lives in +rustc_resolve::diagnostics.

    +

    To tell the difference between speculative loads and loads initiated by the +user, rustc_resolve passes around a record_used parameter, which is false when +the load is speculative.

    +

    TODO: #16

    +

    This is a result of the first pass of learning the code. It is definitely +incomplete and not detailed enough. It also might be inaccurate in places. +Still, it probably provides useful first guidepost to what happens in there.

    +
      +
    • What exactly does it link to and how is that published and consumed by +following stages of compilation?
    • +
    • Who calls it and how it is actually used.
    • +
    • Is it a pass and then the result is only used, or can it be computed +incrementally?
    • +
    • The overall strategy description is a bit vague.
    • +
    • Where does the name Rib come from?
    • +
    • Does this thing have its own tests, or is it tested only as part of some e2e +testing?
    • +
    + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + + diff --git a/normalization.html b/normalization.html new file mode 100644 index 000000000..b1fafd44f --- /dev/null +++ b/normalization.html @@ -0,0 +1,471 @@ + + + + + + Aliases and Normalization - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    Aliases and Normalization

    + +

    Aliases

    +

    In Rust there are a number of types that are considered equal to some "underlying" type, for example inherent associated types, trait associated types, free type aliases (type Foo = u32), and opaque types (-> impl RPIT). We consider such types to be "aliases", alias types are represented by the TyKind::Alias variant, with the kind of alias tracked by the AliasTyKind enum.

    +

    Normalization is the process of taking these alias types and replacing them with the underlying type that they are equal to. For example given some type alias type Foo = u32, normalizing Foo would give u32.

    +

    The concept of an alias is not unique to types and the concept also applies to constants/const generics. However, right now in the compiler we don't really treat const aliases as a "first class concept" so this chapter mostly discusses things in the context of types (even though the concepts transfer just fine).

    +

    Rigid, Ambiguous and Unnormalized Aliases

    +

    Aliases can either be "rigid", "ambiguous", or simply unnormalized.

    +

    We consider types to be rigid if their "shape" isn't going to change, for example Box is rigid as no amount of normalization can turn a Box into a u32, whereas <vec::IntoIter<u32> as Iterator>::Item is not rigid as it can be normalized to u32.

    +

    Aliases are rigid when we will never be able to normalize them further. A concrete example of a rigid alias would be <T as Iterator>::Item in an environment where there is no T: Iterator<Item = ...> bound, only a T: Iterator bound:

    +
    #![allow(unused)]
    +fn main() {
    +fn foo<T: Iterator>() {
    +    // This alias is *rigid*
    +    let _: <T as Iterator>::Item;
    +}
    +
    +fn bar<T: Iterator<Item = u32>>() {
    +    // This alias is *not* rigid as it can be normalized to `u32`
    +    let _: <T as Iterator>::Item;
    +}
    +}
    +

    When an alias can't yet be normalized but may wind up normalizable in the current environment, we consider it to be an "ambiguous" alias. This can occur when an alias contains inference variables which prevent being able to determine how the trait is implemented:

    +
    #![allow(unused)]
    +fn main() {
    +fn foo<T: Iterator, U: Iterator>() {
    +    // This alias is considered to be "ambiguous"
    +    let _: <_ as Iterator>::Item;
    +}
    +}
    +

    The reason we call them "ambiguous" aliases is because its ambiguous whether this is a rigid alias or not.

    +

    The source of the _: Iterator trait impl is ambiguous (i.e. unknown), it could be some impl Iterator for u32 or it could be some T: Iterator trait bound, we don't know yet. Depending on why _: Iterator holds the alias could be an unnormalized alias or it could be a rigid alias; it's ambiguous what kind of alias this is.

    +

    Finally, an alias can just be unnormalized, <Vec<u32> as IntoIterator>::Iter is an unnormalized alias as it can already be normalized to std::vec::IntoIter<u32>, it just hasn't been done yet.

    +
    +

    It is worth noting that Free and Inherent aliases cannot be rigid or ambiguous as naming them also implies having resolved the definition of the alias, which specifies the underlying type of the alias.

    +

    Diverging Aliases

    +

    An alias is considered to "diverge" if its definition does not specify an underlying non-alias type to normalize to. A concrete example of diverging aliases:

    +
    #![allow(unused)]
    +fn main() {
    +type Diverges = Diverges;
    +
    +trait Trait {
    +    type DivergingAssoc;
    +}
    +impl Trait for () {
    +    type DivergingAssoc = <() as Trait>::DivergingAssoc;
    +}
    +}
    +

    In this example both Diverges and DivergingAssoc are "trivial" cases of diverging type aliases where they have been defined as being equal to themselves. There is no underlying type that Diverges can ever be normalized to.

    +

    We generally try to error when diverging aliases are defined, but this is entirely a "best effort" check. In the previous example the definitions are "simple enough" to be detected and so errors are emitted. However, in more complex cases, or cases where only some instantiations of generic parameters would result in a diverging alias, we don't emit an error:

    +
    #![allow(unused)]
    +fn main() {
    +trait Trait {
    +    type DivergingAssoc<U: Trait>;
    +}
    +impl<T: ?Sized> Trait for T {
    +    // This alias always diverges but we don't emit an error because
    +    // the compiler can't "see" that.
    +    type DivergingAssoc<U: Trait> = <U as Trait>::DivergingAssoc<U>;
    +}
    +}
    +

    Ultimately this means that we have no guarantee that aliases in the type system are non-diverging. As aliases may only diverge for some specific generic arguments, it also means that we only know whether an alias diverges once it is fully concrete. This means that codegen/const-evaluation also has to handle diverging aliases:

    +
    trait Trait {
    +    type Diverges<U: Trait>;
    +}
    +impl<T: ?Sized> Trait for T {
    +    type Diverges<U: Trait> = <U as Trait>::Diverges<U>;
    +}
    +
    +fn foo<T: Trait>() {
    +    let a: T::Diverges<T>;
    +}
    +
    +fn main() {
    +    foo::<()>();
    +}
    +

    In this example we only encounter an error from the diverging alias during codegen of foo::<()>, if the call to foo is removed then no compilation error will be emitted.

    +

    Opaque Types

    +

    Opaque types are a relatively special kind of alias, and are covered in their own chapter: Opaque types.

    +

    Const Aliases

    +

    Unlike type aliases, const aliases are not represented directly in the type system, instead const aliases are always an anonymous body containing a path expression to a const item. This means that the only "const alias" in the type system is an anonymous unevaluated const body.

    +

    As such there is no ConstKind::Alias(AliasCtKind::Projection/Inherent/Free, _), instead we only have ConstKind::Unevaluated which is used for representing anonymous constants.

    +
    #![allow(unused)]
    +fn main() {
    +fn foo<const N: usize>() {}
    +
    +const FREE_CONST: usize = 1 + 1;
    +
    +fn bar() {
    +    foo::<{ FREE_CONST }>();
    +    // The const arg is represented with some anonymous constant:
    +    // ```pseudo-rust
    +    // const ANON: usize = FREE_CONST; 
    +    // foo::<ConstKind::Unevaluated(DefId(ANON), [])>();
    +    // ```
    +}
    +}
    +

    This is likely to change as const generics functionality is improved, for example feature(associated_const_equality) and feature(min_generic_const_args) both require handling const aliases similarly to types (without an anonymous constant wrapping all const args).

    +

    What is Normalization

    +

    Structural vs Deep normalization

    +

    There are two forms of normalization, structural (sometimes called shallow) and deep. Structural normalization should be thought of as only normalizing the "outermost" part of a type. On the other hand deep normalization will normalize all aliases in a type.

    +

    In practice structural normalization can result in more than just the outer layer of the type being normalized, but this behaviour should not be relied upon. Unnormalizable non-rigid aliases making use of bound variables (for<'a>) cannot be normalized by either kind of normalization.

    +

    As an example: conceptually, structurally normalizing the type Vec<<u8 as Identity>::Assoc> would be a no-op, whereas deeply normalizing would give Vec<u8>. In practice even structural normalization would give Vec<u8>, though, again, this should not be relied upon.

    +

    Changing the alias to use bound variables will result in different behaviour; Vec<for<'a> fn(<&'a u8 as Identity>::Assoc)> would result in no change when structurally normalized, but would result in Vec<for<'a> fn(&'a u8)> when deeply normalized.

    +

    Core normalization logic

    +

    Structurally normalizing aliases is a little bit more nuanced than replacing the alias with whatever it is defined as being equal to in its definition; the result of normalizing an alias should either be a rigid type or an inference variable (which will later be inferred to a rigid type). To accomplish this we do two things:

    +

    First, when normalizing an ambiguous alias it is normalized to an inference variable instead of leaving it as-is, this has two main effects:

    +
      +
    • Even though an inference variable is not a rigid type, it will always wind up inferred to a rigid type so we ensure that the result of normalization will not need to be normalized again
    • +
    • Inference variables are used in all cases where a type is non-rigid, allowing the rest of the compiler to not have to deal with both ambiguous aliases and inference variables
    • +
    +

    Secondly, instead of having normalization directly return the type specified in the definition of the alias, we normalize the type first before returning it1. We do this so that normalization is idempotent/callers do not need to run it in a loop.

    +
    #![allow(unused)]
    +#![feature(lazy_type_alias)]
    +
    +fn main() {
    +type Foo<T: Iterator> = Bar<T>;
    +type Bar<T: Iterator> = <T as Iterator>::Item;
    +
    +fn foo() {
    +    let a_: Foo<_>;
    +}
    +}
    +

    In this example:

    +
      +
    • Normalizing Foo<?x> would result in Bar<?x>, except we want to normalize aliases in the type Foo is defined as equal to
    • +
    • Normalizing Bar<?x> would result in <?x as Iterator>::Item, except, again, we want to normalize aliases in the type Bar is defined as equal to
    • +
    • Normalizing <?x as Iterator>::Item results in some new inference variable ?y, as <?x as Iterator>::Item is an ambiguous alias
    • +
    • The final result is that normalizing Foo<?x> results in ?y
    • +
    +

    How to normalize

    +

    When interfacing with the type system it will often be the case that it's necessary to request a type be normalized. There are a number of different entry points to the underlying normalization logic and each entry point should only be used in specific parts of the compiler.

    + +

    An additional complication is that the compiler is currently undergoing a transition from the old trait solver to the new trait solver. +As part of this transition our approach to normalization in the compiler has changed somewhat significantly, resulting in some normalization entry points being "old solver only" slated for removal in the long-term once the new solver has stabilized. +The transition can be tracked via the WG-trait-system-refactor label in Github.

    +

    Here is a rough overview of the different entry points to normalization in the compiler:

    +
      +
    • infcx.at.structurally_normalize
    • +
    • infcx.at.(deeply_)?normalize
    • +
    • infcx.query_normalize
    • +
    • tcx.normalize_erasing_regions
    • +
    • traits::normalize_with_depth(_to)
    • +
    • EvalCtxt::structurally_normalize
    • +
    +

    Outside of the trait solver

    +

    The InferCtxt type exposes the "main" ways to normalize during analysis: normalize, deeply_normalize and structurally_normalize. These functions are often wrapped and re-exposed on various InferCtxt wrapper types, such as FnCtxt or ObligationCtxt with minor API tweaks to handle some arguments or parts of the return type automatically.

    +

    Structural InferCtxt normalization

    +

    infcx.at.structurally_normalize exposes structural normalization that is able to handle inference variables and regions. It should generally be used whenever inspecting the kind of a type.

    +

    Inside of HIR Typeck there is a related method of normalization- fcx.structurally_resolve, which will error if the type being resolved is an unresolved inference variable. When the new solver is enabled it will also attempt to structurally normalize the type.

    +

    Due to this there is a pattern in HIR typeck where a type is first normalized via normalize (only normalizing in the old solver), and then structurally_resolve'd (only normalizing in the new solver). This pattern should be preferred over calling structurally_normalize during HIR typeck as structurally_resolve will attempt to make inference progress by evaluating goals whereas structurally_normalize does not.

    +

    Deep InferCtxt normalization

    +
    infcx.at.(deeply_)?normalize
    +

    There are two ways to deeply normalize with an InferCtxt, normalize and deeply_normalize. The reason for this is that normalize is a "legacy" normalization entry point used only by the old solver, whereas deeply_normalize is intended to be the long term way to deeply normalize. Both of these methods can handle regions.

    +

    When the new solver is stabilized the infcx.at.normalize function will be removed and everything will have been migrated to the new deep or structural normalization methods. For this reason the normalize function is a no-op under the new solver, making it suitable only when the old solver needs normalization but the new solver does not.

    +

    Using deeply_normalize will result in errors being emitted when encountering ambiguous aliases2 as it is not possible to support normalizing all ambiguous aliases to inference variables3. deeply_normalize should generally only be used in cases where we do not expect to encounter ambiguous aliases, for example when working with types from item signatures.

    +
    infcx.query_normalize
    +

    infcx.query_normalize is very rarely used, it has almost all the same restrictions as normalize_erasing_regions (cannot handle inference variables, no diagnostics support) with the main difference being that it retains lifetime information. For this reason normalize_erasing_regions is the better choice in almost all circumstances as it is more efficient due to caching lifetime-erased queries.

    +

    In practice query_normalize is used for normalization in the borrow checker, and elsewhere as a performance optimization over infcx.normalize. Once the new solver is stabilized it is expected that query_normalize can be removed from the compiler as the new solvers normalization implementation should be performant enough for it to not be a performance regression.

    +
    tcx.normalize_erasing_regions
    +

    normalize_erasing_regions is generally used by parts of the compiler that are not doing type system analysis. This normalization entry point does not handle inference variables, lifetimes, or any diagnostics. Lints and codegen make heavy use of this entry point as they typically are working with fully inferred aliases that can be assumed to be well formed (or at least, are not responsible for erroring on).

    +

    Inside of the trait solver

    +

    traits::normalize_with_depth(_to) and EvalCtxt::structurally_normalize are only used by the internals of the trait solvers (old and new respectively). It is effectively a raw entry point to the internals of how normalization is implemented by each trait solver. Other normalization entry points cannot be used from within the internals of trait solving as it wouldn't handle goal cycles and recursion depth correctly.

    +

    When/Where to normalize (Old vs New solver)

    +

    One of the big changes between the old and new solver is our approach to when we expect aliases to be normalized.

    +

    Old solver

    +

    All types are expected to be normalized as soon as possible, so that all types encountered in the type system are either rigid or an inference variable (which will later be inferred to a rigid term).

    +

    As a concrete example: equality of aliases is implemented by assuming they're rigid and recursively equating the generic arguments of the alias.

    +

    New solver

    +

    It's expected that all types potentially contain ambiguous or unnormalized aliases. Whenever an operation is performed that requires aliases to be normalized, it's the responsibility of that logic to normalize the alias (this means that matching on ty.kind() pretty much always has to structurally normalize first).

    +

    As a concrete example: equality of aliases is implemented by a custom goal kind (PredicateKind::AliasRelate) so that it can handle normalization of the aliases itself instead of assuming all alias types being equated are rigid.

    +

    Despite this approach we still deeply normalize during writeback for performance/simplicity, so that types in the MIR can still be assumed to have been deeply normalized.

    +
    +

    There were a few main issues with the old solver's approach to normalization that motivated changing things in the new solver:

    +

    Missing normalization calls

    +

    It was a frequent occurrence that normalization calls would be missing, resulting in passing unnormalized types to APIs expecting everything to already be normalized. Treating ambiguous or unnormalized aliases as rigid would result in all sorts of weird errors from aliases not being considered equal to one another, or surprising inference guidance from equating unnormalized aliases' generic arguments.

    +

    Normalizing parameter environments

    +

    Another problem was that it was not possible to normalize ParamEnvs correctly in the old solver as normalization itself would expect a normalized ParamEnv in order to give correct results. See the chapter on ParamEnvs for more information: Typing/ParamEnvs: Normalizing all bounds

    +

    Unnormalizable non-rigid aliases in higher ranked types

    +

    Given a type such as for<'a> fn(<?x as Trait<'a>::Assoc>), it is not possible to correctly handle this with the old solver's approach to normalization.

    +

    If we were to normalize it to for<'a> fn(?y) and register a goal to normalize for<'a> <?x as Trait<'a>>::Assoc -> ?y, this would result in errors in cases where <?x as Trait<'a>>::Assoc normalized to &'a u32. The inference variable ?y would be in a lower universe than the placeholders made when instantiating the for<'a> binder.

    +

    Leaving the alias unnormalized would also be wrong as the old solver expects all aliases to be rigid. This was a soundness bug before the new solver was stabilized in coherence: relating projection substs is unsound during coherence.

    +

    Ultimately this means that it is not always possible to ensure all aliases inside of a value are rigid.

    +

    Handling uses of diverging aliases

    +

    Diverging aliases, like ambiguous aliases, are normalized to inference variables. As normalizing diverging aliases results in trait solver cycles, it always results in an error in the old solver. In the new solver it only results in an error if we wind up requiring all goals to hold in the current context. E.g. normalizing diverging aliases during HIR typeck will result in an error in both solvers.

    +

    Alias well formedness doesn't require that the alias doesn't diverge4, this means that checking an alias is well formed isn't sufficient to cause an error to be emitted for diverging aliases; actually attempting to normalize the alias is required.

    +

    Erroring on diverging aliases being a side effect of normalization means that it is very arbitrary whether we actually emit an error, it also differs between the old and new solver as we now normalize in less places.

    +

    An example of the ad-hoc nature of erroring on diverging aliases causing "problems":

    +
    #![allow(unused)]
    +fn main() {
    +trait Trait {
    +    type Diverges<D: Trait>;
    +}
    +
    +impl<T> Trait for T {
    +    type Diverges<D: Trait> = D::Diverges<D>;
    +}
    +
    +struct Bar<T: ?Sized = <u8 as Trait>::Diverges<u8>>(Box<T>);
    +}
    +

    In this example a diverging alias is used but we happen to not emit an error as we never explicitly normalize the defaults of generic parameters. If the ?Sized opt out is removed then an error is emitted because we wind up happening to normalize a <u8 as Trait>::Diverges<u8>: Sized goal which as a side effect results in erroring about the diverging alias.

    +

    Const aliases differ from type aliases a bit here; well formedness of const aliases requires that they can be successfully evaluated (via ConstEvaluatable goals). This means that simply checking well formedness of const arguments is sufficient to error if they would fail to evaluate. It is somewhat unclear whether it would make sense to adopt this for type aliases too or if const aliases should stop requiring this for well formedness5.

    +
    +
    1. +

      In the new solver this is done implicitly

      +
    2. +
    3. +

      There is a subtle difference in how ambiguous aliases in binders are handled between old and new solver. In the old solver we fail to error on some ambiguous aliases inside of higher ranked types whereas the new solver correctly errors.

      +
    4. +
    5. +

      Ambiguous aliases inside of binders cannot be normalized to inference variables, this will be covered more later.

      +
    6. +
    7. +

      As checking aliases are non-diverging cannot be done until they are fully concrete, this would either imply that we cant check aliases are well formed before codegen/const-evaluation or that aliases would go from being well-formed to not well-formed after monomorphization.

      +
    8. +
    9. +

      Const aliases certainly wouldn't be less sound than type aliases if we stopped doing this

      +
    10. +
    +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + + diff --git a/notification-groups/about.html b/notification-groups/about.html new file mode 100644 index 000000000..2e48b853d --- /dev/null +++ b/notification-groups/about.html @@ -0,0 +1,299 @@ + + + + + + Notification groups - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    Notification groups

    +

    The notification groups are an easy way to help out with rustc in a +"piece-meal" fashion, without committing to a larger project. +Notification groups are easy to join (just submit a PR!) +and joining does not entail any particular commitment.

    +

    Once you join a notification group, you will be added to +a list that receives pings on github whenever a new issue is found +that fits the notification group's criteria. If you are interested, you +can then claim the issue and start working on it.

    +

    Of course, you don't have to wait for new issues to be tagged! If you +prefer, you can use the Github label for a notification group to +search for existing issues that haven't been claimed yet.

    +

    List of notification groups

    +

    Here's the list of the notification groups:

    + +

    What issues are a good fit for notification groups?

    +

    Notification groups tend to get pinged on isolated bugs, +particularly those of middle priority:

    +
      +
    • By isolated, we mean that we do not expect large-scale refactoring +to be required to fix the bug.
    • +
    • By middle priority, we mean that we'd like to see the bug fixed, +but it's not such a burning problem that we are dropping everything +else to fix it. The danger with such bugs, of course, is that they +can accumulate over time, and the role of the notification group is +to try and stop that from happening!
    • +
    +

    +

    Joining a notification group

    +

    To join a notification group, you just have to open a PR adding your +Github username to the appropriate file in the Rust team repository. +See the "example PRs" below to get a precise idea and to identify the +file to edit.

    +

    Also, if you are not already a member of a Rust team then -- in addition +to adding your name to the file -- you have to checkout the repository and +run the following command:

    +
    cargo run add-person $your_user_name
    +
    +

    Example PRs:

    + +

    Tagging an issue for a notification group

    +

    To tag an issue as appropriate for a notification group, you give +rustbot a ping command with the name of the notification +group. For example:

    +
    @rustbot ping apple
    +@rustbot ping arm
    +@rustbot ping emscripten
    +@rustbot ping risc-v
    +@rustbot ping wasi
    +@rustbot ping wasm
    +@rustbot ping windows
    +
    +

    To make some commands shorter and easier to remember, there are aliases, +defined in the triagebot.toml file. For example, all of these commands +are equivalent and will ping the Apple group:

    +
    @rustbot ping apple
    +@rustbot ping macos
    +@rustbot ping ios
    +
    +

    Keep in mind that these aliases are meant to make humans' life easier. +They might be subject to change. If you need to ensure that a command +will always be valid, prefer the full invocations over the aliases.

    +

    Note though that this should only be done by compiler team members +or contributors, and is typically done as part of compiler team +triage.

    + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + + diff --git a/notification-groups/apple.html b/notification-groups/apple.html new file mode 100644 index 000000000..4ee3ffa54 --- /dev/null +++ b/notification-groups/apple.html @@ -0,0 +1,254 @@ + + + + + + Apple - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    Apple notification group

    +

    Github Labels: O-macos, O-ios, O-tvos, O-watchos and O-visionos
    +Ping command: @rustbot ping apple

    +

    This list will be used to ask for help both in diagnosing and testing +Apple-related issues as well as suggestions on how to resolve interesting +questions regarding our macOS/iOS/tvOS/watchOS/visionOS support.

    +

    To get a better idea for what the group will do, here are some examples of the +kinds of questions where we would have reached out to the group for advice in +determining the best course of action:

    +
      +
    • Raising the minimum supported versions (e.g. #104385)
    • +
    • Additional Apple targets (e.g. #121419)
    • +
    • Obscure Xcode linker details (e.g. #121430)
    • +
    +

    Deployment targets

    +

    Apple platforms have a concept of "deployment target", controlled with the +*_DEPLOYMENT_TARGET environment variables, and specifies the minimum OS +version that a binary runs on.

    +

    Using an API from a newer OS version in the standard library than the default +that rustc uses will result in either a static or a dynamic linker error. +For this reason, try to suggest that people document on extern "C" APIs +which OS version they were introduced with, and if that's newer than the +current default used by rustc, suggest to use weak linking.

    +

    The App Store and private APIs

    +

    Apple are very protective about using undocumented APIs, so it's important +that whenever a change uses a new function, that they are verified to actually +be public API, as even just mentioning undocumented APIs in the binary +(without calling it) can lead to rejections from the App Store.

    +

    For example, Darwin / the XNU kernel actually has futex syscalls, but we can't +use them in std because they are not public API.

    +

    In general, for an API to be considered public by Apple, it has to:

    +
      +
    • Appear in a public header (i.e. one distributed with Xcode, and found for +the specific platform under xcrun --show-sdk-path --sdk $SDK).
    • +
    • Have an availability attribute on it (like __API_AVAILABLE, +API_AVAILABLE or similar).
    • +
    + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + + diff --git a/notification-groups/arm.html b/notification-groups/arm.html new file mode 100644 index 000000000..62b09853e --- /dev/null +++ b/notification-groups/arm.html @@ -0,0 +1,230 @@ + + + + + + ARM - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    ARM notification group

    +

    Github Label: O-ARM
    +Ping command: @rustbot ping arm

    +

    This list will be used to ask for help both in diagnosing and testing +ARM-related issues as well as suggestions on how to resolve +interesting questions regarding our ARM support.

    +

    The group also has an associated Zulip stream (#t-compiler/arm) +where people can go to pose questions and discuss ARM-specific +topics.

    +

    So, if you are interested in participating, please sign up for the +ARM group! To do so, open a PR against the rust-lang/team +repository. Just follow this example, but change the username to +your own!

    + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + + diff --git a/notification-groups/emscripten.html b/notification-groups/emscripten.html new file mode 100644 index 000000000..809ec9a9b --- /dev/null +++ b/notification-groups/emscripten.html @@ -0,0 +1,230 @@ + + + + + + Emscripten - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    Emscripten notification group

    +

    Github Label: O-emscripten
    +Ping command: @rustbot ping emscripten

    +

    This list will be used to ask for help both in diagnosing and testing +Emscripten-related issues as well as suggestions on how to resolve +interesting questions regarding our Emscripten support.

    +

    The group also has an associated Zulip stream (#t-compiler/wasm) +where people can go to pose questions and discuss Emscripten-specific +topics.

    +

    So, if you are interested in participating, please sign up for the +Emscripten group! To do so, open a PR against the rust-lang/team +repository. Just follow this example, but change the username to +your own!

    + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + + diff --git a/notification-groups/fuchsia.html b/notification-groups/fuchsia.html new file mode 100644 index 000000000..0ba0818df --- /dev/null +++ b/notification-groups/fuchsia.html @@ -0,0 +1,223 @@ + + + + + + Fuchsia - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    Fuchsia notification group

    +

    Github Label: O-fuchsia
    +Ping command: @rustbot ping fuchsia

    +

    This list will be used to notify Fuchsia maintainers +when the compiler or the standard library changes in a way that would +break the Fuchsia integration.

    + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + + diff --git a/notification-groups/risc-v.html b/notification-groups/risc-v.html new file mode 100644 index 000000000..b8a97fcfa --- /dev/null +++ b/notification-groups/risc-v.html @@ -0,0 +1,230 @@ + + + + + + RISC-V - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    RISC-V notification group

    +

    Github Label: O-riscv
    +Ping command: @rustbot ping risc-v

    +

    This list will be used to ask for help both in diagnosing and testing +RISC-V-related issues as well as suggestions on how to resolve +interesting questions regarding our RISC-V support.

    +

    The group also has an associated Zulip stream (#t-compiler/risc-v) +where people can go to pose questions and discuss RISC-V-specific +topics.

    +

    So, if you are interested in participating, please sign up for the +RISC-V group! To do so, open a PR against the rust-lang/team +repository. Just follow this example, but change the username to +your own!

    + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + + diff --git a/notification-groups/rust-for-linux.html b/notification-groups/rust-for-linux.html new file mode 100644 index 000000000..df3f295f6 --- /dev/null +++ b/notification-groups/rust-for-linux.html @@ -0,0 +1,231 @@ + + + + + + Rust for Linux - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    Rust for Linux notification group

    +

    Github Label: A-rust-for-linux
    +Ping command: @rustbot ping rfl

    +

    This list will be used to notify Rust for Linux (RfL) maintainers +when the compiler or the standard library changes in a way that would +break Rust for Linux, since it depends on several unstable flags +and features. The RfL maintainers should then ideally provide support +for resolving the breakage or decide to temporarily accept the breakage +and unblock CI by temporarily removing the RfL CI jobs.

    +

    The group also has an associated Zulip stream (#rust-for-linux) +where people can go to ask questions and discuss topics related to Rust +for Linux.

    +

    If you are interested in participating, please sign up for the +Rust for Linux group on Zulip!

    + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + + diff --git a/notification-groups/wasi.html b/notification-groups/wasi.html new file mode 100644 index 000000000..c22885270 --- /dev/null +++ b/notification-groups/wasi.html @@ -0,0 +1,230 @@ + + + + + + WASI - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    WASI notification group

    +

    Github Label: O-wasi
    +Ping command: @rustbot ping wasi

    +

    This list will be used to ask for help both in diagnosing and testing +WASI-related issues as well as suggestions on how to resolve +interesting questions regarding our WASI support.

    +

    The group also has an associated Zulip stream (#t-compiler/wasm) +where people can go to pose questions and discuss WASI-specific +topics.

    +

    So, if you are interested in participating, please sign up for the +WASI group! To do so, open a PR against the rust-lang/team +repository. Just follow this example, but change the username to +your own!

    + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + + diff --git a/notification-groups/wasm.html b/notification-groups/wasm.html new file mode 100644 index 000000000..4a28c6f61 --- /dev/null +++ b/notification-groups/wasm.html @@ -0,0 +1,230 @@ + + + + + + WebAssembly - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    WebAssembly (WASM) notification group

    +

    Github Label: O-wasm
    +Ping command: @rustbot ping wasm

    +

    This list will be used to ask for help both in diagnosing and testing +WebAssembly-related issues as well as suggestions on how to resolve +interesting questions regarding our WASM support.

    +

    The group also has an associated Zulip stream (#t-compiler/wasm) +where people can go to pose questions and discuss WASM-specific +topics.

    +

    So, if you are interested in participating, please sign up for the +WASM group! To do so, open a PR against the rust-lang/team +repository. Just follow this example, but change the username to +your own!

    + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + + diff --git a/notification-groups/windows.html b/notification-groups/windows.html new file mode 100644 index 000000000..79be4756d --- /dev/null +++ b/notification-groups/windows.html @@ -0,0 +1,238 @@ + + + + + + Windows - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    Windows notification group

    +

    Github Label: O-Windows
    +Ping command: @rustbot ping windows

    +

    This list will be used to ask for help both in diagnosing and testing +Windows-related issues as well as suggestions on how to resolve +interesting questions regarding our Windows support.

    +

    The group also has an associated Zulip stream (#t-compiler/windows) +where people can go to pose questions and discuss Windows-specific +topics.

    +

    To get a better idea for what the group will do, here are some +examples of the kinds of questions where we would have reached out to +the group for advice in determining the best course of action:

    +
      +
    • Which versions of MinGW should we support?
    • +
    • Should we remove the legacy InnoSetup GUI installer? #72569
    • +
    • What names should we use for static libraries on Windows? #29520
    • +
    +

    So, if you are interested in participating, please sign up for the +Windows group! To do so, open a PR against the rust-lang/team +repository. Just follow this example, but change the username to +your own!

    + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + + diff --git a/opaque-types-impl-trait-inference.html b/opaque-types-impl-trait-inference.html new file mode 100644 index 000000000..fb1296016 --- /dev/null +++ b/opaque-types-impl-trait-inference.html @@ -0,0 +1,466 @@ + + + + + + Inference details - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    Inference of opaque types (impl Trait)

    +

    This page describes how the compiler infers the hidden type for an opaque type. +This kind of type inference is particularly complex because, +unlike other kinds of type inference, +it can work across functions and function bodies.

    +

    Running example

    +

    To help explain how it works, let's consider an example.

    +
    #![feature(type_alias_impl_trait)]
    +mod m {
    +    pub type Seq<T> = impl IntoIterator<Item = T>;
    +
    +    #[define_opaque(Seq)]
    +    pub fn produce_singleton<T>(t: T) -> Seq<T> {
    +        vec![t]
    +    }
    +
    +    #[define_opaque(Seq)]
    +    pub fn produce_doubleton<T>(t: T, u: T) -> Seq<T> {
    +        vec![t, u]
    +    }
    +}
    +
    +fn is_send<T: Send>(_: &T) {}
    +
    +pub fn main() {
    +    let elems = m::produce_singleton(22);
    +
    +    is_send(&elems);
    +
    +    for elem in elems {
    +        println!("elem = {:?}", elem);
    +    }
    +}
    +

    In this code, the opaque type is Seq<T>. +Its defining scope is the module m. +Its hidden type is Vec<T>, +which is inferred from m::produce_singleton and m::produce_doubleton.

    +

    In the main function, the opaque type is out of its defining scope. +When main calls m::produce_singleton, it gets back a reference to the opaque type Seq<i32>. +The is_send call checks that Seq<i32>: Send. +Send is not listed amongst the bounds of the impl trait, +but because of auto-trait leakage, we are able to infer that it holds. +The for loop desugaring requires that Seq<T>: IntoIterator, +which is provable from the bounds declared on Seq<T>.

    +

    Type-checking main

    +

    Let's start by looking what happens when we type-check main. +Initially we invoke produce_singleton and the return type is an opaque type +OpaqueTy.

    +

    Type-checking the for loop

    +

    The for loop desugars the in elems part to IntoIterator::into_iter(elems). +elems is of type Seq<T>, so the type checker registers a Seq<T>: IntoIterator obligation. +This obligation is trivially satisfied, +because Seq<T> is an opaque type (impl IntoIterator<Item = T>) that has a bound for the trait. +Similar to how a U: Foo where bound allows U to trivially satisfy Foo, +opaque types' bounds are available to the type checker and are used to fulfill obligations.

    +

    The type of elem in the for loop is inferred to be <Seq<T> as IntoIterator>::Item, which is T. +At no point is the type checker interested in the hidden type.

    +

    Type-checking the is_send call

    +

    When trying to prove auto trait bounds, +we first repeat the process as above, +to see if the auto trait is in the bound list of the opaque type. +If that fails, we reveal the hidden type of the opaque type, +but only to prove this specific trait bound, not in general. +Revealing is done by invoking the type_of query on the DefId of the opaque type. +The query will internally request the hidden types from the defining function(s) +and return that (see the section on type_of for more details).

    +

    Flowchart of type checking steps

    +
    flowchart TD
    +    TypeChecking["type checking `main`"]
    +    subgraph TypeOfSeq["type_of(Seq<T>) query"]
    +        WalkModuleHir["Walk the HIR for the module `m`\nto find the hidden types from each\nfunction/const/static within"]
    +        VisitProduceSingleton["visit `produce_singleton`"]
    +        InterimType["`produce_singleton` hidden type is `Vec<T>`\nkeep searching"]
    +        VisitProduceDoubleton["visit `produce_doubleton`"]
    +        CompareType["`produce_doubleton` hidden type is also Vec<T>\nthis matches what we saw before ✅"]
    +        Done["No more items to look at in scope\nReturn `Vec<T>`"]
    +    end
    +
    +    BorrowCheckProduceSingleton["`borrow_check(produce_singleton)`"]
    +    TypeCheckProduceSingleton["`type_check(produce_singleton)`"]
    +
    +    BorrowCheckProduceDoubleton["`borrow_check(produce_doubleton)`"]
    +    TypeCheckProduceDoubleton["`type_check(produce_doubleton)`"]
    +
    +    Substitute["Substitute `T => u32`,\nyielding `Vec<i32>` as the hidden type"]
    +    CheckSend["Check that `Vec<i32>: Send` ✅"]
    +
    +    TypeChecking -- trait code for auto traits --> TypeOfSeq
    +    TypeOfSeq --> WalkModuleHir
    +    WalkModuleHir --> VisitProduceSingleton
    +    VisitProduceSingleton --> BorrowCheckProduceSingleton
    +    BorrowCheckProduceSingleton --> TypeCheckProduceSingleton
    +    TypeCheckProduceSingleton --> InterimType
    +    InterimType --> VisitProduceDoubleton
    +    VisitProduceDoubleton --> BorrowCheckProduceDoubleton
    +    BorrowCheckProduceDoubleton --> TypeCheckProduceDoubleton
    +    TypeCheckProduceDoubleton --> CompareType --> Done
    +    Done --> Substitute --> CheckSend
    +
    +

    Within the type_of query

    +

    The type_of query, when applied to an opaque type O, returns the hidden type. +That hidden type is computed by combining the results +from each constraining function within the defining scope of O.

    +
    flowchart TD
    +    TypeOf["type_of query"]
    +    TypeOf -- find_opaque_ty_constraints --> FindOpaqueTyConstraints
    +    FindOpaqueTyConstraints --> Iterate
    +    Iterate["Iterate over each item in defining scope"]
    +    Iterate -- For each item --> TypeCheck
    +    TypeCheck["Check typeck(I) to see if it constraints O"]
    +    TypeCheck -- I does not\nconstrain O --> Iterate
    +    TypeCheck -- I constrains O --> BorrowCheck
    +    BorrowCheck["Invoke mir_borrowck(I) to get hidden type\nfor O computed by I"]
    +    BorrowCheck --> PreviousType
    +    PreviousType["Hidden type from I\nsame as any previous hidden type\nfound so far?"]
    +    PreviousType -- Yes --> Complete
    +    PreviousType -- No --> ReportError
    +    ReportError["Report an error"]
    +    ReportError --> Complete["Item I complete"]
    +    Complete --> Iterate
    +
    +    FindOpaqueTyConstraints -- All constraints found --> Done
    +    Done["Done"]
    +
    +

    Relating an opaque type to another type

    +

    There is one central place where an opaque type gets its hidden type constrained, +and that is the handle_opaque_type function. +Amusingly it takes two types, so you can pass any two types, +but one of them should be an opaque type. +The order is only important for diagnostics.

    +
    flowchart TD
    +    subgraph typecheck["type check comparison routines"]
    +        equate.rs
    +        sub.rs
    +        lub.rs
    +    end
    +
    +    typecheck --> TwoSimul
    +
    +    subgraph handleopaquetype["infcx.handle_opaque_type"]
    +
    +        TwoSimul["Defining two opaque types simultaneously?"]
    +
    +        TwoSimul -- Yes --> ReportError["Report error"]
    +
    +        TwoSimul -- No --> MayDefine -- Yes --> RegisterOpaqueType --> AlreadyHasValue
    +
    +        MayDefine -- No --> ReportError
    +
    +        MayDefine["In defining scope OR in query?"]
    +
    +        AlreadyHasValue["Opaque type X already has\na registered value?"]
    +
    +        AlreadyHasValue -- No --> Obligations["Register opaque type bounds\nas obligations for hidden type"]
    +
    +        RegisterOpaqueType["Register opaque type with\nother type as value"]
    +
    +        AlreadyHasValue -- Yes --> EquateOpaqueTypes["Equate new hidden type\nwith old hidden type"]
    +    end
    +
    +

    Interactions with queries

    +

    When queries handle opaque types, +they cannot figure out whether they are in a defining scope, +so they just assume they are.

    +

    The registered hidden types are stored into the QueryResponse struct +in the opaque_types field (the function +take_opaque_types_for_query_response reads them out).

    +

    When the QueryResponse is instantiated into the surrounding infcx in +query_response_substitution_guess, +we convert each hidden type constraint by invoking handle_opaque_type (as above).

    +

    There is one bit of "weirdness". +The instantiated opaque types have an order +(if one opaque type was compared with another, +and we have to pick one opaque type to use as the one that gets its hidden type assigned). +We use the one that is considered "expected". +But really both of the opaque types may have defining uses. +When the query result is instantiated, +that will be re-evaluated from the context that is using the query. +The final context (typeck of a function, mir borrowck or wf-checks) +will know which opaque type can actually be instantiated +and then handle it correctly.

    +

    Within the MIR borrow checker

    +

    The MIR borrow checker relates things via nll_relate and only cares about regions. +Any type relation will trigger the binding of hidden types, +so the borrow checker is doing the same thing as the type checker, +but ignores obviously dead code (e.g. after a panic). +The borrow checker is also the source of truth when it comes to hidden types, +as it is the only one who can properly figure out what lifetimes on the hidden type correspond +to which lifetimes on the opaque type declaration.

    +

    Backwards compatibility hacks

    +

    impl Trait in return position has various quirks that were not part +of any RFCs and are likely accidental stabilization. +To support these, +the replace_opaque_types_with_inference_vars is being used to reintroduce the previous behaviour.

    +

    There are three backwards compatibility hacks:

    +
      +
    1. +

      All return sites share the same inference variable, +so some return sites may only compile if another return site uses a concrete type.

      +
      #![allow(unused)]
      +fn main() {
      +fn foo() -> impl Debug {
      +    if false {
      +        return std::iter::empty().collect();
      +    }
      +    vec![42]
      +}
      +}
      +
    2. +
    3. +

      Associated type equality constraints for impl Trait can be used +as long as the hidden type satisfies the trait bounds on the associated type. +The opaque impl Trait signature does not need to satisfy them.

      +
      #![allow(unused)]
      +fn main() {
      +trait Duh {}
      +
      +impl Duh for i32 {}
      +
      +trait Trait {
      +    type Assoc: Duh;
      +}
      +
      +// the fact that `R` is the `::Output` projection on `F` causes
      +// an intermediate inference var to be generated which is then later
      +// compared against the actually found `Assoc` type.
      +impl<R: Duh, F: FnMut() -> R> Trait for F {
      +    type Assoc = R;
      +}
      +
      +// The `impl Send` here is then later compared against the inference var
      +// created, causing the inference var to be set to `impl Send` instead of
      +// the hidden type. We already have obligations registered on the inference
      +// var to make it uphold the `: Duh` bound on `Trait::Assoc`. The opaque
      +// type does not implement `Duh`, even if its hidden type does.
      +// Lazy TAIT would error out, but we inserted a hack to make it work again,
      +// keeping backwards compatibility.
      +fn foo() -> impl Trait<Assoc = impl Send> {
      +    || 42
      +}
      +}
      +
    4. +
    5. +

      Closures cannot create hidden types for their parent function's impl Trait. +This point is mostly moot, +because of point 1 introducing inference vars, +so the closure only ever sees the inference var, but should we fix 1, this will become a problem.

      +
    6. +
    + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + + diff --git a/opaque-types-type-alias-impl-trait.html b/opaque-types-type-alias-impl-trait.html new file mode 100644 index 000000000..3e27dde64 --- /dev/null +++ b/opaque-types-type-alias-impl-trait.html @@ -0,0 +1,260 @@ + + + + + + Opaque types - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    Opaque types (type alias impl Trait)

    +

    Opaque types are syntax to declare an opaque type alias that only +exposes a specific set of traits as their interface; the concrete type in the +background is inferred from a certain set of use sites of the opaque type.

    +

    This is expressed by using impl Trait within type aliases, for example:

    +
    type Foo = impl Bar;
    +

    This declares an opaque type named Foo, of which the only information is that +it implements Bar. Therefore, any of Bar's interface can be used on a Foo, +but nothing else (regardless of whether it implements any other traits).

    +

    Since there needs to be a concrete background type, +you can (as of January 2021) express that type +by using the opaque type in a "defining use site".

    +
    struct Struct;
    +impl Bar for Struct { /* stuff */ }
    +fn foo() -> Foo {
    +    Struct
    +}
    +

    Any other "defining use site" needs to produce the exact same type.

    +

    Defining use site(s)

    +

    Currently only the return value of a function can be a defining use site +of an opaque type (and only if the return type of that function contains +the opaque type).

    +

    The defining use of an opaque type can be any code within the parent +of the opaque type definition. This includes any siblings of the +opaque type and all children of the siblings.

    +

    The initiative for "not causing fatal brain damage to developers due to +accidentally running infinite loops in their brain while trying to +comprehend what the type system is doing" has decided to disallow children +of opaque types to be defining use sites.

    +

    Associated opaque types

    +

    Associated opaque types can be defined by any other associated item +on the same trait impl or a child of these associated items. For instance:

    +
    trait Baz {
    +    type Foo;
    +    fn foo() -> Self::Foo;
    +}
    +
    +struct Quux;
    +
    +impl Baz for Quux {
    +    type Foo = impl Bar;
    +    fn foo() -> Self::Foo { ... }
    +}
    + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + + diff --git a/overview.html b/overview.html new file mode 100644 index 000000000..21356aea2 --- /dev/null +++ b/overview.html @@ -0,0 +1,615 @@ + + + + + + Overview of the compiler - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    Overview of the compiler

    + +

    This chapter is about the overall process of compiling a program -- how +everything fits together.

    +

    The Rust compiler is special in two ways: it does things to your code that +other compilers don't do (e.g. borrow-checking) and it has a lot of +unconventional implementation choices (e.g. queries). We will talk about these +in turn in this chapter, and in the rest of the guide, we will look at the +individual pieces in more detail.

    +

    What the compiler does to your code

    +

    So first, let's look at what the compiler does to your code. For now, we will +avoid mentioning how the compiler implements these steps except as needed.

    +

    Invocation

    +

    Compilation begins when a user writes a Rust source program in text and invokes +the rustc compiler on it. The work that the compiler needs to perform is +defined by command-line options. For example, it is possible to enable nightly +features (-Z flags), perform check-only builds, or emit the LLVM +Intermediate Representation (LLVM-IR) rather than executable machine code. +The rustc executable call may be indirect through the use of cargo.

    +

    Command line argument parsing occurs in the rustc_driver. This crate +defines the compile configuration that is requested by the user and passes it +to the rest of the compilation process as a rustc_interface::Config.

    +

    Lexing and parsing

    +

    The raw Rust source text is analyzed by a low-level lexer located in +rustc_lexer. At this stage, the source text is turned into a stream of +atomic source code units known as tokens. The lexer supports the +Unicode character encoding.

    +

    The token stream passes through a higher-level lexer located in +rustc_parse to prepare for the next stage of the compile process. The +Lexer struct is used at this stage to perform a set of validations +and turn strings into interned symbols (interning is discussed later). +String interning is a way of storing only one immutable +copy of each distinct string value.

    +

    The lexer has a small interface and doesn't depend directly on the diagnostic +infrastructure in rustc. Instead it provides diagnostics as plain data which +are emitted in rustc_parse::lexer as real diagnostics. The lexer +preserves full fidelity information for both IDEs and procedural macros +(sometimes referred to as "proc-macros").

    +

    The parser translates the token stream from the lexer into an Abstract Syntax +Tree (AST). It uses a recursive descent (top-down) approach to syntax +analysis. The crate entry points for the parser are the +Parser::parse_crate_mod() and Parser::parse_mod() +methods found in rustc_parse::parser::Parser. The external module parsing +entry point is rustc_expand::module::parse_external_mod. +And the macro-parser entry point is Parser::parse_nonterminal().

    +

    Parsing is performed with a set of parser utility methods including bump, +check, eat, expect, look_ahead.

    +

    Parsing is organized by semantic construct. Separate +parse_* methods can be found in the rustc_parse +directory. The source file name follows the construct name. For example, the +following files are found in the parser:

    + +

    This naming scheme is used across many compiler stages. You will find either a +file or directory with the same name across the parsing, lowering, type +checking, Typed High-level Intermediate Representation (THIR) lowering, and +Mid-level Intermediate Representation (MIR) building sources.

    +

    Macro-expansion, AST-validation, name-resolution, and early linting also take +place during the lexing and parsing stage.

    +

    The rustc_ast::ast::{Crate, Expr, Pat, ...} AST nodes are +returned from the parser while the standard Diag API is used +for error handling. Generally Rust's compiler will try to recover from errors +by parsing a superset of Rust's grammar, while also emitting an error type.

    +

    AST lowering

    +

    Next the AST is converted into High-Level Intermediate Representation +(HIR), a more compiler-friendly representation of the AST. This process +is called "lowering" and involves a lot of desugaring (the expansion and +formalizing of shortened or abbreviated syntax constructs) of things like loops +and async fn.

    +

    We then use the HIR to do type inference (the process of automatic +detection of the type of an expression), trait solving (the process of +pairing up an impl with each reference to a trait), and type checking. Type +checking is the process of converting the types found in the HIR (hir::Ty), +which represent what the user wrote, into the internal representation used by +the compiler (Ty<'tcx>). It's called type checking because the information +is used to verify the type safety, correctness and coherence of the types used +in the program.

    +

    MIR lowering

    +

    The HIR is further lowered to MIR +(used for borrow checking) by constructing the THIR (an even more desugared HIR used for +pattern and exhaustiveness checking) to convert into MIR.

    +

    We do many optimizations on the MIR because it is generic and that +improves later code generation and compilation speed. It is easier to do some +optimizations at MIR level than at LLVM-IR level. For example LLVM doesn't seem +to be able to optimize the pattern the simplify_try MIR-opt looks for.

    +

    Rust code is also monomorphized during code generation, which means making +copies of all the generic code with the type parameters replaced by concrete +types. To do this, we need to collect a list of what concrete types to generate +code for. This is called monomorphization collection and it happens at the +MIR level.

    +

    Code generation

    +

    We then begin what is simply called code generation or codegen. The code +generation stage is when higher-level representations of source are +turned into an executable binary. Since rustc uses LLVM for code generation, +the first step is to convert the MIR to LLVM-IR. This is where the MIR is +actually monomorphized. The LLVM-IR is passed to LLVM, which does a lot more +optimizations on it, emitting machine code which is basically assembly code +with additional low-level types and annotations added (e.g. an ELF object or +WASM). The different libraries/binaries are then linked together to produce +the final binary.

    +

    How it does it

    +

    Now that we have a high-level view of what the compiler does to your code, +let's take a high-level view of how it does all that stuff. There are a lot +of constraints and conflicting goals that the compiler needs to +satisfy/optimize for. For example,

    +
      +
    • Compilation speed: how fast is it to compile a program? More/better +compile-time analyses often means compilation is slower. +
        +
      • Also, we want to support incremental compilation, so we need to take that +into account. How can we keep track of what work needs to be redone and +what can be reused if the user modifies their program? +
          +
        • Also we can't store too much stuff in the incremental cache because +it would take a long time to load from disk and it could take a lot +of space on the user's system...
        • +
        +
      • +
      +
    • +
    • Compiler memory usage: while compiling a program, we don't want to use more +memory than we need.
    • +
    • Program speed: how fast is your compiled program? More/better compile-time +analyses often means the compiler can do better optimizations.
    • +
    • Program size: how large is the compiled binary? Similar to the previous +point.
    • +
    • Compiler compilation speed: how long does it take to compile the compiler? +This impacts contributors and compiler maintenance.
    • +
    • Implementation complexity: building a compiler is one of the hardest +things a person/group can do, and Rust is not a very simple language, so how +do we make the compiler's code base manageable?
    • +
    • Compiler correctness: the binaries produced by the compiler should do what +the input programs says they do, and should continue to do so despite the +tremendous amount of change constantly going on.
    • +
    • Integration: a number of other tools need to use the compiler in +various ways (e.g. cargo, clippy, MIRI) that must be supported.
    • +
    • Compiler stability: the compiler should not crash or fail ungracefully on the +stable channel.
    • +
    • Rust stability: the compiler must respect Rust's stability guarantees by not +breaking programs that previously compiled despite the many changes that are +always going on to its implementation.
    • +
    • Limitations of other tools: rustc uses LLVM in its backend, and LLVM has some +strengths we leverage and some aspects we need to work around.
    • +
    +

    So, as you continue your journey through the rest of the guide, keep these +things in mind. They will often inform decisions that we make.

    +

    Intermediate representations

    +

    As with most compilers, rustc uses some intermediate representations (IRs) to +facilitate computations. In general, working directly with the source code is +extremely inconvenient and error-prone. Source code is designed to be human-friendly while at +the same time being unambiguous, but it's less convenient for doing something +like, say, type checking.

    +

    Instead most compilers, including rustc, build some sort of IR out of the +source code which is easier to analyze. rustc has a few IRs, each optimized +for different purposes:

    +
      +
    • Token stream: the lexer produces a stream of tokens directly from the source +code. This stream of tokens is easier for the parser to deal with than raw +text.
    • +
    • Abstract Syntax Tree (AST): the abstract syntax tree is built from the stream +of tokens produced by the lexer. It represents +pretty much exactly what the user wrote. It helps to do some syntactic sanity +checking (e.g. checking that a type is expected where the user wrote one).
    • +
    • High-level IR (HIR): This is a sort of desugared AST. It's still close +to what the user wrote syntactically, but it includes some implicit things +such as some elided lifetimes, etc. This IR is amenable to type checking.
    • +
    • Typed HIR (THIR) formerly High-level Abstract IR (HAIR): This is an +intermediate between HIR and MIR. It is like the HIR but it is fully typed +and a bit more desugared (e.g. method calls and implicit dereferences are +made fully explicit). As a result, it is easier to lower to MIR from THIR than +from HIR.
    • +
    • Middle-level IR (MIR): This IR is basically a Control-Flow Graph (CFG). A CFG +is a type of diagram that shows the basic blocks of a program and how control +flow can go between them. Likewise, MIR also has a bunch of basic blocks with +simple typed statements inside them (e.g. assignment, simple computations, +etc) and control flow edges to other basic blocks (e.g., calls, dropping +values). MIR is used for borrow checking and other +important dataflow-based checks, such as checking for uninitialized values. +It is also used for a series of optimizations and for constant evaluation (via +MIRI). Because MIR is still generic, we can do a lot of analyses here more +efficiently than after monomorphization.
    • +
    • LLVM-IR: This is the standard form of all input to the LLVM compiler. LLVM-IR +is a sort of typed assembly language with lots of annotations. It's +a standard format that is used by all compilers that use LLVM (e.g. the clang +C compiler also outputs LLVM-IR). LLVM-IR is designed to be easy for other +compilers to emit and also rich enough for LLVM to run a bunch of +optimizations on it.
    • +
    +

    One other thing to note is that many values in the compiler are interned. +This is a performance and memory optimization in which we allocate the values in +a special allocator called an +arena. Then, we pass +around references to the values allocated in the arena. This allows us to make +sure that identical values (e.g. types in your program) are only allocated once +and can be compared cheaply by comparing pointers. Many of the intermediate +representations are interned.

    +

    Queries

    +

    The first big implementation choice is Rust's use of the query system in its +compiler. The Rust compiler is not organized as a series of passes over the +code which execute sequentially. The Rust compiler does this to make +incremental compilation possible -- that is, if the user makes a change to +their program and recompiles, we want to do as little redundant work as +possible to output the new binary.

    +

    In rustc, all the major steps above are organized as a bunch of queries that +call each other. For example, there is a query to ask for the type of something +and another to ask for the optimized MIR of a function. These queries can call +each other and are all tracked through the query system. The results of the +queries are cached on disk so that the compiler can tell which queries' results +changed from the last compilation and only redo those. This is how incremental +compilation works.

    +

    In principle, for the query-fied steps, we do each of the above for each item +individually. For example, we will take the HIR for a function and use queries +to ask for the LLVM-IR for that HIR. This drives the generation of optimized +MIR, which drives the borrow checker, which drives the generation of MIR, and +so on.

    +

    ... except that this is very over-simplified. In fact, some queries are not +cached on disk, and some parts of the compiler have to run for all code anyway +for correctness even if the code is dead code (e.g. the borrow checker). For +example, currently the mir_borrowck query is first executed on all functions +of a crate. Then the codegen backend invokes the +collect_and_partition_mono_items query, which first recursively requests the +optimized_mir for all reachable functions, which in turn runs mir_borrowck +for that function and then creates codegen units. This kind of split will need +to remain to ensure that unreachable functions still have their errors emitted.

    +

    Moreover, the compiler wasn't originally built to use a query system; the query +system has been retrofitted into the compiler, so parts of it are not query-fied +yet. Also, LLVM isn't our code, so that isn't querified either. The plan is to +eventually query-fy all of the steps listed in the previous section, +but as of November 2022, only the steps between HIR and +LLVM-IR are query-fied. That is, lexing, parsing, name resolution, and macro +expansion are done all at once for the whole program.

    +

    One other thing to mention here is the all-important "typing context", +TyCtxt, which is a giant struct that is at the center of all things. +(Note that the name is mostly historic. This is not a "typing context" in the +sense of Γ or Δ from type theory. The name is retained because that's what +the name of the struct is in the source code.) All +queries are defined as methods on the TyCtxt type, and the in-memory query +cache is stored there too. In the code, there is usually a variable called +tcx which is a handle on the typing context. You will also see lifetimes with +the name 'tcx, which means that something is tied to the lifetime of the +TyCtxt (usually it is stored or interned there).

    +

    ty::Ty

    +

    Types are really important in Rust, and they form the core of a lot of compiler +analyses. The main type (in the compiler) that represents types (in the user's +program) is rustc_middle::ty::Ty. This is so important that we have a whole chapter +on ty::Ty, but for now, we just want to mention that it exists and is the way +rustc represents types!

    +

    Also note that the rustc_middle::ty module defines the TyCtxt struct we mentioned before.

    +

    Parallelism

    +

    Compiler performance is a problem that we would like to improve on +(and are always working on). One aspect of that is parallelizing +rustc itself.

    +

    Currently, there is only one part of rustc that is parallel by default: +code generation.

    +

    However, the rest of the compiler is still not yet parallel. There have been +lots of efforts spent on this, but it is generally a hard problem. The current +approach is to turn RefCells into Mutexs -- that is, we +switch to thread-safe internal mutability. However, there are ongoing +challenges with lock contention, maintaining query-system invariants under +concurrency, and the complexity of the code base. One can try out the current +work by enabling parallel compilation in bootstrap.toml. It's still early days, +but there are already some promising performance improvements.

    +

    Bootstrapping

    +

    rustc itself is written in Rust. So how do we compile the compiler? We use an +older compiler to compile the newer compiler. This is called bootstrapping.

    +

    Bootstrapping has a lot of interesting implications. For example, it means +that one of the major users of Rust is the Rust compiler, so we are +constantly testing our own software ("eating our own dogfood").

    +

    For more details on bootstrapping, see +the bootstrapping section of the guide.

    + +

    References

    + + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + + diff --git a/panic-implementation.html b/panic-implementation.html new file mode 100644 index 000000000..13c015e3a --- /dev/null +++ b/panic-implementation.html @@ -0,0 +1,324 @@ + + + + + + Panic implementation - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    Panicking in Rust

    + +

    Step 1: Invocation of the panic! macro.

    +

    There are actually two panic macros - one defined in core, and one defined in std. +This is due to the fact that code in core can panic. core is built before std, +but we want panics to use the same machinery at runtime, whether they originate in core +or std.

    +

    core definition of panic!

    +

    The core panic! macro eventually makes the following call (in library/core/src/panicking.rs):

    +
    #![allow(unused)]
    +fn main() {
    +// NOTE This function never crosses the FFI boundary; it's a Rust-to-Rust call
    +extern "Rust" {
    +    #[lang = "panic_impl"]
    +    fn panic_impl(pi: &PanicInfo<'_>) -> !;
    +}
    +
    +let pi = PanicInfo::internal_constructor(Some(&fmt), location);
    +unsafe { panic_impl(&pi) }
    +}
    +

    Actually resolving this goes through several layers of indirection:

    +
      +
    1. +

      In compiler/rustc_middle/src/middle/weak_lang_items.rs, panic_impl is +declared as 'weak lang item', with the symbol rust_begin_unwind. This is +used in rustc_hir_analysis/src/collect.rs to set the actual symbol name to +rust_begin_unwind.

      +

      Note that panic_impl is declared in an extern "Rust" block, +which means that core will attempt to call a foreign symbol called rust_begin_unwind +(to be resolved at link time)

      +
    2. +
    3. +

      In library/std/src/panicking.rs, we have this definition:

      +
    4. +
    +
    #![allow(unused)]
    +fn main() {
    +/// Entry point of panic from the core crate.
    +#[cfg(not(test))]
    +#[panic_handler]
    +#[unwind(allowed)]
    +pub fn begin_panic_handler(info: &PanicInfo<'_>) -> ! {
    +    ...
    +}
    +}
    +

    The special panic_handler attribute is resolved via compiler/rustc_middle/src/middle/lang_items. +The extract function converts the panic_handler attribute to a panic_impl lang item.

    +

    Now, we have a matching panic_handler lang item in the std. This function goes +through the same process as the extern { fn panic_impl } definition in core, ending +up with a symbol name of rust_begin_unwind. At link time, the symbol reference in core +will be resolved to the definition of std (the function called begin_panic_handler in the +Rust source).

    +

    Thus, control flow will pass from core to std at runtime. This allows panics from core +to go through the same infrastructure that other panics use (panic hooks, unwinding, etc)

    +

    std implementation of panic!

    +

    This is where the actual panic-related logic begins. In library/std/src/panicking.rs, +control passes to rust_panic_with_hook. This method is responsible +for invoking the global panic hook, and checking for double panics. Finally, +we call __rust_start_panic, which is provided by the panic runtime.

    +

    The call to __rust_start_panic is very weird - it is passed a *mut &mut dyn PanicPayload, +converted to an usize. Let's break this type down:

    +
      +
    1. +

      PanicPayload is an internal trait. It is implemented for PanicPayload +(a wrapper around the user-supplied payload type), and has a method +fn take_box(&mut self) -> *mut (dyn Any + Send). +This method takes the user-provided payload (T: Any + Send), +boxes it, and converts the box to a raw pointer.

      +
    2. +
    3. +

      When we call __rust_start_panic, we have an &mut dyn PanicPayload. +However, this is a fat pointer (twice the size of a usize). +To pass this to the panic runtime across an FFI boundary, we take a mutable +reference to this mutable reference (&mut &mut dyn PanicPayload), and convert it to a raw +pointer (*mut &mut dyn PanicPayload). The outer raw pointer is a thin pointer, since it points to +a Sized type (a mutable reference). Therefore, we can convert this thin pointer into a usize, +which is suitable for passing across an FFI boundary.

      +
    4. +
    +

    Finally, we call __rust_start_panic with this usize. We have now entered the panic runtime.

    +

    Step 2: The panic runtime

    +

    Rust provides two panic runtimes: panic_abort and panic_unwind. The user chooses +between them at build time via their Cargo.toml

    +

    panic_abort is extremely simple: its implementation of __rust_start_panic just aborts, +as you would expect.

    +

    panic_unwind is the more interesting case.

    +

    In its implementation of __rust_start_panic, we take the usize, convert +it back to a *mut &mut dyn PanicPayload, dereference it, and call take_box +on the &mut dyn PanicPayload. At this point, we have a raw pointer to the payload +itself (a *mut (dyn Send + Any)): that is, a raw pointer to the actual value +provided by the user who called panic!.

    +

    At this point, the platform-independent code ends. We now call into +platform-specific unwinding logic (e.g unwind). This code is +responsible for unwinding the stack, running any 'landing pads' associated +with each frame (currently, running destructors), and transferring control +to the catch_unwind frame.

    +

    Note that all panics either abort the process or get caught by some call to catch_unwind. +In particular, in std's runtime service, +the call to the user-provided main function is wrapped in catch_unwind.

    + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + + diff --git a/parallel-rustc.html b/parallel-rustc.html new file mode 100644 index 000000000..583598133 --- /dev/null +++ b/parallel-rustc.html @@ -0,0 +1,358 @@ + + + + + + Parallel compilation - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    Parallel compilation

    +
    +As of November 2024, +the parallel front-end is undergoing significant changes, +so this page contains quite a bit of outdated information. +

    Tracking issue: https://github.com/rust-lang/rust/issues/113349

    +
    +

    As of November 2024, most of the rust compiler is now +parallelized.

    +
      +
    • The codegen part is executed concurrently by default. You can use the -C codegen-units=n option to control the number of concurrent tasks.
    • +
    • The parts after HIR lowering to codegen such as type checking, borrowing +checking, and mir optimization are parallelized in the nightly version. +Currently, they are executed in serial by default, and parallelization is +manually enabled by the user using the -Z threads = n option.
    • +
    • Other parts, such as lexical parsing, HIR lowering, and macro expansion, are +still executed in serial mode.
    • +
    +
    +The following sections are kept for now but are quite outdated. +
    +
    +

    Code generation

    +

    During monomorphization the compiler splits up all the code to +be generated into smaller chunks called codegen units. These are then generated by +independent instances of LLVM running in parallel. At the end, the linker +is run to combine all the codegen units together into one binary. This process +occurs in the rustc_codegen_ssa::base module.

    +

    Data structures

    +

    The underlying thread-safe data-structures used in the parallel compiler +can be found in the rustc_data_structures::sync module. These data structures +are implemented differently depending on whether parallel-compiler is true.

    +
    + + + + + + + + +
    data structureparallelnon-parallel
    Lock<T>(parking_lot::Mutex<T>)(std::cell::RefCell)
    RwLock<T>(parking_lot::RwLock<T>)(std::cell::RefCell)
    MTLock<T>(Lock<T>)(T)
    ReadGuardparking_lot::RwLockReadGuardstd::cell::Ref
    MappedReadGuardparking_lot::MappedRwLockReadGuardstd::cell::Ref
    WriteGuardparking_lot::RwLockWriteGuardstd::cell::RefMut
    MappedWriteGuardparking_lot::MappedRwLockWriteGuardstd::cell::RefMut
    LockGuardparking_lot::MutexGuardstd::cell::RefMut
    +
    +
      +
    • +

      These thread-safe data structures are interspersed during compilation which +can cause lock contention resulting in degraded performance as the number of +threads increases beyond 4. So we audit the use of these data structures +which leads to either a refactoring so as to reduce the use of shared state, +or the authoring of persistent documentation covering the specific of the +invariants, the atomicity, and the lock orderings.

      +
    • +
    • +

      On the other hand, we still need to figure out what other invariants +during compilation might not hold in parallel compilation.

      +
    • +
    +

    WorkerLocal

    +

    WorkerLocal is a special data structure implemented for parallel compilers. It +holds worker-locals values for each thread in a thread pool. You can only +access the worker local value through the Deref impl on the thread pool it +was constructed on. It panics otherwise.

    +

    WorkerLocal is used to implement the Arena allocator in the parallel +environment, which is critical in parallel queries. Its implementation is +located in the rustc_data_structures::sync::worker_local module. However, +in the non-parallel compiler, it is implemented as (OneThread<T>), whose T +can be accessed directly through Deref::deref.

    +

    Parallel iterator

    +

    The parallel iterators provided by the rayon crate are easy ways to +implement parallelism. In the current implementation of the parallel compiler +we use a custom fork of rayon to run tasks in parallel.

    +

    Some iterator functions are implemented to run loops in parallel +when parallel-compiler is true.

    +
    + + + + + + + + +
    Function(Omit Send and Sync)IntroductionOwning Module
    par_iter<T: IntoParallelIterator>(t: T) -> T::Itergenerate a parallel iteratorrustc_data_structure::sync
    par_for_each_in<T: IntoParallelIterator>(t: T, for_each: impl Fn(T::Item))generate a parallel iterator and run for_each on each elementrustc_data_structure::sync
    Map::par_body_owners(self, f: impl Fn(LocalDefId))run f on all hir owners in the craterustc_middle::hir::map
    Map::par_for_each_module(self, f: impl Fn(LocalDefId))run f on all modules and sub modules in the craterustc_middle::hir::map
    ModuleItems::par_items(&self, f: impl Fn(ItemId))run f on all items in the modulerustc_middle::hir
    ModuleItems::par_trait_items(&self, f: impl Fn(TraitItemId))run f on all trait items in the modulerustc_middle::hir
    ModuleItems::par_impl_items(&self, f: impl Fn(ImplItemId))run f on all impl items in the modulerustc_middle::hir
    ModuleItems::par_foreign_items(&self, f: impl Fn(ForeignItemId))run f on all foreign items in the modulerustc_middle::hir
    +
    +

    There are a lot of loops in the compiler which can possibly be parallelized +using these functions. As of August 2022, scenarios where +the parallel iterator function has been used are as follows:

    +
    + + + + + + + + + + + + +
    callerscenariocallee
    rustc_metadata::rmeta::encoder::prefetch_mirPrefetch queries which will be needed later by metadata encodingpar_iter
    rustc_monomorphize::collector::collect_crate_mono_itemsCollect monomorphized items reachable from non-generic itemspar_for_each_in
    rustc_interface::passes::analysisCheck the validity of the match statementsMap::par_body_owners
    rustc_interface::passes::analysisMIR borrow checkMap::par_body_owners
    rustc_typeck::check::typeck_item_bodiesType checkMap::par_body_owners
    rustc_interface::passes::hir_id_validator::check_crateCheck the validity of hirMap::par_for_each_module
    rustc_interface::passes::analysisCheck the validity of loops body, attributes, naked functions, unstable abi, const bodysMap::par_for_each_module
    rustc_interface::passes::analysisLiveness and intrinsic checking of MIRMap::par_for_each_module
    rustc_interface::passes::analysisDeathness checkingMap::par_for_each_module
    rustc_interface::passes::analysisPrivacy checkingMap::par_for_each_module
    rustc_lint::late::check_crateRun per-module lintsMap::par_for_each_module
    rustc_typeck::check_crateWell-formedness checkingMap::par_for_each_module
    +
    +

    There are still many loops that have the potential to use parallel iterators.

    +

    Query system

    +

    The query model has some properties that make it actually feasible to evaluate +multiple queries in parallel without too much effort:

    +
      +
    • All data a query provider can access is via the query context, so +the query context can take care of synchronizing access.
    • +
    • Query results are required to be immutable so they can safely be used by +different threads concurrently.
    • +
    +

    When a query foo is evaluated, the cache table for foo is locked.

    +
      +
    • If there already is a result, we can clone it, release the lock and +we are done.
    • +
    • If there is no cache entry and no other active query invocation computing the +same result, we mark the key as being "in progress", release the lock and +start evaluating.
    • +
    • If there is another query invocation for the same key in progress, we +release the lock, and just block the thread until the other invocation has +computed the result we are waiting for. Cycle error detection in the parallel +compiler requires more complex logic than in single-threaded mode. When +worker threads in parallel queries stop making progress due to interdependence, +the compiler uses an extra thread (named deadlock handler) to detect, remove and +report the cycle error.
    • +
    +

    The parallel query feature still has implementation to do, most of which is +related to the previous Data Structures and Parallel Iterators. See this +open feature tracking issue.

    +

    Rustdoc

    +

    As of November 2022, there are still a number of steps to +complete before rustdoc rendering can be made parallel (see a open discussion +of parallel rustdoc).

    +

    Resources

    +

    Here are some resources that can be used to learn more:

    + + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + + diff --git a/part-2-intro.html b/part-2-intro.html new file mode 100644 index 000000000..d393b9a65 --- /dev/null +++ b/part-2-intro.html @@ -0,0 +1,229 @@ + + + + + + Prologue - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    High-Level Compiler Architecture

    +

    The remaining parts of this guide discuss how the compiler works. They go +through everything from high-level structure of the compiler to how each stage +of compilation works. They should be friendly to both readers interested in the +end-to-end process of compilation and readers interested in learning about a +specific system they wish to contribute to. If anything is unclear, feel free +to file an issue on the rustc-dev-guide +repo or contact the compiler +team, as detailed in this chapter from Part 1.

    +

    In this part, we will look at the high-level architecture of the compiler. In +particular, we will look at three overarching design choices that impact the +whole compiler: the query system, incremental compilation, and interning.

    + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + + diff --git a/part-3-intro.html b/part-3-intro.html new file mode 100644 index 000000000..c2131b695 --- /dev/null +++ b/part-3-intro.html @@ -0,0 +1,225 @@ + + + + + + Prologue - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    Source Code Representation

    +

    This part describes the process of taking raw source code from the user and +transforming it into various forms that the compiler can work with easily. +These are called intermediate representations (IRs).

    +

    This process starts with compiler understanding what the user has asked for: +parsing the command line arguments given and determining what it is to compile. +After that, the compiler transforms the user input into a series of IRs that +look progressively less like what the user wrote.

    + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + + diff --git a/part-4-intro.html b/part-4-intro.html new file mode 100644 index 000000000..ea2dcd3b7 --- /dev/null +++ b/part-4-intro.html @@ -0,0 +1,228 @@ + + + + + + Prologue - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    Analysis

    +

    This part discusses the many analyses that the compiler uses to check various +properties of the code and to inform later stages. Typically, this is what people +mean when they talk about "Rust's type system". This includes the +representation, inference, and checking of types, the trait system, and the +borrow checker. These analyses do not happen as one big pass or set of +contiguous passes. Rather, they are spread out throughout various parts of the +compilation process and use different intermediate representations. For example, +type checking happens on the HIR, while borrow checking happens on the MIR. +Nonetheless, for the sake of presentation, we will discuss all of these +analyses in this part of the guide.

    + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + + diff --git a/part-5-intro.html b/part-5-intro.html new file mode 100644 index 000000000..c9a9de409 --- /dev/null +++ b/part-5-intro.html @@ -0,0 +1,264 @@ + + + + + + Prologue - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    From MIR to binaries

    +

    All of the preceding chapters of this guide have one thing in common: +we never generated any executable machine code at all! +With this chapter, all of that changes.

    +

    So far, +we've shown how the compiler can take raw source code in text format +and transform it into MIR. +We have also shown how the compiler does various +analyses on the code to detect things like type or lifetime errors. +Now, we will finally take the MIR and produce some executable machine code.

    +
    +

    NOTE: This part of a compiler is often called the backend. +The term is a bit overloaded because in the compiler source, +it usually refers to the "codegen backend" (i.e. LLVM, Cranelift, or GCC). +Usually, when you see the word "backend" in this part, +we are referring to the "codegen backend".

    +
    +

    So what do we need to do?

    +
      +
    1. First, we need to collect the set of things to generate code for. +In particular, +we need to find out which concrete types to substitute for generic ones, +since we need to generate code for the concrete types. +Generating code for the concrete types +(i.e. emitting a copy of the code for each concrete type) is called monomorphization, +so the process of collecting all the concrete types is called monomorphization collection.
    2. +
    3. Next, we need to actually lower the MIR to a codegen IR +(usually LLVM IR) for each concrete type we collected.
    4. +
    5. Finally, we need to invoke the codegen backend, +which runs a bunch of optimization passes, +generates executable code, +and links together an executable binary.
    6. +
    +

    The code for codegen is actually a bit complex due to a few factors:

    +
      +
    • Support for multiple codegen backends (LLVM, Cranelift, and GCC). +We try to share as much backend code between them as possible, +so a lot of it is generic over the codegen implementation. +This means that there are often a lot of layers of abstraction.
    • +
    • Codegen happens asynchronously in another thread for performance.
    • +
    • The actual codegen is done by a third-party library (either of the 3 backends).
    • +
    +

    Generally, the rustc_codegen_ssa crate contains backend-agnostic code, +while the rustc_codegen_llvm crate contains code specific to LLVM codegen.

    +

    At a very high level, the entry point is +rustc_codegen_ssa::base::codegen_crate. +This function starts the process discussed in the rest of this chapter.

    + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + + diff --git a/pat-exhaustive-checking.html b/pat-exhaustive-checking.html new file mode 100644 index 000000000..f59647136 --- /dev/null +++ b/pat-exhaustive-checking.html @@ -0,0 +1,400 @@ + + + + + + Pattern and exhaustiveness checking - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    Pattern and exhaustiveness checking

    +

    In Rust, pattern matching and bindings have a few very helpful properties. The +compiler will check that bindings are irrefutable when made and that match arms +are exhaustive.

    +

    Pattern usefulness

    +

    The central question that usefulness checking answers is: +"in this match expression, is that branch redundant?". +More precisely, it boils down to computing whether, +given a list of patterns we have already seen, +a given new pattern might match any new value.

    +

    For example, in the following match expression, +we ask in turn whether each pattern might match something +that wasn't matched by the patterns above it. +Here we see the 4th pattern is redundant with the 1st; +that branch will get an "unreachable" warning. +The 3rd pattern may or may not be useful, +depending on whether Foo has other variants than Bar. +Finally, we can ask whether the whole match is exhaustive +by asking whether the wildcard pattern (_) +is useful relative to the list of all the patterns in that match. +Here we can see that _ is useful (it would catch (false, None)); +this expression would therefore get a "non-exhaustive match" error.

    +
    #![allow(unused)]
    +fn main() {
    +// x: (bool, Option<Foo>)
    +match x {
    +    (true, _) => {} // 1
    +    (false, Some(Foo::Bar)) => {} // 2
    +    (false, Some(_)) => {} // 3
    +    (true, None) => {} // 4
    +}
    +}
    +

    Thus usefulness is used for two purposes: +detecting unreachable code (which is useful to the user), +and ensuring that matches are exhaustive (which is important for soundness, +because a match expression can return a value).

    +

    Where it happens

    +

    This check is done anywhere you can write a pattern: match expressions, if let, let else, +plain let, and function arguments.

    +
    #![allow(unused)]
    +fn main() {
    +// `match`
    +// Usefulness can detect unreachable branches and forbid non-exhaustive matches.
    +match foo() {
    +    Ok(x) => x,
    +    Err(_) => panic!(),
    +}
    +
    +// `if let`
    +// Usefulness can detect unreachable branches.
    +if let Some(x) = foo() {
    +    // ...
    +}
    +
    +// `while let`
    +// Usefulness can detect infinite loops and dead loops.
    +while let Some(x) = it.next() {
    +    // ...
    +}
    +
    +// Destructuring `let`
    +// Usefulness can forbid non-exhaustive patterns.
    +let Foo::Bar(x, y) = foo();
    +
    +// Destructuring function arguments
    +// Usefulness can forbid non-exhaustive patterns.
    +fn foo(Foo { x, y }: Foo) {
    +    // ...
    +}
    +}
    +

    The algorithm

    +

    Exhaustiveness checking is run before MIR building in check_match. +It is implemented in the rustc_pattern_analysis crate, +with the core of the algorithm in the usefulness module. +That file contains a detailed description of the algorithm.

    +

    Important concepts

    +

    Constructors and fields

    +

    In the value Pair(Some(0), true), Pair is called the constructor of the value, and Some(0) and +true are its fields. Every matchable value can be decomposed in this way. Examples of +constructors are: Some, None, (,) (the 2-tuple constructor), Foo {..} (the constructor for +a struct Foo), and 2 (the constructor for the number 2).

    +

    Each constructor takes a fixed number of fields; this is called its arity. Pair and (,) have +arity 2, Some has arity 1, None and 42 have arity 0. Each type has a known set of +constructors. Some types have many constructors (like u64) or even an infinitely many (like &str +and &[T]).

    +

    Patterns are similar: Pair(Some(_), _) has constructor Pair and two fields. The difference is +that we get some extra pattern-only constructors, namely: the wildcard _, variable bindings, +integer ranges like 0..=10, and variable-length slices like [_, .., _]. We treat or-patterns +separately.

    +

    Now to check if a value v matches a pattern p, we check if v's constructor matches p's +constructor, then recursively compare their fields if necessary. A few representative examples:

    +
      +
    • matches!(v, _) := true
    • +
    • matches!((v0, v1), (p0, p1)) := matches!(v0, p0) && matches!(v1, p1)
    • +
    • matches!(Foo { a: v0, b: v1 }, Foo { a: p0, b: p1 }) := matches!(v0, p0) && matches!(v1, p1)
    • +
    • matches!(Ok(v0), Ok(p0)) := matches!(v0, p0)
    • +
    • matches!(Ok(v0), Err(p0)) := false (incompatible variants)
    • +
    • matches!(v, 1..=100) := matches!(v, 1) || ... || matches!(v, 100)
    • +
    • matches!([v0], [p0, .., p1]) := false (incompatible lengths)
    • +
    • matches!([v0, v1, v2], [p0, .., p1]) := matches!(v0, p0) && matches!(v2, p1)
    • +
    +

    This concept is absolutely central to pattern analysis. The constructor module provides +functions to extract, list and manipulate constructors. This is a useful enough concept that +variations of it can be found in other places of the compiler, like in the MIR-lowering of a match +expression and in some clippy lints.

    +

    Constructor grouping and splitting

    +

    The pattern-only constructors (_, ranges and variable-length slices) each stand for a set of +normal constructors, e.g. _: Option<T> stands for the set {None, Some} and [_, .., _] stands +for the infinite set {[,], [,,], [,,,], ...} of the slice constructors of arity >= 2.

    +

    In order to manage these constructors, we keep them as grouped as possible. For example:

    +
    #![allow(unused)]
    +fn main() {
    +match (0, false) {
    +    (0 ..=100, true) => {}
    +    (50..=150, false) => {}
    +    (0 ..=200, _) => {}
    +}
    +}
    +

    In this example, all of 0, 1, .., 49 match the same arms, and thus can be treated as a group. +In fact, in this match, the only ranges we need to consider are: 0..50, 50..=100, +101..=150,151..=200 and 201... Similarly:

    +
    #![allow(unused)]
    +fn main() {
    +enum Direction { North, South, East, West }
    +let wind = (Direction::North, 0u8);
    +match wind {
    +    (Direction::North, 50..) => {}
    +    (_, _) => {}
    +}
    +}
    +

    Here we can treat all the non-North constructors as a group, giving us only two cases to handle: +North, and everything else.

    +

    This is called "constructor splitting" and is crucial to having exhaustiveness run in reasonable +time.

    +

    Usefulness vs reachability in the presence of empty types

    +

    This is likely the subtlest aspect of exhaustiveness. To be fully precise, a match doesn't operate +on a value, it operates on a place. In certain unsafe circumstances, it is possible for a place to +not contain valid data for its type. This has subtle consequences for empty types. Take the +following:

    +
    #![allow(unused)]
    +fn main() {
    +enum Void {}
    +let x: u8 = 0;
    +let ptr: *const Void = &x as *const u8 as *const Void;
    +unsafe {
    +    match *ptr {
    +        _ => println!("Reachable!"),
    +    }
    +}
    +}
    +

    In this example, ptr is a valid pointer pointing to a place with invalid data. The _ pattern +does not look at the contents of the place *ptr, so this code is ok and the arm is taken. In other +words, despite the place we are inspecting being of type Void, there is a reachable arm. If the +arm had a binding however:

    +
    #![allow(unused)]
    +fn main() {
    +#[derive(Copy, Clone)]
    +enum Void {}
    +let x: u8 = 0;
    +let ptr: *const Void = &x as *const u8 as *const Void;
    +unsafe {
    +match *ptr {
    +    _a => println!("Unreachable!"),
    +}
    +}
    +}
    +

    Here the binding loads the value of type Void from the *ptr place. In this example, this causes +UB since the data is not valid. In the general case, this asserts validity of the data at *ptr. +Either way, this arm will never be taken.

    +

    Finally, let's consider the empty match match *ptr {}. If we consider this exhaustive, then +having invalid data at *ptr is invalid. In other words, the empty match is semantically +equivalent to the _a => ... match. In the interest of explicitness, we prefer the case with an +arm, hence we won't tell the user to remove the _a arm. In other words, the _a arm is +unreachable yet not redundant. This is why we lint on redundant arms rather than unreachable +arms, despite the fact that the lint says "unreachable".

    +

    These considerations only affects certain places, namely those that can contain non-valid data +without UB. These are: pointer dereferences, reference dereferences, and union field accesses. We +track during exhaustiveness checking whether a given place is known to contain valid data.

    +

    Having said all that, the current implementation of exhaustiveness checking does not follow the +above considerations. On stable, empty types are for the most part treated as non-empty. The +exhaustive_patterns feature errs on the other end: it allows omitting arms that could be +reachable in unsafe situations. The never_patterns experimental feature aims to fix this and +permit the correct behavior of empty types in patterns.

    + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + + diff --git a/print.html b/print.html new file mode 100644 index 000000000..99531709e --- /dev/null +++ b/print.html @@ -0,0 +1,27705 @@ + + + + + + Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    Getting Started

    +

    Thank you for your interest in contributing to Rust! There are many ways to +contribute, and we appreciate all of them.

    + +

    If this is your first time contributing, the walkthrough chapter can give you a good example of +how a typical contribution would go.

    +

    This documentation is not intended to be comprehensive; it is meant to be a +quick guide for the most useful things. For more information, see this +chapter on how to build and run the compiler.

    +

    Asking Questions

    +

    If you have questions, please make a post on the Rust Zulip server or +internals.rust-lang.org. If you are contributing to Rustup, be aware they are not on +Zulip - you can ask questions in #wg-rustup on Discord. +See the list of teams and working groups and the Community page on the +official website for more resources.

    +

    As a reminder, all contributors are expected to follow our Code of Conduct.

    +

    The compiler team (or t-compiler) usually hangs out in Zulip in this +"stream"; it will be easiest to get questions answered there.

    +

    Please ask questions! A lot of people report feeling that they are "wasting +expert time", but nobody on t-compiler feels this way. Contributors are +important to us.

    +

    Also, if you feel comfortable, prefer public topics, as this means others can +see the questions and answers, and perhaps even integrate them back into this +guide :)

    +

    Experts

    +

    Not all t-compiler members are experts on all parts of rustc; it's a +pretty large project. To find out who could have some expertise on +different parts of the compiler, consult triagebot assign groups. +The sections that start with [assign* in triagebot.toml file. +But also, feel free to ask questions even if you can't figure out who to ping.

    +

    Another way to find experts for a given part of the compiler is to see who has made recent commits. +For example, to find people who have recently worked on name resolution since the 1.68.2 release, +you could run git shortlog -n 1.68.2.. compiler/rustc_resolve/. Ignore any commits starting with +"Rollup merge" or commits by @bors (see CI contribution procedures for +more information about these commits).

    +

    Etiquette

    +

    We do ask that you be mindful to include as much useful information as you can +in your question, but we recognize this can be hard if you are unfamiliar with +contributing to Rust.

    +

    Just pinging someone without providing any context can be a bit annoying and +just create noise, so we ask that you be mindful of the fact that the +t-compiler folks get a lot of pings in a day.

    +

    What should I work on?

    +

    The Rust project is quite large and it can be difficult to know which parts of the project need +help, or are a good starting place for beginners. Here are some suggested starting places.

    +

    Easy or mentored issues

    +

    If you're looking for somewhere to start, check out the following issue +search. See the Triage for an explanation of these labels. You can also try +filtering the search to areas you're interested in. For example:

    +
      +
    • repo:rust-lang/rust-clippy will only show clippy issues
    • +
    • label:T-compiler will only show issues related to the compiler
    • +
    • label:A-diagnostics will only show diagnostic issues
    • +
    +

    Not all important or beginner work has issue labels. +See below for how to find work that isn't labelled.

    +

    Recurring work

    +

    Some work is too large to be done by a single person. In this case, it's common to have "Tracking +issues" to co-ordinate the work between contributors. Here are some example tracking issues where +it's easy to pick up work without a large time commitment:

    + +

    If you find more recurring work, please feel free to add it here!

    +

    Clippy issues

    +

    The Clippy project has spent a long time making its contribution process as friendly to newcomers +as possible. Consider working on it first to get familiar with the process and the compiler +internals.

    +

    See the Clippy contribution guide for instructions on getting started.

    +

    Diagnostic issues

    +

    Many diagnostic issues are self-contained and don't need detailed background knowledge of the +compiler. You can see a list of diagnostic issues here.

    +

    Picking up abandoned pull requests

    +

    Sometimes, contributors send a pull request, but later find out that they don't have enough +time to work on it, or they simply are not interested in it anymore. Such PRs are often +eventually closed and they receive the S-inactive label. You could try to examine some of +these PRs and pick up the work. You can find the list of such PRs here.

    +

    If the PR has been implemented in some other way in the meantime, the S-inactive label +should be removed from it. If not, and it seems that there is still interest in the change, +you can try to rebase the pull request on top of the latest master branch and send a new +pull request, continuing the work on the feature.

    +

    Writing tests

    +

    Issues that have been resolved but do not have a regression test are marked with the E-needs-test label. Writing unit tests is a low-risk, lower-priority task that offers new contributors a great opportunity to familiarize themselves with the testing infrastructure and contribution workflow.

    +

    Contributing to std (standard library)

    +

    See std-dev-guide.

    +

    Contributing code to other Rust projects

    +

    There are a bunch of other projects that you can contribute to outside of the +rust-lang/rust repo, including cargo, miri, rustup, and many others.

    +

    These repos might have their own contributing guidelines and procedures. Many +of them are owned by working groups. For more info, see the documentation in those repos' READMEs.

    +

    Other ways to contribute

    +

    There are a bunch of other ways you can contribute, especially if you don't +feel comfortable jumping straight into the large rust-lang/rust codebase.

    +

    The following tasks are doable without much background knowledge but are +incredibly helpful:

    + +

    Cloning and Building

    +

    See "How to build and run the compiler".

    +

    Contributor Procedures

    +

    This section has moved to the "Contribution Procedures" chapter.

    +

    Other Resources

    +

    This section has moved to the "About this guide" chapter.

    +

    About this guide

    +

    This guide is meant to help document how rustc – the Rust compiler – works, +as well as to help new contributors get involved in rustc development.

    +

    There are several parts to this guide:

    +
      +
    1. Building and debugging rustc: +Contains information that should be useful no matter how you are contributing, +about building, debugging, profiling, etc.
    2. +
    3. Contributing to Rust: +Contains information that should be useful no matter how you are contributing, +about procedures for contribution, using git and Github, stabilizing features, etc.
    4. +
    5. Bootstrapping: +Describes how the Rust compiler builds itself using previous versions, including +an introduction to the bootstrap process and debugging methods.
    6. +
    7. High-level Compiler Architecture: +Discusses the high-level architecture of the compiler and stages of the compile process.
    8. +
    9. Source Code Representation: +Describes the process of taking raw source code from the user +and transforming it into various forms that the compiler can work with easily.
    10. +
    11. Supporting Infrastructure: +Covers command-line argument conventions, compiler entry points like rustc_driver and +rustc_interface, and the design and implementation of errors and lints.
    12. +
    13. Analysis: +Discusses the analyses that the compiler uses to check various properties of the code +and inform later stages of the compile process (e.g., type checking).
    14. +
    15. MIR to Binaries: How linked executable machine code is generated.
    16. +
    17. Appendices at the end with useful reference information. +There are a few of these with different information, including a glossary.
    18. +
    +

    Constant change

    +

    Keep in mind that rustc is a real production-quality product, +being worked upon continuously by a sizeable set of contributors. +As such, it has its fair share of codebase churn and technical debt. +In addition, many of the ideas discussed throughout this guide are idealized designs +that are not fully realized yet. +All this makes keeping this guide completely up to date on everything very hard!

    +

    The Guide itself is of course open-source as well, +and the sources can be found at the GitHub repository. +If you find any mistakes in the guide, please file an issue about it. +Even better, open a PR with a correction!

    +

    If you do contribute to the guide, +please see the corresponding subsection on writing documentation in this guide.

    +
    +

    “‘All conditioned things are impermanent’ — +when one sees this with wisdom, one turns away from suffering.” +The Dhammapada, verse 277

    +
    +

    Other places to find information

    +

    You might also find the following sites useful:

    +
      +
    • This guide contains information about how various parts of the +compiler work and how to contribute to the compiler.
    • +
    • rustc API docs -- rustdoc documentation for the compiler, devtools, and internal tools
    • +
    • Forge -- contains documentation about Rust infrastructure, team procedures, and more
    • +
    • compiler-team -- the home-base for the Rust compiler team, with description +of the team procedures, active working groups, and the team calendar.
    • +
    • std-dev-guide -- a similar guide for developing the standard library.
    • +
    • The t-compiler zulip
    • +
    • #contribute and #wg-rustup on Discord.
    • +
    • The Rust Internals forum, a place to ask questions and +discuss Rust's internals
    • +
    • The Rust reference, even though it doesn't specifically talk about +Rust's internals, is a great resource nonetheless
    • +
    • Although out of date, Tom Lee's great blog article is very helpful
    • +
    • The Rust Compiler Testing Docs
    • +
    • For @bors, this cheat sheet is helpful
    • +
    • Google is always helpful when programming. +You can search all Rust documentation (the standard library, +the compiler, the books, the references, and the guides) to quickly find +information about the language and compiler.
    • +
    • You can also use Rustdoc's built-in search feature to find documentation on +types and functions within the crates you're looking at. You can also search +by type signature! For example, searching for * -> vec should find all +functions that return a Vec<T>. +Hint: Find more tips and keyboard shortcuts by typing ? on any Rustdoc +page!
    • +
    +

    How to build and run the compiler

    + +

    The compiler is built using a tool called x.py. You will need to +have Python installed to run it.

    +

    Quick Start

    +

    For a less in-depth quick-start of getting the compiler running, see quickstart.

    +

    Get the source code

    +

    The main repository is rust-lang/rust. This contains the compiler, +the standard library (including core, alloc, test, proc_macro, etc), +and a bunch of tools (e.g. rustdoc, the bootstrapping infrastructure, etc).

    +

    The very first step to work on rustc is to clone the repository:

    +
    git clone https://github.com/rust-lang/rust.git
    +cd rust
    +
    +

    Partial clone the repository

    +

    Due to the size of the repository, cloning on a slower internet connection can take a long time, +and requires disk space to store the full history of every file and directory. +Instead, it is possible to tell git to perform a partial clone, which will only fully retrieve +the current file contents, but will automatically retrieve further file contents when you, e.g., +jump back in the history. +All git commands will continue to work as usual, at the price of requiring an internet connection +to visit not-yet-loaded points in history.

    +
    git clone --filter='blob:none' https://github.com/rust-lang/rust.git
    +cd rust
    +
    +
    +

    NOTE: This link +describes this type of checkout in more detail, and also compares it to other modes, such as +shallow cloning.

    +
    +

    Shallow clone the repository

    +

    An older alternative to partial clones is to use shallow clone the repository instead. +To do so, you can use the --depth N option with the git clone command. +This instructs git to perform a "shallow clone", cloning the repository but truncating it to +the last N commits.

    +

    Passing --depth 1 tells git to clone the repository but truncate the history to the latest +commit that is on the master branch, which is usually fine for browsing the source code or +building the compiler.

    +
    git clone --depth 1 https://github.com/rust-lang/rust.git
    +cd rust
    +
    +
    +

    NOTE: A shallow clone limits which git commands can be run. +If you intend to work on and contribute to the compiler, it is +generally recommended to fully clone the repository as shown above, +or to perform a partial clone instead.

    +

    For example, git bisect and git blame require access to the commit history, +so they don't work if the repository was cloned with --depth 1.

    +
    +

    What is x.py?

    +

    x.py is the build tool for the rust repository. It can build docs, run tests, and compile the +compiler and standard library.

    +

    This chapter focuses on the basics to be productive, but +if you want to learn more about x.py, read this chapter.

    +

    Also, using x rather than x.py is recommended as:

    +
    +

    ./x is the most likely to work on every system (on Unix it runs the shell script +that does python version detection, on Windows it will probably run the +powershell script - certainly less likely to break than ./x.py which often just +opens the file in an editor).1

    +
    +

    (You can find the platform related scripts around the x.py, like x.ps1)

    +

    Notice that this is not absolute. For instance, using Nushell in VSCode on Win10, +typing x or ./x still opens x.py in an editor rather than invoking the program. :)

    +

    In the rest of this guide, we use x rather than x.py directly. The following +command:

    +
    ./x check
    +
    +

    could be replaced by:

    +
    ./x.py check
    +
    +

    Running x.py

    +

    The x.py command can be run directly on most Unix systems in the following format:

    +
    ./x <subcommand> [flags]
    +
    +

    This is how the documentation and examples assume you are running x.py. +Some alternative ways are:

    +
    # On a Unix shell if you don't have the necessary `python3` command
    +./x <subcommand> [flags]
    +
    +# In Windows Powershell (if powershell is configured to run scripts)
    +./x <subcommand> [flags]
    +./x.ps1 <subcommand> [flags]
    +
    +# On the Windows Command Prompt (if .py files are configured to run Python)
    +x.py <subcommand> [flags]
    +
    +# You can also run Python yourself, e.g.:
    +python x.py <subcommand> [flags]
    +
    +

    On Windows, the Powershell commands may give you an error that looks like this:

    +
    PS C:\Users\vboxuser\rust> ./x
    +./x : File C:\Users\vboxuser\rust\x.ps1 cannot be loaded because running scripts is disabled on this system. For more
    +information, see about_Execution_Policies at https:/go.microsoft.com/fwlink/?LinkID=135170.
    +At line:1 char:1
    ++ ./x
    ++ ~~~
    +    + CategoryInfo          : SecurityError: (:) [], PSSecurityException
    +    + FullyQualifiedErrorId : UnauthorizedAccess
    +
    +

    You can avoid this error by allowing powershell to run local scripts:

    +
    Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
    +
    +

    Running x.py slightly more conveniently

    +

    There is a binary that wraps x.py called x in src/tools/x. All it does is +run x.py, but it can be installed system-wide and run from any subdirectory +of a checkout. It also looks up the appropriate version of python to use.

    +

    You can install it with cargo install --path src/tools/x.

    +

    To clarify that this is another global installed binary util, which is +similar to the one declared in section What is x.py, but +it works as an independent process to execute the x.py rather than calling the +shell to run the platform related scripts.

    +

    Create a bootstrap.toml

    +

    To start, run ./x setup and select the compiler defaults. This will do some initialization +and create a bootstrap.toml for you with reasonable defaults. If you use a different default (which +you'll likely want to do if you want to contribute to an area of rust other than the compiler, such +as rustdoc), make sure to read information about that default (located in src/bootstrap/defaults) +as the build process may be different for other defaults.

    +

    Alternatively, you can write bootstrap.toml by hand. See bootstrap.example.toml for all the available +settings and explanations of them. See src/bootstrap/defaults for common settings to change.

    +

    If you have already built rustc and you change settings related to LLVM, then you may have to +execute rm -rf build for subsequent configuration changes to take effect. Note that ./x clean will not cause a rebuild of LLVM.

    +

    Common x commands

    +

    Here are the basic invocations of the x commands most commonly used when +working on rustc, std, rustdoc, and other tools.

    +
    + + + + +
    CommandWhen to use it
    ./x checkQuick check to see if most things compile; rust-analyzer can run this automatically for you
    ./x buildBuilds rustc, std, and rustdoc
    ./x testRuns all tests
    ./x fmtFormats all code
    +
    +

    As written, these commands are reasonable starting points. However, there are +additional options and arguments for each of them that are worth learning for +serious development work. In particular, ./x build and ./x test +provide many ways to compile or test a subset of the code, which can save a lot +of time.

    +

    Also, note that x supports all kinds of path suffixes for compiler, library, +and src/tools directories. So, you can simply run x test tidy instead of +x test src/tools/tidy. Or, x build std instead of x build library/std.

    +

    See the chapters on +testing and rustdoc for more details.

    +

    Building the compiler

    +

    Note that building will require a relatively large amount of storage space. +You may want to have upwards of 10 or 15 gigabytes available to build the compiler.

    +

    Once you've created a bootstrap.toml, you are now ready to run +x. There are a lot of options here, but let's start with what is +probably the best "go to" command for building a local compiler:

    +
    ./x build library
    +
    +

    This may look like it only builds the standard library, but that is not the case. +What this command does is the following:

    +
      +
    • Build rustc using the stage0 compiler +
        +
      • This produces the stage1 compiler
      • +
      +
    • +
    • Build std using the stage1 compiler
    • +
    +

    This final product (stage1 compiler + libs built using that compiler) +is what you need to build other Rust programs (unless you use #![no_std] or +#![no_core]).

    +

    You will probably find that building the stage1 std is a bottleneck for you, +but fear not, there is a (hacky) workaround... +see the section on avoiding rebuilds for std.

    +

    Sometimes you don't need a full build. When doing some kind of +"type-based refactoring", like renaming a method, or changing the +signature of some function, you can use ./x check instead for a much faster build.

    +

    Note that this whole command just gives you a subset of the full rustc +build. The full rustc build (what you get with ./x build --stage 2 compiler/rustc) has quite a few more steps:

    +
      +
    • Build rustc with the stage1 compiler. +
        +
      • The resulting compiler here is called the "stage2" compiler, which uses stage1 std from the previous command.
      • +
      +
    • +
    • Build librustdoc and a bunch of other things with the stage2 compiler.
    • +
    +

    You almost never need to do this.

    +

    Build specific components

    +

    If you are working on the standard library, you probably don't need to build +every other default component. Instead, you can build a specific component by +providing its name, like this:

    +
    ./x build --stage 1 library
    +
    +

    If you choose the library profile when running x setup, you can omit --stage 1 (it's the +default).

    +

    Creating a rustup toolchain

    +

    Once you have successfully built rustc, you will have created a bunch +of files in your build directory. In order to actually run the +resulting rustc, we recommend creating rustup toolchains. The first +one will run the stage1 compiler (which we built above). The second +will execute the stage2 compiler (which we did not build, but which +you will likely need to build at some point; for example, if you want +to run the entire test suite).

    +
    rustup toolchain link stage1 build/host/stage1
    +rustup toolchain link stage2 build/host/stage2
    +
    +

    Now you can run the rustc you built with. If you run with -vV, you +should see a version number ending in -dev, indicating a build from +your local environment:

    +
    $ rustc +stage1 -vV
    +rustc 1.48.0-dev
    +binary: rustc
    +commit-hash: unknown
    +commit-date: unknown
    +host: x86_64-unknown-linux-gnu
    +release: 1.48.0-dev
    +LLVM version: 11.0
    +
    +

    The rustup toolchain points to the specified toolchain compiled in your build directory, +so the rustup toolchain will be updated whenever x build or x test are run for +that toolchain/stage.

    +

    Note: the toolchain we've built does not include cargo. In this case, rustup will +fall back to using cargo from the installed nightly, beta, or stable toolchain +(in that order). If you need to use unstable cargo flags, be sure to run +rustup install nightly if you haven't already. See the +rustup documentation on custom toolchains.

    +

    Note: rust-analyzer and IntelliJ Rust plugin use a component called +rust-analyzer-proc-macro-srv to work with proc macros. If you intend to use a +custom toolchain for a project (e.g. via rustup override set stage1) you may +want to build this component:

    +
    ./x build proc-macro-srv-cli
    +
    +

    Building targets for cross-compilation

    +

    To produce a compiler that can cross-compile for other targets, +pass any number of target flags to x build. +For example, if your host platform is x86_64-unknown-linux-gnu +and your cross-compilation target is wasm32-wasip1, you can build with:

    +
    ./x build --target x86_64-unknown-linux-gnu,wasm32-wasip1
    +
    +

    Note that if you want the resulting compiler to be able to build crates that +involve proc macros or build scripts, you must be sure to explicitly build target support for the +host platform (in this case, x86_64-unknown-linux-gnu).

    +

    If you want to always build for other targets without needing to pass flags to x build, +you can configure this in the [build] section of your bootstrap.toml like so:

    +
    [build]
    +target = ["x86_64-unknown-linux-gnu", "wasm32-wasip1"]
    +
    +

    Note that building for some targets requires having external dependencies installed +(e.g. building musl targets requires a local copy of musl). +Any target-specific configuration (e.g. the path to a local copy of musl) +will need to be provided by your bootstrap.toml. +Please see bootstrap.example.toml for information on target-specific configuration keys.

    +

    For examples of the complete configuration necessary to build a target, please visit +the rustc book, +select any target under the "Platform Support" heading on the left, +and see the section related to building a compiler for that target. +For targets without a corresponding page in the rustc book, +it may be useful to inspect the Dockerfiles +that the Rust infrastructure itself uses to set up and configure cross-compilation.

    +

    If you have followed the directions from the prior section on creating a rustup toolchain, +then once you have built your compiler you will be able to use it to cross-compile like so:

    +
    cargo +stage1 build --target wasm32-wasip1
    +
    +

    Other x commands

    +

    Here are a few other useful x commands. We'll cover some of them in detail +in other sections:

    +
      +
    • Building things: +
        +
      • ./x build – builds everything using the stage 1 compiler, +not just up to std
      • +
      • ./x build --stage 2 – builds everything with the stage 2 compiler including +rustdoc
      • +
      +
    • +
    • Running tests (see the section on running tests for +more details): +
        +
      • ./x test library/std – runs the unit tests and integration tests from std
      • +
      • ./x test tests/ui – runs the ui test suite
      • +
      • ./x test tests/ui/const-generics - runs all the tests in +the const-generics/ subdirectory of the ui test suite
      • +
      • ./x test tests/ui/const-generics/const-types.rs - runs +the single test const-types.rs from the ui test suite
      • +
      +
    • +
    +

    Cleaning out build directories

    +

    Sometimes you need to start fresh, but this is normally not the case. +If you need to run this then bootstrap is most likely not acting right and +you should file a bug as to what is going wrong. If you do need to clean +everything up then you only need to run one command!

    +
    ./x clean
    +
    +

    rm -rf build works too, but then you have to rebuild LLVM, which can take +a long time even on fast computers.

    +

    Remarks on disk space

    +

    Building the compiler (especially if beyond stage 1) can require significant amounts of free disk +space, possibly around 100GB. This is compounded if you have a separate build directory for +rust-analyzer (e.g. build-rust-analyzer). This is easy to hit with dev-desktops which have a set +disk +quota +for each user, but this also applies to local development as well. Occasionally, you may need to:

    +
      +
    • Remove build/ directory.
    • +
    • Remove build-rust-analyzer/ directory (if you have a separate rust-analyzer build directory).
    • +
    • Uninstall unnecessary toolchains if you use cargo-bisect-rustc. You can check which toolchains +are installed with rustup toolchain list.
    • +
    +
    +
    1. +

      issue#1707

      +
    2. +

    Quickstart

    +

    This is a quickstart guide about getting the compiler running. For more +information on the individual steps, see the other pages in this chapter.

    +

    First, clone the repository:

    +
    git clone https://github.com/rust-lang/rust.git
    +cd rust
    +
    +

    When building the compiler, we don't use cargo directly, instead we use a +wrapper called "x". It is invoked with ./x.

    +

    We need to create a configuration for the build. Use ./x setup to create a +good default.

    +
    ./x setup
    +
    +

    Then, we can build the compiler. Use ./x build to build the compiler, standard +library and a few tools. You can also ./x check to just check it. All these +commands can take specific components/paths as arguments, for example ./x check compiler to just check the compiler.

    +
    ./x build
    +
    +
    +

    When doing a change to the compiler that does not affect the way it compiles +the standard library (so for example, a change to an error message), use +--keep-stage-std 1 to avoid recompiling it.

    +
    +

    After building the compiler and standard library, you now have a working +compiler toolchain. You can use it with rustup by linking it.

    +
    rustup toolchain link stage1 build/host/stage1
    +
    +

    Now you have a toolchain called stage1 linked to your build. You can use it to +test the compiler.

    +
    rustc +stage1 testfile.rs
    +
    +

    After doing a change, you can run the compiler test suite with ./x test.

    +

    ./x test runs the full test suite, which is slow and rarely what you want. +Usually, ./x test tests/ui is what you want after a compiler change, testing +all UI tests that invoke the compiler on a specific test file +and check the output.

    +
    ./x test tests/ui
    +
    +

    Use --bless if you've made a change and want to update the .stderr files +with the new output.

    +
    +

    ./x suggest can also be helpful for suggesting which tests to run after a +change.

    +
    +

    Congrats, you are now ready to make a change to the compiler! If you have more +questions, the full chapter might contain the +answers, and if it doesn't, feel free to ask for help on +Zulip.

    +

    If you use VSCode, Vim, Emacs or Helix, ./x setup will ask you if you want to +set up the editor config. For more information, check out suggested +workflows.

    +

    Prerequisites

    +

    Dependencies

    +

    See the rust-lang/rust INSTALL.

    +

    Hardware

    +

    You will need an internet connection to build. The bootstrapping process +involves updating git submodules and downloading a beta compiler. It doesn't +need to be super fast, but that can help.

    +

    There are no strict hardware requirements, but building the compiler is +computationally expensive, so a beefier machine will help, and I wouldn't +recommend trying to build on a Raspberry Pi! We recommend the following.

    +
      +
    • 30GB+ of free disk space. Otherwise, you will have to keep +clearing incremental caches. More space is better, the compiler is a bit of a +hog; it's a problem we are aware of.
    • +
    • 8GB+ RAM
    • +
    • 2+ cores. Having more cores really helps. 10 or 20 or more is not too many!
    • +
    +

    Beefier machines will lead to much faster builds. If your machine is not very +powerful, a common strategy is to only use ./x check on your local machine +and let the CI build test your changes when you push to a PR branch.

    +

    Building the compiler takes more than half an hour on my moderately powerful +laptop. We suggest downloading LLVM from CI so you don't have to build it from source +(see here).

    +

    Like cargo, the build system will use as many cores as possible. Sometimes +this can cause you to run low on memory. You can use -j to adjust the number +of concurrent jobs. If a full build takes more than ~45 minutes to an hour, you +are probably spending most of the time swapping memory in and out; try using +-j1.

    +

    If you don't have too much free disk space, you may want to turn off +incremental compilation (see here). This will make compilation take +longer (especially after a rebase), but will save a ton of space from the +incremental caches.

    +

    Suggested workflows

    +

    The full bootstrapping process takes quite a while. Here are some suggestions to +make your life easier.

    + +

    Installing a pre-push hook

    +

    CI will automatically fail your build if it doesn't pass tidy, our internal +tool for ensuring code quality. If you'd like, you can install a Git +hook that will +automatically run ./x test tidy on each push, to ensure your code is up to +par. If the hook fails then run ./x test tidy --bless and commit the changes. +If you decide later that the pre-push behavior is undesirable, you can delete +the pre-push file in .git/hooks.

    +

    A prebuilt git hook lives at src/etc/pre-push.sh. It can be copied into +your .git/hooks folder as pre-push (without the .sh extension!).

    +

    You can also install the hook as a step of running ./x setup!

    +

    Config extensions

    +

    When working on different tasks, you might need to switch between different bootstrap configurations. +Sometimes you may want to keep an old configuration for future use. But saving raw config values in +random files and manually copying and pasting them can quickly become messy, especially if you have a +long history of different configurations.

    +

    To simplify managing multiple configurations, you can create config extensions.

    +

    For example, you can create a simple config file named cross.toml:

    +
    [build]
    +build = "x86_64-unknown-linux-gnu"
    +host = ["i686-unknown-linux-gnu"]
    +target = ["i686-unknown-linux-gnu"]
    +
    +
    +[llvm]
    +download-ci-llvm = false
    +
    +[target.x86_64-unknown-linux-gnu]
    +llvm-config = "/path/to/llvm-19/bin/llvm-config"
    +
    +

    Then, include this in your bootstrap.toml:

    +
    include = ["cross.toml"]
    +
    +

    You can also include extensions within extensions recursively.

    +

    Note: In the include field, the overriding logic follows a right-to-left order. For example, +in include = ["a.toml", "b.toml"], extension b.toml overrides a.toml. Also, parent extensions +always overrides the inner ones.

    +

    Configuring rust-analyzer for rustc

    +

    Checking the "library" tree

    +

    Checking the "library" tree requires a stage1 compiler, which can be a heavy process on some computers. +For this reason, bootstrap has a flag called --skip-std-check-if-no-download-rustc that skips checking the +"library" tree if rust.download-rustc isn't available. If you want to avoid putting a heavy load on your computer +with rust-analyzer, you can add the --skip-std-check-if-no-download-rustc flag to your ./x check command in +the rust-analyzer configuration.

    +

    Project-local rust-analyzer setup

    +

    rust-analyzer can help you check and format your code whenever you save a +file. By default, rust-analyzer runs the cargo check and rustfmt commands, +but you can override these commands to use more adapted versions of these tools +when hacking on rustc. With custom setup, rust-analyzer can use ./x check +to check the sources, and the stage 0 rustfmt to format them.

    +

    The default rust-analyzer.check.overrideCommand command line will check all +the crates and tools in the repository. If you are working on a specific part, +you can override the command to only check the part you are working on to save +checking time. For example, if you are working on the compiler, you can override +the command to x check compiler --json-output to only check the compiler part. +You can run x check --help --verbose to see the available parts.

    +

    Running ./x setup editor will prompt you to create a project-local LSP config +file for one of the supported editors. You can also create the config file as a +step of running ./x setup.

    +

    Using a separate build directory for rust-analyzer

    +

    By default, when rust-analyzer runs a check or format command, it will share +the same build directory as manual command-line builds. This can be inconvenient +for two reasons:

    +
      +
    • Each build will lock the build directory and force the other to wait, so it +becomes impossible to run command-line builds while rust-analyzer is running +commands in the background.
    • +
    • There is an increased risk of one of the builds deleting previously-built +artifacts due to conflicting compiler flags or other settings, forcing +additional rebuilds in some cases.
    • +
    +

    To avoid these problems:

    +
      +
    • Add --build-dir=build/rust-analyzer to all of the custom x commands in +your editor's rust-analyzer configuration. +(Feel free to choose a different directory name if desired.)
    • +
    • Modify the rust-analyzer.rustfmt.overrideCommand setting so that it points +to the copy of rustfmt in that other build directory.
    • +
    • Modify the rust-analyzer.procMacro.server setting so that it points to the +copy of rust-analyzer-proc-macro-srv in that other build directory.
    • +
    +

    Using separate build directories for command-line builds and rust-analyzer +requires extra disk space.

    +

    Visual Studio Code

    +

    Selecting vscode in ./x setup editor will prompt you to create a +.vscode/settings.json file which will configure Visual Studio code. The +recommended rust-analyzer settings live at +src/etc/rust_analyzer_settings.json.

    +

    If running ./x check on save is inconvenient, in VS Code you can use a Build +Task instead:

    +
    // .vscode/tasks.json
    +{
    +    "version": "2.0.0",
    +    "tasks": [
    +        {
    +            "label": "./x check",
    +            "command": "./x check",
    +            "type": "shell",
    +            "problemMatcher": "$rustc",
    +            "presentation": { "clear": true },
    +            "group": { "kind": "build", "isDefault": true }
    +        }
    +    ]
    +}
    +
    +

    Neovim

    +

    For Neovim users, there are a few options. The +easiest way is by using neoconf.nvim, +which allows for project-local configuration files with the native LSP. The +steps for how to use it are below. Note that they require rust-analyzer to +already be configured with Neovim. Steps for this can be found +here.

    +
      +
    1. First install the plugin. This can be done by following the steps in the +README.
    2. +
    3. Run ./x setup editor, and select vscode to create a +.vscode/settings.json file. neoconf is able to read and update +rust-analyzer settings automatically when the project is opened when this +file is detected.
    4. +
    +

    If you're using coc.nvim, you can run ./x setup editor and select vim to +create a .vim/coc-settings.json. The settings can be edited with +:CocLocalConfig. The recommended settings live at +src/etc/rust_analyzer_settings.json.

    +

    Another way is without a plugin, and creating your own logic in your +configuration. The following code will work for any checkout of rust-lang/rust (newer than Febuary 2025):

    +
    local function expand_config_variables(option)
    +    local var_placeholders = {
    +        ['${workspaceFolder}'] = function(_)
    +            return vim.lsp.buf.list_workspace_folders()[1]
    +        end,
    +    }
    +
    +    if type(option) == "table" then
    +        local mt = getmetatable(option)
    +        local result = {}
    +        for k, v in pairs(option) do
    +            result[expand_config_variables(k)] = expand_config_variables(v)
    +        end
    +        return setmetatable(result, mt)
    +    end
    +    if type(option) ~= "string" then
    +        return option
    +    end
    +    local ret = option
    +    for key, fn in pairs(var_placeholders) do
    +        ret = ret:gsub(key, fn)
    +    end
    +    return ret
    +end
    +lspconfig.rust_analyzer.setup {
    +    root_dir = function()
    +        local default = lspconfig.rust_analyzer.config_def.default_config.root_dir()
    +        -- the default root detection uses the cargo workspace root.
    +        -- but for rust-lang/rust, the standard library is in its own workspace.
    +        -- use the git root instead.
    +        local compiler_config = vim.fs.joinpath(default, "../src/bootstrap/defaults/config.compiler.toml")
    +        if vim.fs.basename(default) == "library" and vim.uv.fs_stat(compiler_config) then
    +            return vim.fs.dirname(default)
    +        end
    +        return default
    +    end,
    +    on_init = function(client)
    +        local path = client.workspace_folders[1].name
    +        local config = vim.fs.joinpath(path, "src/etc/rust_analyzer_zed.json")
    +        if vim.uv.fs_stat(config) then
    +            -- load rust-lang/rust settings
    +            local file = io.open(config)
    +            local json = vim.json.decode(file:read("*a"))
    +            client.config.settings["rust-analyzer"] = expand_config_variables(json.lsp["rust-analyzer"].initialization_options)
    +            client.notify("workspace/didChangeConfiguration", { settings = client.config.settings })
    +        end
    +        return true
    +    end
    +}
    +
    +

    If you would like to use the build task that is described above, you may either +make your own command in your config, or you can install a plugin such as +overseer.nvim that can read +VSCode's task.json +files, +and follow the same instructions as above.

    +

    Emacs

    +

    Emacs provides support for rust-analyzer with project-local configuration +through Eglot. +Steps for setting up Eglot with rust-analyzer can be found +here. +Having set up Emacs & Eglot for Rust development in general, you can run +./x setup editor and select emacs, which will prompt you to create +.dir-locals.el with the recommended configuration for Eglot. +The recommended settings live at src/etc/rust_analyzer_eglot.el. +For more information on project-specific Eglot configuration, consult the +manual.

    +

    Helix

    +

    Helix comes with built-in LSP and rust-analyzer support. +It can be configured through languages.toml, as described +here. +You can run ./x setup editor and select helix, which will prompt you to +create languages.toml with the recommended configuration for Helix. The +recommended settings live at src/etc/rust_analyzer_helix.toml.

    +

    Zed

    +

    Zed comes with built-in LSP and rust-analyzer support. +It can be configured through .zed/settings.json, as described +here. Selecting zed +in ./x setup editor will prompt you to create a .zed/settings.json +file which will configure Zed with the recommended configuration. The +recommended rust-analyzer settings live +at src/etc/rust_analyzer_zed.json.

    +

    Check, check, and check again

    +

    When doing simple refactoring, it can be useful to run ./x check +continuously. If you set up rust-analyzer as described above, this will be +done for you every time you save a file. Here you are just checking that the +compiler can build, but often that is all you need (e.g., when renaming a +method). You can then run ./x build when you actually need to run tests.

    +

    In fact, it is sometimes useful to put off tests even when you are not 100% sure +the code will work. You can then keep building up refactoring commits and only +run the tests at some later time. You can then use git bisect to track down +precisely which commit caused the problem. A nice side-effect of this style +is that you are left with a fairly fine-grained set of commits at the end, all +of which build and pass tests. This often helps reviewing.

    +

    x suggest

    +

    The x suggest subcommand suggests (and runs) a subset of the extensive +rust-lang/rust tests based on files you have changed. This is especially +useful for new contributors who have not mastered the arcane x flags yet and +more experienced contributors as a shorthand for reducing mental effort. In all +cases it is useful not to run the full tests (which can take on the order of +tens of minutes) and just run a subset which are relevant to your changes. For +example, running tidy and linkchecker is useful when editing Markdown files, +whereas UI tests are much less likely to be helpful. While x suggest is a +useful tool, it does not guarantee perfect coverage (just as PR CI isn't a +substitute for bors). See the dedicated chapter for +more information and contribution instructions.

    +

    Please note that x suggest is in a beta state currently and the tests that it +will suggest are limited.

    +

    Configuring rustup to use nightly

    +

    Some parts of the bootstrap process uses pinned, nightly versions of tools like +rustfmt. To make things like cargo fmt work correctly in your repo, run

    +
    cd <path to rustc repo>
    +rustup override set nightly
    +
    +

    after installing a nightly toolchain with rustup. Don't forget to do this +for all directories you have setup a worktree for. You may need to use the +pinned nightly version from src/stage0, but often the normal nightly channel +will work.

    +

    Note see the section on vscode for how to configure it with this real +rustfmt x uses, and the section on rustup for how to setup rustup +toolchain for your bootstrapped compiler

    +

    Note This does not allow you to build rustc with cargo directly. You +still have to use x to work on the compiler or standard library, this just +lets you use cargo fmt.

    +

    Faster Builds with CI-rustc

    +

    If you are not working on the compiler, you often don't need to build the compiler tree. +For example, you can skip building the compiler and only build the library tree or the +tools under src/tools. To achieve that, you have to enable this by setting the download-rustc +option in your configuration. This tells bootstrap to use the latest nightly compiler for stage > 0 +steps, meaning it will have two precompiled compilers: stage0 compiler and download-rustc compiler +for stage > 0 steps. This way, it will never need to build the in-tree compiler. As a result, your +build time will be significantly reduced by not building the in-tree compiler.

    +

    Using incremental compilation

    +

    You can further enable the --incremental flag to save additional time in +subsequent rebuilds:

    +
    ./x test tests/ui --incremental --test-args issue-1234
    +
    +

    If you don't want to include the flag with every command, you can enable it in +the bootstrap.toml:

    +
    [rust]
    +incremental = true
    +
    +

    Note that incremental compilation will use more disk space than usual. If disk +space is a concern for you, you might want to check the size of the build +directory from time to time.

    +

    Fine-tuning optimizations

    +

    Setting optimize = false makes the compiler too slow for tests. However, to +improve the test cycle, you can disable optimizations selectively only for the +crates you'll have to rebuild +(source). +For example, when working on rustc_mir_build, the rustc_mir_build and +rustc_driver crates take the most time to incrementally rebuild. You could +therefore set the following in the root Cargo.toml:

    +
    [profile.release.package.rustc_mir_build]
    +opt-level = 0
    +[profile.release.package.rustc_driver]
    +opt-level = 0
    +
    +

    Working on multiple branches at the same time

    +

    Working on multiple branches in parallel can be a little annoying, since +building the compiler on one branch will cause the old build and the incremental +compilation cache to be overwritten. One solution would be to have multiple +clones of the repository, but that would mean storing the Git metadata multiple +times, and having to update each clone individually.

    +

    Fortunately, Git has a better solution called worktrees. This lets you create +multiple "working trees", which all share the same Git database. Moreover, +because all of the worktrees share the same object database, if you update a +branch (e.g. master) in any of them, you can use the new commits from any of the +worktrees. One caveat, though, is that submodules do not get shared. They will +still be cloned multiple times.

    +

    Given you are inside the root directory for your Rust repository, you can create +a "linked working tree" in a new "rust2" directory by running the following +command:

    +
    git worktree add ../rust2
    +
    +

    Creating a new worktree for a new branch based on master looks like:

    +
    git worktree add -b my-feature ../rust2 master
    +
    +

    You can then use that rust2 folder as a separate workspace for modifying and +building rustc!

    +

    Working with nix

    +

    Several nix configurations are defined in src/tools/nix-dev-shell.

    +

    If you're using direnv, you can create a symbol link to src/tools/nix-dev-shell/envrc-flake or src/tools/nix-dev-shell/envrc-shell

    +
    ln -s ./src/tools/nix-dev-shell/envrc-flake ./.envrc # Use flake
    +
    +

    or

    +
    ln -s ./src/tools/nix-dev-shell/envrc-shell ./.envrc # Use nix-shell
    +
    +

    Note

    +

    Note that when using nix on a not-NixOS distribution, it may be necessary to set +patch-binaries-for-nix = true in bootstrap.toml. Bootstrap tries to detect +whether it's running in nix and enable patching automatically, but this +detection can have false negatives.

    +

    You can also use your nix shell to manage bootstrap.toml:

    +
    let
    +  config = pkgs.writeText "rustc-config" ''
    +    # Your bootstrap.toml content goes here
    +  ''
    +pkgs.mkShell {
    +  /* ... */
    +  # This environment variable tells bootstrap where our bootstrap.toml is.
    +  RUST_BOOTSTRAP_CONFIG = config;
    +}
    +
    +

    Shell Completions

    +

    If you use Bash, Zsh, Fish or PowerShell, you can find automatically-generated shell +completion scripts for x.py in +src/etc/completions.

    +

    You can use source ./src/etc/completions/x.py.<extension> to load completions +for your shell of choice, or & .\src\etc\completions\x.py.ps1 for PowerShell. +Adding this to your shell's startup script (e.g. .bashrc) will automatically +load this completion.

    +

    Build distribution artifacts

    +

    You might want to build and package up the compiler for distribution. +You’ll want to run this command to do it:

    +
    ./x dist
    +
    +

    Install from source

    +

    You might want to prefer installing Rust (and tools configured in your configuration) +by building from source. If so, you want to run this command:

    +
    ./x install
    +
    +

    Note: If you are testing out a modification to a compiler, you might +want to build the compiler (with ./x build) then create a toolchain as +discussed in here.

    +

    For example, if the toolchain you created is called "foo", you would then +invoke it with rustc +foo ... (where ... represents the rest of the arguments).

    +

    Instead of installing Rust (and tools in your config file) globally, you can set DESTDIR +environment variable to change the installation path. If you want to set installation paths +more dynamically, you should prefer install options in your config file to achieve that.

    +

    Building documentation

    +

    This chapter describes how to build documentation of toolchain components, +like the standard library (std) or the compiler (rustc).

    +
      +
    • +

      Document everything

      +

      This uses rustdoc from the beta toolchain, +so will produce (slightly) different output to stage 1 rustdoc, +as rustdoc is under active development:

      +
      ./x doc
      +
      +

      If you want to be sure the documentation looks the same as on CI:

      +
      ./x doc --stage 1
      +
      +

      This ensures that (current) rustdoc gets built, +then that is used to document the components.

      +
    • +
    • +

      Much like running individual tests or building specific components, +you can build just the documentation you want:

      +
      ./x doc src/doc/book
      +./x doc src/doc/nomicon
      +./x doc compiler library
      +
      +

      See the nightly docs index page for a full list of books.

      +
    • +
    • +

      Document internal rustc items

      +

      Compiler documentation is not built by default. +To create it by default with x doc, modify bootstrap.toml:

      +
      [build]
      +compiler-docs = true
      +
      +

      Note that when enabled, +documentation for internal compiler items will also be built.

      +

      NOTE: The documentation for the compiler is found at this link.

      +
    • +
    +

    Rustdoc overview

    +

    rustdoc lives in-tree with the +compiler and standard library. This chapter is about how it works. +For information about Rustdoc's features and how to use them, see +the Rustdoc book. +For more details about how rustdoc works, see the +"Rustdoc internals" chapter.

    + +

    rustdoc uses rustc internals (and, of course, the standard library), so you +will have to build the compiler and std once before you can build rustdoc.

    +

    Rustdoc is implemented entirely within the crate librustdoc. It runs +the compiler up to the point where we have an internal representation of a +crate (HIR) and the ability to run some queries about the types of items. HIR +and queries are discussed in the linked chapters.

    +

    librustdoc performs two major steps after that to render a set of +documentation:

    +
      +
    • "Clean" the AST into a form that's more suited to creating documentation (and +slightly more resistant to churn in the compiler).
    • +
    • Use this cleaned AST to render a crate's documentation, one page at a time.
    • +
    +

    Naturally, there's more than just this, and those descriptions simplify out +lots of details, but that's the high-level overview.

    +

    (Side note: librustdoc is a library crate! The rustdoc binary is created +using the project in src/tools/rustdoc. Note that literally all that +does is call the main() that's in this crate's lib.rs, though.)

    +

    Cheat sheet

    +
      +
    • Run ./x setup tools before getting started. This will configure x +with nice settings for developing rustdoc and other tools, including +downloading a copy of rustc rather than building it.
    • +
    • Use ./x check rustdoc to quickly check for compile errors.
    • +
    • Use ./x build library rustdoc to make a usable +rustdoc you can run on other projects. +
        +
      • Add library/test to be able to use rustdoc --test.
      • +
      • Run rustup toolchain link stage2 build/host/stage2 to add a +custom toolchain called stage2 to your rustup environment. After +running that, cargo +stage2 doc in any directory will build with +your locally-compiled rustdoc.
      • +
      +
    • +
    • Use ./x doc library to use this rustdoc to generate the +standard library docs. +
        +
      • The completed docs will be available in build/host/doc (under core, alloc, and std).
      • +
      • If you want to copy those docs to a webserver, copy all of +build/host/doc, since that's where the CSS, JS, fonts, and landing +page are.
      • +
      • For frontend debugging, disable the rust.docs-minification option in bootstrap.toml.
      • +
      +
    • +
    • Use ./x test tests/rustdoc* to run the tests using a stage1 +rustdoc. + +
    • +
    +

    Code structure

    +

    All paths in this section are relative to src/librustdoc/ in the rust-lang/rust repository.

    +
      +
    • Most of the HTML printing code is in html/format.rs and html/render/mod.rs. +It's in a bunch of functions returning impl std::fmt::Display.
    • +
    • The data types that get rendered by the functions mentioned above are defined in clean/types.rs. +The functions responsible for creating them from the HIR and the rustc_middle::ty IR +live in clean/mod.rs.
    • +
    • The bits specific to using rustdoc as a test harness are in +doctest.rs.
    • +
    • The Markdown renderer is loaded up in html/markdown.rs, including functions +for extracting doctests from a given block of Markdown.
    • +
    • Frontend CSS and JavaScript are stored in html/static/. +
        +
      • Re. JavaScript, type annotations are written using TypeScript-flavored JSDoc +comments and an external .d.ts file. +This way, the code itself remains plain, valid JavaScript. +We only use tsc as a linter.
      • +
      +
    • +
    +

    Tests

    +

    rustdoc's integration tests are split across several test suites. +See Rustdoc tests suites for more details.

    +

    Constraints

    +

    We try to make rustdoc work reasonably well with JavaScript disabled, and when +browsing local files. We support +these browsers.

    +

    Supporting local files (file:/// URLs) brings some surprising restrictions. +Certain browser features that require secure origins, like localStorage and +Service Workers, don't work reliably. We can still use such features but we +should make sure pages are still usable without them.

    +

    Rustdoc does not type-check function bodies. +This works by overriding the built-in queries for typeck, +by silencing name resolution errors, and by not resolving opaque types. +This comes with several caveats: in particular, rustdoc cannot run any parts of the compiler that +require type-checking bodies; for example it cannot generate .rlib files or run most lints. +We want to move away from this model eventually, but we need some alternative for +the people using it; see various +previous zulip discussion. +For examples of code that breaks if this hack is removed, see +tests/rustdoc-ui/error-in-impl-trait.

    +

    Multiple runs, same output directory

    +

    Rustdoc can be run multiple times for varying inputs, with its output set to the +same directory. That's how cargo produces documentation for dependencies of the +current crate. It can also be done manually if a user wants a big +documentation bundle with all of the docs they care about.

    +

    HTML is generated independently for each crate, but there is some cross-crate +information that we update as we add crates to the output directory:

    +
      +
    • crates<SUFFIX>.js holds a list of all crates in the output directory.
    • +
    • search-index<SUFFIX>.js holds a list of all searchable items.
    • +
    • For each trait, there is a file under implementors/.../trait.TraitName.js +containing a list of implementors of that trait. The implementors may be in +different crates than the trait, and the JS file is updated as we discover +new ones.
    • +
    +

    Use cases

    +

    There are a few major use cases for rustdoc that you should keep in mind when +working on it:

    +

    Standard library docs

    +

    These are published at https://doc.rust-lang.org/std as part of the Rust release +process. Stable releases are also uploaded to specific versioned URLs like +https://doc.rust-lang.org/1.57.0/std/. Beta and nightly docs are published to +https://doc.rust-lang.org/beta/std/ and https://doc.rust-lang.org/nightly/std/. +The docs are uploaded with the promote-release +tool and served from S3 with +CloudFront.

    +

    The standard library docs contain five crates: alloc, core, proc_macro, std, and +test.

    +

    docs.rs

    +

    When crates are published to crates.io, docs.rs automatically builds +and publishes their documentation, for instance at +https://docs.rs/serde/latest/serde/. It always builds with the current nightly +rustdoc, so any changes you land in rustdoc are "insta-stable" in that they will +have an immediate public effect on docs.rs. Old documentation is not rebuilt, so +you will see some variation in UI when browsing old releases in docs.rs. Crate +authors can request rebuilds, which will be run with the latest rustdoc.

    +

    Docs.rs performs some transformations on rustdoc's output in order to save +storage and display a navigation bar at the top. In particular, certain static +files, like main.js and rustdoc.css, may be shared across multiple invocations +of the same version of rustdoc. Others, like crates.js and sidebar-items.js, are +different for different invocations. Still others, like fonts, will never +change. These categories are distinguished using the SharedResource enum in +src/librustdoc/html/render/write_shared.rs

    +

    Documentation on docs.rs is always generated for a single crate at a time, so +the search and sidebar functionality don't include dependencies of the current +crate.

    +

    Locally generated docs

    +

    Crate authors can run cargo doc --open in crates they have checked +out locally to see the docs. This is useful to check that the docs they +are writing are useful and display correctly. It can also be useful for +people to view documentation on crates they aren't authors of, but want to +use. In both cases, people may use --document-private-items Cargo flag to +see private methods, fields, and so on, which are normally not displayed.

    +

    By default cargo doc will generate documentation for a crate and all of its +dependencies. That can result in a very large documentation bundle, with a large +(and slow) search corpus. The Cargo flag --no-deps inhibits that behavior and +generates docs for just the crate.

    +

    Self-hosted project docs

    +

    Some projects like to host their own documentation. For example: +https://docs.serde.rs/. This is easy to do by locally generating docs, and +simply copying them to a web server. Rustdoc's HTML output can be extensively +customized by flags. Users can add a theme, set the default theme, and inject +arbitrary HTML. See rustdoc --help for details.

    +

    Adding a new target

    +

    These are a set of steps to add support for a new target. There are +numerous end states and paths to get there, so not all sections may be +relevant to your desired goal.

    +

    See also the associated documentation in the target tier policy.

    + +

    Specifying a new LLVM

    +

    For very new targets, you may need to use a different fork of LLVM +than what is currently shipped with Rust. In that case, navigate to +the src/llvm-project git submodule (you might need to run ./x check at least once so the submodule is updated), check out the +appropriate commit for your fork, then commit that new submodule +reference in the main Rust repository.

    +

    An example would be:

    +
    cd src/llvm-project
    +git remote add my-target-llvm some-llvm-repository
    +git checkout my-target-llvm/my-branch
    +cd ..
    +git add llvm-project
    +git commit -m 'Use my custom LLVM'
    +
    +

    Using pre-built LLVM

    +

    If you have a local LLVM checkout that is already built, you may be +able to configure Rust to treat your build as the system LLVM to avoid +redundant builds.

    +

    You can tell Rust to use a pre-built version of LLVM using the target section +of bootstrap.toml:

    +
    [target.x86_64-unknown-linux-gnu]
    +llvm-config = "/path/to/llvm/llvm-7.0.1/bin/llvm-config"
    +
    +

    If you are attempting to use a system LLVM, we have observed the following paths +before, though they may be different from your system:

    +
      +
    • /usr/bin/llvm-config-8
    • +
    • /usr/lib/llvm-8/bin/llvm-config
    • +
    +

    Note that you need to have the LLVM FileCheck tool installed, which is used +for codegen tests. This tool is normally built with LLVM, but if you use your +own preinstalled LLVM, you will need to provide FileCheck in some other way. +On Debian-based systems, you can install the llvm-N-tools package (where N +is the LLVM version number, e.g. llvm-8-tools). Alternately, you can specify +the path to FileCheck with the llvm-filecheck config item in bootstrap.toml +or you can disable codegen test with the codegen-tests item in bootstrap.toml.

    +

    Creating a target specification

    +

    You should start with a target JSON file. You can see the specification +for an existing target using --print target-spec-json:

    +
    rustc -Z unstable-options --target=wasm32-unknown-unknown --print target-spec-json
    +
    +

    Save that JSON to a file and modify it as appropriate for your target.

    +

    Adding a target specification

    +

    Once you have filled out a JSON specification and been able to compile +somewhat successfully, you can copy the specification into the +compiler itself.

    +

    You will need to add a line to the big table inside of the +supported_targets macro in the rustc_target::spec module. You +will then add a corresponding file for your new target containing a +target function.

    +

    Look for existing targets to use as examples.

    +

    After adding your target to the rustc_target crate you may want to add +core, std, ... with support for your new target. In that case you will +probably need access to some target_* cfg. Unfortunately when building with +stage0 (a precompiled compiler), you'll get an error that the target cfg is +unexpected because stage0 doesn't know about the new target specification and +we pass --check-cfg in order to tell it to check.

    +

    To fix the errors you will need to manually add the unexpected value to the +different Cargo.toml in library/{std,alloc,core}/Cargo.toml. Here is an +example for adding NEW_TARGET_ARCH as target_arch:

    +

    library/std/Cargo.toml:

    +
      [lints.rust.unexpected_cfgs]
    +  level = "warn"
    +  check-cfg = [
    +      'cfg(bootstrap)',
    +-      'cfg(target_arch, values("xtensa"))',
    ++      # #[cfg(bootstrap)] NEW_TARGET_ARCH
    ++      'cfg(target_arch, values("xtensa", "NEW_TARGET_ARCH"))',
    +
    +

    To use this target in bootstrap, we need to explicitly add the target triple to the STAGE0_MISSING_TARGETS +list in src/bootstrap/src/core/sanity.rs. This is necessary because the default compiler bootstrap uses does +not recognize the new target we just added. Therefore, it should be added to STAGE0_MISSING_TARGETS so that the +bootstrap is aware that this target is not yet supported by the stage0 compiler.

    +
    const STAGE0_MISSING_TARGETS: &[&str] = &[
    ++   "NEW_TARGET_TRIPLE"
    +];
    +
    +

    Patching crates

    +

    You may need to make changes to crates that the compiler depends on, +such as libc or cc. If so, you can use Cargo's +[patch] ability. For example, if you want to use an +unreleased version of libc, you can add it to the top-level +Cargo.toml file:

    +
    diff --git a/Cargo.toml b/Cargo.toml
    +index 1e83f05e0ca..4d0172071c1 100644
    +--- a/Cargo.toml
    ++++ b/Cargo.toml
    +@@ -113,6 +113,8 @@ cargo-util = { path = "src/tools/cargo/crates/cargo-util" }
    + [patch.crates-io]
    ++libc = { git = "https://github.com/rust-lang/libc", rev = "0bf7ce340699dcbacabdf5f16a242d2219a49ee0" }
    +
    + # See comments in `src/tools/rustc-workspace-hack/README.md` for what's going on
    + # here
    + rustc-workspace-hack = { path = 'src/tools/rustc-workspace-hack' }
    +
    +

    After this, run cargo update -p libc to update the lockfiles.

    +

    Beware that if you patch to a local path dependency, this will enable +warnings for that dependency. Some dependencies are not warning-free, and due +to the deny-warnings setting in bootstrap.toml, the build may suddenly start +to fail. +To work around warnings, you may want to:

    +
      +
    • Modify the dependency to remove the warnings
    • +
    • Or for local development purposes, suppress the warnings by setting deny-warnings = false in bootstrap.toml.
    • +
    +
    # bootstrap.toml
    +[rust]
    +deny-warnings = false
    +
    +

    Cross-compiling

    +

    Once you have a target specification in JSON and in the code, you can +cross-compile rustc:

    +
    DESTDIR=/path/to/install/in \
    +./x install -i --stage 1 --host aarch64-apple-darwin.json --target aarch64-apple-darwin \
    +compiler/rustc library/std
    +
    +

    If your target specification is already available in the bootstrap +compiler, you can use it instead of the JSON file for both arguments.

    +

    Promoting a target from tier 2 (target) to tier 2 (host)

    +

    There are two levels of tier 2 targets: +a) Targets that are only cross-compiled (rustup target add) +b) Targets that have a native toolchain (rustup toolchain install)

    +

    For an example of promoting a target from cross-compiled to native, +see #75914.

    +

    Optimized build of the compiler

    + +

    There are multiple additional build configuration options and techniques that can be used to compile a +build of rustc that is as optimized as possible (for example when building rustc for a Linux +distribution). The status of these configuration options for various Rust targets is tracked here. +This page describes how you can use these approaches when building rustc yourself.

    + +

    Link-time optimization is a powerful compiler technique that can increase program performance. To +enable (Thin-)LTO when building rustc, set the rust.lto config option to "thin" +in bootstrap.toml:

    +
    [rust]
    +lto = "thin"
    +
    +
    +

    Note that LTO for rustc is currently supported and tested only for +the x86_64-unknown-linux-gnu target. Other targets may work, but no guarantees are provided. +Notably, LTO-optimized rustc currently produces miscompilations on Windows.

    +
    +

    Enabling LTO on Linux has produced speed-ups by up to 10%.

    +

    Memory allocator

    +

    Using a different memory allocator for rustc can provide significant performance benefits. If you +want to enable the jemalloc allocator, you can set the rust.jemalloc option to true +in bootstrap.toml:

    +
    [rust]
    +jemalloc = true
    +
    +
    +

    Note that this option is currently only supported for Linux and macOS targets.

    +
    +

    Codegen units

    +

    Reducing the amount of codegen units per rustc crate can produce a faster build of the compiler. +You can modify the number of codegen units for rustc and libstd in bootstrap.toml with the +following options:

    +
    [rust]
    +codegen-units = 1
    +codegen-units-std = 1
    +
    +

    Instruction set

    +

    By default, rustc is compiled for a generic (and conservative) instruction set architecture +(depending on the selected target), to make it support as many CPUs as possible. If you want to +compile rustc for a specific instruction set architecture, you can set the target_cpu compiler +option in RUSTFLAGS:

    +
    RUSTFLAGS="-C target_cpu=x86-64-v3" ./x build ...
    +
    +

    If you also want to compile LLVM for a specific instruction set, you can set llvm flags +in bootstrap.toml:

    +
    [llvm]
    +cxxflags = "-march=x86-64-v3"
    +cflags = "-march=x86-64-v3"
    +
    +

    Profile-guided optimization

    +

    Applying profile-guided optimizations (or more generally, feedback-directed optimizations) can +produce a large increase to rustc performance, by up to 15% (1, 2). However, these techniques +are not simply enabled by a configuration option, but rather they require a complex build workflow +that compiles rustc multiple times and profiles it on selected benchmarks.

    +

    There is a tool called opt-dist that is used to optimize rustc with PGO (profile-guided +optimizations) and BOLT (a post-link binary optimizer) for builds distributed to end users. You +can examine the tool, which is located in src/tools/opt-dist, and build a custom PGO build +workflow based on it, or try to use it directly. Note that the tool is currently quite hardcoded to +the way we use it in Rust's continuous integration workflows, and it might require some custom +changes to make it work in a different environment.

    +

    To use the tool, you will need to provide some external dependencies:

    +
      +
    • A Python3 interpreter (for executing x.py).
    • +
    • Compiled LLVM toolchain, with the llvm-profdata binary. Optionally, if you want to use BOLT, +the llvm-bolt and +merge-fdata binaries have to be available in the toolchain.
    • +
    +

    These dependencies are provided to opt-dist by an implementation of the Environment struct. +It specifies directories where will the PGO/BOLT pipeline take place, and also external dependencies +like Python or LLVM.

    +

    Here is an example of how can opt-dist be used locally (outside of CI):

    +
      +
    1. Enable metrics in your bootstrap.toml file, because opt-dist expects it to be enabled: +
      [build]
      +metrics = true
      +
      +
    2. +
    3. Build the tool with the following command: +
      ./x build tools/opt-dist
      +
      +
    4. +
    5. Run the tool with the local mode and provide necessary parameters: +
      ./build/host/stage0-tools-bin/opt-dist local \
      +  --target-triple <target> \ # select target, e.g. "x86_64-unknown-linux-gnu"
      +  --checkout-dir <path>    \ # path to rust checkout, e.g. "."
      +  --llvm-dir <path>        \ # path to built LLVM toolchain, e.g. "/foo/bar/llvm/install"
      +  -- python3 x.py dist       # pass the actual build command
      +
      +You can run --help to see further parameters that you can modify.
    6. +
    +
    +

    Note: if you want to run the actual CI pipeline, instead of running opt-dist locally, +you can execute cargo run --manifest-path src/ci/citool/Cargo.toml run-local dist-x86_64-linux.

    +
    +

    Testing the compiler

    + +

    The Rust project runs a wide variety of different tests, orchestrated by the +build system (./x test). This section gives a brief overview of the different +testing tools. Subsequent chapters dive into running tests and +adding new tests.

    +

    Kinds of tests

    +

    There are several kinds of tests to exercise things in the Rust distribution. +Almost all of them are driven by ./x test, with some exceptions noted below.

    +

    Compiletest

    +

    The main test harness for testing the compiler itself is a tool called +compiletest.

    +

    compiletest supports running different styles of tests, organized into test +suites. A test mode may provide common presets/behavior for a set of test +suites. compiletest-supported tests are located in the tests directory.

    +

    The Compiletest chapter goes into detail on how to use this tool.

    +
    +

    Example: ./x test tests/ui

    +
    +

    Package tests

    +

    The standard library and many of the compiler packages include typical Rust +#[test] unit tests, integration tests, and documentation tests. You can pass a +path to ./x test for almost any package in the library/ or compiler/ +directory, and x will essentially run cargo test on that package.

    +

    Examples:

    +
    + + + +
    CommandDescription
    ./x test library/stdRuns tests on std only
    ./x test library/coreRuns tests on core only
    ./x test compiler/rustc_data_structuresRuns tests on rustc_data_structures
    +
    +

    The standard library relies very heavily on documentation tests to cover its +functionality. However, unit tests and integration tests can also be used as +needed. Almost all of the compiler packages have doctests disabled.

    +

    All standard library and compiler unit tests are placed in separate tests file +(which is enforced in tidy). This ensures that when the test +file is changed, the crate does not need to be recompiled. For example:

    +
    #[cfg(test)]
    +mod tests;
    +

    If it wasn't done this way, and you were working on something like core, that +would require recompiling the entire standard library, and the entirety of +rustc.

    +

    ./x test includes some CLI options for controlling the behavior with these +package tests:

    +
      +
    • --doc — Only runs documentation tests in the package.
    • +
    • --no-doc — Run all tests except documentation tests.
    • +
    +

    Tidy

    +

    Tidy is a custom tool used for validating source code style and formatting +conventions, such as rejecting long lines. There is more information in the +section on coding conventions.

    +
    +

    Examples: ./x test tidy

    +
    +

    Formatting

    +

    Rustfmt is integrated with the build system to enforce uniform style across the +compiler. The formatting check is automatically run by the Tidy tool mentioned +above.

    +

    Examples:

    +
    + + + +
    CommandDescription
    ./x fmt --checkChecks formatting and exits with an error if formatting is needed.
    ./x fmtRuns rustfmt across the entire codebase.
    ./x test tidy --blessFirst runs rustfmt to format the codebase, then runs tidy checks.
    +
    +

    Book documentation tests

    +

    All of the books that are published have their own tests, primarily for +validating that the Rust code examples pass. Under the hood, these are +essentially using rustdoc --test on the markdown files. The tests can be run +by passing a path to a book to ./x test.

    +
    +

    Example: ./x test src/doc/book

    +
    + +

    Links across all documentation is validated with a link checker tool, +and it can be invoked so:

    +
    ./x test linkchecker
    +
    +

    This requires building all of the documentation, which might take a while.

    +

    Dist check

    +

    distcheck verifies that the source distribution tarball created by the build +system will unpack, build, and run all tests.

    +
    +

    Example: ./x test distcheck

    +
    +

    Tool tests

    +

    Packages that are included with Rust have all of their tests run as well. This +includes things such as cargo, clippy, rustfmt, miri, bootstrap (testing the +Rust build system itself), etc.

    +

    Most of the tools are located in the src/tools directory. To run the tool's +tests, just pass its path to ./x test.

    +
    +

    Example: ./x test src/tools/cargo

    +
    +

    Usually these tools involve running cargo test within the tool's directory.

    +

    If you want to run only a specified set of tests, append --test-args FILTER_NAME to the command.

    +
    +

    Example: ./x test src/tools/miri --test-args padding

    +
    +

    In CI, some tools are allowed to fail. Failures send notifications to the +corresponding teams, and is tracked on the toolstate website. More information +can be found in the toolstate documentation.

    +

    Ecosystem testing

    +

    Rust tests integration with real-world code to catch regressions and make +informed decisions about the evolution of the language. There are several kinds +of ecosystem tests, including Crater. See the Ecosystem testing +chapter for more details.

    +

    Performance testing

    +

    A separate infrastructure is used for testing and tracking performance of the +compiler. See the Performance testing chapter for more details.

    +

    Codegen backend testing

    +

    See Codegen backend testing.

    +

    Miscellaneous information

    +

    There are some other useful testing-related info at Misc info.

    +

    Further reading

    +

    The following blog posts may also be of interest:

    + +

    Running tests

    + +

    You can run the entire test collection using x. But note that running the +entire test collection is almost never what you want to do during local +development because it takes a really long time. For local development, see the +subsection after on how to run a subset of tests.

    +
    +

    Running plain ./x test will build the stage 1 compiler and then run the whole +test suite. This not only include tests/, but also library/, compiler/, +src/tools/ package tests and more.

    +

    You usually only want to run a subset of the test suites (or even a smaller set +of tests than that) which you expect will exercise your changes. PR CI exercises +a subset of test collections, and merge queue CI will exercise all of the test +collection.

    +
    +
    ./x test
    +
    +

    The test results are cached and previously successful tests are ignored during +testing. The stdout/stderr contents as well as a timestamp file for every test +can be found under build/<target-tuple>/test/ for the given +<target-tuple>. To force-rerun a test (e.g. in case the test runner fails to +notice a change) you can use the --force-rerun CLI option.

    +
    +

    Note on requirements of external dependencies

    +

    Some test suites may require external dependencies. This is especially true of +debuginfo tests. Some debuginfo tests require a Python-enabled gdb. You can +test if your gdb install supports Python by using the python command from +within gdb. Once invoked you can type some Python code (e.g. print("hi")) +followed by return and then CTRL+D to execute it. If you are building gdb +from source, you will need to configure with +--with-python=<path-to-python-binary>.

    +
    +

    Running a subset of the test suites

    +

    When working on a specific PR, you will usually want to run a smaller set of +tests. For example, a good "smoke test" that can be used after modifying rustc +to see if things are generally working correctly would be to exercise the ui +test suite (tests/ui):

    +
    ./x test tests/ui
    +
    +

    Of course, the choice of test suites is +somewhat arbitrary, and may not suit the task you are doing. For example, if you +are hacking on debuginfo, you may be better off with the debuginfo test suite:

    +
    ./x test tests/debuginfo
    +
    +

    If you only need to test a specific subdirectory of tests for any given test +suite, you can pass that directory as a filter to ./x test:

    +
    ./x test tests/ui/const-generics
    +
    +
    +

    Note for MSYS2

    +

    On MSYS2 the paths seem to be strange and ./x test neither recognizes +tests/ui/const-generics nor tests\ui\const-generics. In that case, you can +workaround it by using e.g. ./x test ui --test-args="tests/ui/const-generics".

    +
    +

    Likewise, you can test a single file by passing its path:

    +
    ./x test tests/ui/const-generics/const-test.rs
    +
    +

    x doesn't support running a single tool test by passing its path yet. You'll +have to use the --test-args argument as described +below.

    +
    ./x test src/tools/miri --test-args tests/fail/uninit/padding-enum.rs
    +
    +

    Run only the tidy script

    +
    ./x test tidy
    +
    +

    Run tests on the standard library

    +
    ./x test --stage 0 library/std
    +
    +

    Note that this only runs tests on std; if you want to test core or other +crates, you have to specify those explicitly.

    +

    Run the tidy script and tests on the standard library

    +
    ./x test --stage 0 tidy library/std
    +
    +

    Run tests on the standard library using a stage 1 compiler

    +
    ./x test --stage 1 library/std
    +
    +

    By listing which test suites you want to run, +you avoid having to run tests for components you did not change at all.

    +
    +

    Note that bors only runs the tests with the full stage 2 build; therefore, while +the tests usually work fine with stage 1, there are some limitations.

    +
    +

    Run all tests using a stage 2 compiler

    +
    ./x test --stage 2
    +
    +
    +You almost never need to do this; CI will run these tests for you. +
    +

    Run unit tests on the compiler/library

    +

    You may want to run unit tests on a specific file with following:

    +
    ./x test compiler/rustc_data_structures/src/thin_vec/tests.rs
    +
    +

    But unfortunately, it's impossible. You should invoke the following instead:

    +
    ./x test compiler/rustc_data_structures/ --test-args thin_vec
    +
    +

    Running an individual test

    +

    Another common thing that people want to do is to run an individual test, +often the test they are trying to fix. As mentioned earlier, you may pass the +full file path to achieve this, or alternatively one may invoke x with the +--test-args option:

    +
    ./x test tests/ui --test-args issue-1234
    +
    +

    Under the hood, the test runner invokes the standard Rust test runner (the same +one you get with #[test]), so this command would wind up filtering for tests +that include "issue-1234" in the name. Thus, --test-args is a good way to run +a collection of related tests.

    +

    Passing arguments to rustc when running tests

    +

    It can sometimes be useful to run some tests with specific compiler arguments, +without using RUSTFLAGS (during development of unstable features, with -Z +flags, for example).

    +

    This can be done with ./x test's --compiletest-rustc-args option, to pass +additional arguments to the compiler when building the tests.

    +

    Editing and updating the reference files

    +

    If you have changed the compiler's output intentionally, or you are making a new +test, you can pass --bless to the test subcommand.

    +

    As an example, +if some tests in tests/ui are failing, you can run this command:

    +
    ./x test tests/ui --bless
    +
    +

    It automatically adjusts the .stderr, .stdout, or .fixed files of all test/ui tests. +Of course you can also target just specific tests with the --test-args your_test_name flag, +just like when running the tests without the --bless flag.

    +

    Configuring test running

    +

    There are a few options for running tests:

    +
      +
    • bootstrap.toml has the rust.verbose-tests option. If false, each test will +print a single dot (the default). If true, the name of every test will be +printed. This is equivalent to the --quiet option in the Rust test +harness.
    • +
    • The environment variable RUST_TEST_THREADS can be set to the number of +concurrent threads to use for testing.
    • +
    +

    Passing --pass $mode

    +

    Pass UI tests now have three modes, check-pass, build-pass and run-pass. +When --pass $mode is passed, these tests will be forced to run under the given +$mode unless the directive //@ ignore-pass exists in the test file. For +example, you can run all the tests in tests/ui as check-pass:

    +
    ./x test tests/ui --pass check
    +
    +

    By passing --pass $mode, you can reduce the testing time. For each mode, +please see Controlling pass/fail +expectations.

    +

    Running tests with different "compare modes"

    +

    UI tests may have different output depending on certain "modes" that the +compiler is in. For example, when using the Polonius mode, a test foo.rs will +first look for expected output in foo.polonius.stderr, falling back to the +usual foo.stderr if not found. The following will run the UI test suite in +Polonius mode:

    +
    ./x test tests/ui --compare-mode=polonius
    +
    +

    See Compare modes for more details.

    +

    Running tests manually

    +

    Sometimes it's easier and faster to just run the test by hand. Most tests are +just .rs files, so after creating a rustup +toolchain, you +can do something like:

    +
    rustc +stage1 tests/ui/issue-1234.rs
    +
    +

    This is much faster, but doesn't always work. For example, some tests include +directives that specify specific compiler flags, or which rely on other crates, +and they may not run the same without those options.

    +

    Running tests on a remote machine

    +

    Tests may be run on a remote machine (e.g. to test builds for a different +architecture). This is done using remote-test-client on the build machine to +send test programs to remote-test-server running on the remote machine. +remote-test-server executes the test programs and sends the results back to +the build machine. remote-test-server provides unauthenticated remote code +execution so be careful where it is used.

    +

    To do this, first build remote-test-server for the remote machine, e.g. for +RISC-V

    +
    ./x build src/tools/remote-test-server --target riscv64gc-unknown-linux-gnu
    +
    +

    The binary will be created at +./build/host/stage2-tools/$TARGET_ARCH/release/remote-test-server. Copy this +over to the remote machine.

    +

    On the remote machine, run the remote-test-server with the --bind 0.0.0.0:12345 flag (and optionally -v for verbose output). Output should look +like this:

    +
    $ ./remote-test-server -v --bind 0.0.0.0:12345
    +starting test server
    +listening on 0.0.0.0:12345!
    +
    +

    Note that binding the server to 0.0.0.0 will allow all hosts able to reach your +machine to execute arbitrary code on your machine. We strongly recommend either +setting up a firewall to block external access to port 12345, or to use a more +restrictive IP address when binding.

    +

    You can test if the remote-test-server is working by connecting to it and +sending ping\n. It should reply pong:

    +
    $ nc $REMOTE_IP 12345
    +ping
    +pong
    +
    +

    To run tests using the remote runner, set the TEST_DEVICE_ADDR environment +variable then use x as usual. For example, to run ui tests for a RISC-V +machine with the IP address 1.2.3.4 use

    +
    export TEST_DEVICE_ADDR="1.2.3.4:12345"
    +./x test tests/ui --target riscv64gc-unknown-linux-gnu
    +
    +

    If remote-test-server was run with the verbose flag, output on the test +machine may look something like

    +
    [...]
    +run "/tmp/work/test1007/a"
    +run "/tmp/work/test1008/a"
    +run "/tmp/work/test1009/a"
    +run "/tmp/work/test1010/a"
    +run "/tmp/work/test1011/a"
    +run "/tmp/work/test1012/a"
    +run "/tmp/work/test1013/a"
    +run "/tmp/work/test1014/a"
    +run "/tmp/work/test1015/a"
    +run "/tmp/work/test1016/a"
    +run "/tmp/work/test1017/a"
    +run "/tmp/work/test1018/a"
    +[...]
    +
    +

    Tests are built on the machine running x not on the remote machine. Tests +which fail to build unexpectedly (or ui tests producing incorrect build +output) may fail without ever running on the remote machine.

    +

    Testing on emulators

    +

    Some platforms are tested via an emulator for architectures that aren't readily +available. For architectures where the standard library is well supported and +the host operating system supports TCP/IP networking, see the above instructions +for testing on a remote machine (in this case the remote machine is emulated).

    +

    There is also a set of tools for orchestrating running the tests within the +emulator. Platforms such as arm-android and arm-unknown-linux-gnueabihf are +set up to automatically run the tests under emulation on GitHub Actions. The +following will take a look at how a target's tests are run under emulation.

    +

    The Docker image for armhf-gnu includes QEMU to emulate the ARM CPU +architecture. Included in the Rust tree are the tools remote-test-client and +remote-test-server which are programs for sending test programs and libraries +to the emulator, and running the tests within the emulator, and reading the +results. The Docker image is set up to launch remote-test-server and the +build tools use remote-test-client to communicate with the server to +coordinate running tests (see src/bootstrap/src/core/build_steps/test.rs).

    +
    +

    TODO

    +
      +
    • Is there any support for using an iOS emulator?
    • +
    • It's also unclear to me how the wasm or asm.js tests are run.
    • +
    +
    +

    Running rustc_codegen_gcc tests

    +

    First thing to know is that it only supports linux x86_64 at the moment. We will +extend its support later on.

    +

    You need to update codegen-backends value in your bootstrap.toml file in the +[rust] section and add "gcc" in the array:

    +
    codegen-backends = ["llvm", "gcc"]
    +
    +

    Then you need to install libgccjit 12. For example with apt:

    +
    apt install libgccjit-12-dev
    +
    +

    Now you can run the following command:

    +
    ./x test compiler/rustc_codegen_gcc/
    +
    +

    If it cannot find the .so library (if you installed it with apt for example), you +need to pass the library file path with LIBRARY_PATH:

    +
    LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/12/ ./x test compiler/rustc_codegen_gcc/
    +
    +

    If you encounter bugs or problems, don't hesitate to open issues on the +rustc_codegen_gcc +repository.

    +

    Testing with Docker

    +

    The src/ci/docker directory includes Docker image definitions for Linux-based jobs executed on GitHub Actions (non-Linux jobs run outside Docker). You can run these jobs on your local development machine, which can be +helpful to test environments different from your local system. You will +need to install Docker on a Linux, Windows, or macOS system (typically Linux +will be much faster than Windows or macOS because the latter use virtual +machines to emulate a Linux environment).

    +

    Jobs running in CI are configured through a set of bash scripts, and it is not always trivial to reproduce their behavior locally. If you want to run a CI job locally in the simplest way possible, you can use a provided helper Python script that tries to replicate what happens on CI as closely as possible:

    +
    python3 src/ci/github-actions/ci.py run-local <job-name>
    +# For example:
    +python3 src/ci/github-actions/ci.py run-local dist-x86_64-linux-alt
    +
    +

    If the above script does not work for you, you would like to have more control of the Docker image execution, or you want to understand what exactly happens during Docker job execution, then continue reading below.

    +

    The run.sh script

    +

    The src/ci/docker/run.sh script is used to build a specific Docker image, run it, +build Rust within the image, and either run tests or prepare a set of archives designed for distribution. The script will mount your local Rust source tree in read-only mode, and an obj directory in read-write mode. All the compiler artifacts will be stored in the obj directory. The shell will start out in the objdirectory. From there, it will execute ../src/ci/run.sh which starts the build as defined by the Docker image.

    +

    You can run src/ci/docker/run.sh <image-name> directly. A few important notes regarding the run.sh script:

    +
      +
    • When executed on CI, the script expects that all submodules are checked out. If some submodule that is accessed by the job is not available, the build will result in an error. You should thus make sure that you have all required submodules checked out locally. You can either do that manually through git, or set submodules = true in your bootstrap.toml and run a command such as x build to let bootstrap download the most important submodules (this might not be enough for the given CI job that you are trying to execute though).
    • +
    • <image-name> corresponds to a single directory located in one of the src/ci/docker/host-* directories. Note that image name does not necessarily correspond to a job name, as some jobs execute the same image, but with different environment variables or Docker build arguments (this is a part of the complexity that makes it difficult to run CI jobs locally).
    • +
    • If you are executing a "dist" job (job beginning with dist-), you should set the DEPLOY=1 environment variable.
    • +
    • If you are executing an "alternative dist" job (job beginning with dist- and ending with -alt), you should set the DEPLOY_ALT=1 environment variable.
    • +
    • Some of the std tests require IPv6 support. Docker on Linux seems to have it +disabled by default. Run the commands in enable-docker-ipv6.sh to enable +IPv6 before creating the container. This only needs to be done once.
    • +
    +

    Interactive mode

    +

    Sometimes, it can be useful to build a specific Docker image, and then run custom commands inside it, so that you can experiment with how the given system behaves. You can do that using an interactive mode, which will +start a bash shell in the container, using src/ci/docker/run.sh --dev <image-name>.

    +

    When inside the Docker container, you can run individual commands to do specific tasks. For +example, you can run ../x test tests/ui to just run UI tests.

    +

    Some additional notes about using the interactive mode:

    +
      +
    • The container will be deleted automatically when you exit the shell, however +the build artifacts persist in the obj directory. If you are switching +between different Docker images, the artifacts from previous environments +stored in the obj directory may confuse the build system. Sometimes you +will need to delete parts or all of the obj directory before building +inside the container.
    • +
    • The container is bare-bones, with only a minimal set of packages. You may +want to install some things like apt install less vim.
    • +
    • You can open multiple shells in the container. First you need the container +name (a short hash), which is displayed in the shell prompt, or you can run +docker container ls outside of the container to list the available +containers. With the container name, run docker exec -it <CONTAINER> /bin/bash where <CONTAINER> is the container name like 4ba195e95cef.
    • +
    +

    The approach described above is a relatively low-level interface for running the Docker images +directly. If you want to run a full CI Linux job locally with Docker, in a way that is as close to CI as possible, you can use the following command:

    +
    cargo run --manifest-path src/ci/citool/Cargo.toml run-local <job-name>
    +# For example:
    +cargo run --manifest-path src/ci/citool/Cargo.toml run-local dist-x86_64-linux-alt
    +
    +

    Testing with CI

    +

    The primary goal of our CI system is to ensure that the master branch of +rust-lang/rust is always in a valid state and passes our test suite.

    +

    From a high-level point of view, when you open a pull request at +rust-lang/rust, the following will happen:

    +
      +
    • A small subset of tests and checks are run after each +push to the PR. This should help catching common errors.
    • +
    • When the PR is approved, the bors bot enqueues the PR into a merge queue.
    • +
    • Once the PR gets to the front of the queue, bors will create a merge commit +and run the full test suite on it. The merge commit either +contains only one specific PR or it can be a "rollup" which +combines multiple PRs together, to save CI costs.
    • +
    • Once the whole test suite finishes, two things can happen. Either CI fails +with an error that needs to be addressed by the developer, or CI succeeds and +the merge commit is then pushed to the master branch.
    • +
    +

    If you want to modify what gets executed on CI, see Modifying CI +jobs.

    +

    CI workflow

    + +

    Our CI is primarily executed on GitHub Actions, with a single workflow defined +in .github/workflows/ci.yml, which contains a bunch of steps that are +unified for all CI jobs that we execute. When a commit is pushed to a +corresponding branch or a PR, the workflow executes the +src/ci/citool crate, which dynamically generates the specific CI +jobs that should be executed. This script uses the jobs.yml file as an +input, which contains a declarative configuration of all our CI jobs.

    +
    +

    Almost all build steps shell out to separate scripts. This keeps the CI fairly +platform independent (i.e., we are not overly reliant on GitHub Actions). +GitHub Actions is only relied on for bootstrapping the CI process and for +orchestrating the scripts that drive the process.

    +
    +

    In essence, all CI jobs run ./x test, ./x dist or some other command with +different configurations, across various operating systems, targets and +platforms. There are two broad categories of jobs that are executed, dist and +non-dist jobs.

    +
      +
    • Dist jobs build a full release of the compiler for a specific platform, +including all the tools we ship through rustup; Those builds are then uploaded +to the rust-lang-ci2 S3 bucket and are available to be locally installed +with the rustup-toolchain-install-master tool. The same builds are also used +for actual releases: our release process basically consists of copying those +artifacts from rust-lang-ci2 to the production endpoint and signing them.
    • +
    • Non-dist jobs run our full test suite on the platform, and the test suite of +all the tools we ship through rustup; The amount of stuff we test depends on +the platform (for example some tests are run only on Tier 1 platforms), and +some quicker platforms are grouped together on the same builder to avoid +wasting CI resources.
    • +
    +

    Based on an input event (usually a push to a branch), we execute one of three +kinds of builds (sets of jobs).

    +
      +
    1. PR builds
    2. +
    3. Auto builds
    4. +
    5. Try builds
    6. +
    +

    Pull Request builds

    +

    After each push to a pull request, a set of pr jobs are executed. Currently, +these execute the x86_64-gnu-llvm-X, x86_64-gnu-tools, mingw-check-1, mingw-check-2 +and mingw-check-tidy jobs, all running on Linux. These execute a relatively short +(~40 minutes) and lightweight test suite that should catch common issues. More +specifically, they run a set of lints, they try to perform a cross-compile check +build to Windows mingw (without producing any artifacts) and they test the +compiler using a system version of LLVM. Unfortunately, it would take too many +resources to run the full test suite for each commit on every PR.

    +
    +

    Note on doc comments

    +

    Note that PR CI as of Oct 2024 by default does not try to +run ./x doc xxx. This means that if you have any broken intradoc links that +would lead to ./x doc xxx failing, it will happen very late into the full +merge queue CI pipeline.

    +

    Thus, it is a good idea to run ./x doc xxx locally for any doc comment +changes to help catch these early.

    +
    +

    PR jobs are defined in the pr section of jobs.yml. They run under the +rust-lang/rust repository, and their results can be observed directly on the +PR, in the "CI checks" section at the bottom of the PR page.

    +

    Auto builds

    +

    Before a commit can be merged into the master branch, it needs to pass our +complete test suite. We call this an auto build. This build runs tens of CI +jobs that exercise various tests across operating systems and targets. The full +test suite is quite slow; it can take two hours or more until all the auto CI +jobs finish.

    +

    Most platforms only run the build steps, some run a restricted set of tests, +only a subset run the full suite of tests (see Rust's platform tiers).

    +

    Auto jobs are defined in the auto section of jobs.yml. They are executed +on the auto branch under the rust-lang/rust repository and +their results can be seen here, +although usually you will be notified of the result by a comment made by bors on +the corresponding PR.

    +

    At any given time, at most a single auto build is being executed. Find out +more here.

    +

    Try builds

    +

    Sometimes we want to run a subset of the test suite on CI for a given PR, or +build a set of compiler artifacts from that PR, without attempting to merge it. +We call this a "try build". A try build is started after a user with the proper +permissions posts a PR comment with the @bors try command.

    +

    There are several use-cases for try builds:

    +
      +
    • Run a set of performance benchmarks using our rustc-perf benchmark suite. +For this, a working compiler build is needed, which can be generated with a +try build that runs the dist-x86_64-linux CI job, which builds an optimized +version of the compiler on Linux (this job is currently executed by default +when you start a try build). To create a try build and schedule it for a +performance benchmark, you can use the @bors try @rust-timer queue command +combination.
    • +
    • Check the impact of the PR across the Rust ecosystem, using a crater run. +Again, a working compiler build is needed for this, which can be produced by +the dist-x86_64-linux CI job.
    • +
    • Run a specific CI job (e.g. Windows tests) on a PR, to quickly test if it +passes the test suite executed by that job.
    • +
    +

    By default, if you send a comment with @bors try, the jobs defined in the try section of +jobs.yml will be executed. We call this mode a "fast try build". Such a try build +will not execute any tests, and it will allow compilation warnings. It is useful when you want to +get an optimized toolchain as fast as possible, for a crater run or performance benchmarks, +even if it might not be working fully correctly.

    +

    If you want to run a custom CI job in a try build and make sure that it passes all tests and does +not produce any compilation warnings, you can select CI jobs to be executed by adding lines +containing try-job: <job pattern> to the PR description. All such specified jobs will be executed +in the try build once the @bors try command is used on the PR.

    +

    Each pattern can either be an exact name of a job or a glob pattern that matches multiple jobs, +for example *msvc* or *-alt. You can start at most 20 jobs in a single try build. When using +glob patterns, you might want to wrap them in backticks (`) to avoid GitHub rendering +the pattern as Markdown.

    +
    +

    Using try-job PR description directives

    +
      +
    1. +

      Identify which set of try-jobs you would like to exercise. You can +find the name of the CI jobs in jobs.yml.

      +
    2. +
    3. +

      Amend PR description to include a set of patterns (usually at the end +of the PR description), for example:

      +
      This PR fixes #123456.
      +
      +try-job: x86_64-msvc
      +try-job: test-various
      +try-job: `*-alt`
      +
      +

      Each try-job pattern must be on its own line.

      +
    4. +
    5. +

      Run the prescribed try jobs with @bors try. As aforementioned, this +requires the user to either (1) have try permissions or (2) be delegated +with try permissions by @bors delegate by someone who has try +permissions.

      +
    6. +
    +

    Note that this is usually easier to do than manually edit jobs.yml. +However, it can be less flexible because you cannot adjust the set of tests +that are exercised this way.

    +
    +

    Try jobs are defined in the try section of jobs.yml. They are executed on +the try branch under the rust-lang/rust repository and +their results can be seen here, +although usually you will be notified of the result by a comment made by bors on +the corresponding PR.

    +

    Note that if you start the default try job using @bors try, it will skip building several dist components and running post-optimization tests, to make the build duration shorter. If you want to execute the full build as it would happen before a merge, add an explicit try-job pattern with the name of the default try job (currently dist-x86_64-linux).

    +

    Multiple try builds can execute concurrently across different PRs.

    +
    +

    Bors identifies try jobs by commit hash. This means that if you have two PRs +containing the same (latest) commits, running @bors try will result in the +same try job and it really confuses bors. Please refrain from doing so.

    +
    +

    Modifying CI jobs

    +

    If you want to modify what gets executed on our CI, you can simply modify the +pr, auto or try sections of the jobs.yml file.

    +

    You can also modify what gets executed temporarily, for example to test a +particular platform or configuration that is challenging to test locally (for +example, if a Windows build fails, but you don't have access to a Windows +machine). Don't hesitate to use CI resources in such situations to try out a +fix!

    +

    You can perform an arbitrary CI job in two ways:

    +
      +
    • Use the try build functionality, and specify the CI jobs that +you want to be executed in try builds in your PR description.
    • +
    • Modify the pr section of jobs.yml to specify which +CI jobs should be executed after each push to your PR. This might be faster +than repeatedly starting try builds.
    • +
    +

    To modify the jobs executed after each push to a PR, you can simply copy one of +the job definitions from the auto section to the pr section. For example, +the x86_64-msvc job is responsible for running the 64-bit MSVC tests. You can +copy it to the pr section to cause it to be executed after a commit is pushed +to your PR, like this:

    +
    pr:
    +  ...
    +  - image: x86_64-gnu-tools
    +    <<: *job-linux-16c
    +  # this item was copied from the `auto` section
    +  # vvvvvvvvvvvvvvvvvv
    +  - image: x86_64-msvc
    +    env:
    +      RUST_CONFIGURE_ARGS: --build=x86_64-pc-windows-msvc --enable-profiler
    +      SCRIPT: make ci-msvc
    +    <<: *job-windows-8c
    +
    +

    Then you can commit the file and push it to your PR branch on GitHub. GitHub +Actions should then execute this CI job after each push to your PR.

    +
    +

    After you have finished your experiments, don't forget to remove any changes +you have made to jobs.yml, if they were supposed to be temporary!

    +

    A good practice is to prefix [WIP] in PR title while still running try jobs +and [DO NOT MERGE] in the commit that modifies the CI jobs for testing +purposes.

    +
    +

    Although you are welcome to use CI, just be conscious that this is a shared +resource with limited concurrency. Try not to enable too many jobs at once (one +or two should be sufficient in most cases).

    +

    Merging PRs serially with bors

    +

    CI services usually test the last commit of a branch merged with the last commit +in master, and while that’s great to check if the feature works in isolation, +it doesn’t provide any guarantee the code is going to work once it’s merged. +Breakages like these usually happen when another, incompatible PR is merged +after the build happened.

    +

    To ensure a master branch that works all the time, we forbid manual merges. +Instead, all PRs have to be approved through our bot, bors (the software +behind it is called homu). All the approved PRs are put in a merge queue +(sorted by priority and creation date) and are automatically tested one at the +time. If all the builders are green, the PR is merged, otherwise the failure is +recorded and the PR will have to be re-approved again.

    +

    Bors doesn’t interact with CI services directly, but it works by pushing the +merge commit it wants to test to specific branches (like auto or try), which +are configured to execute CI checks. Bors then detects the outcome of the build +by listening for either Commit Statuses or Check Runs. Since the merge commit is +based on the latest master and only one can be tested at the same time, when +the results are green, master is fast-forwarded to that merge commit.

    +

    Unfortunately testing a single PR at the time, combined with our long CI (~2 +hours for a full run), means we can’t merge too many PRs in a single day, and a +single failure greatly impacts our throughput for the day. The maximum number of +PRs we can merge in a day is around ~10.

    +

    The large CI run times and requirement for a large builder pool is largely due +to the fact that full release artifacts are built in the dist- builders. This +is worth it because these release artifacts:

    +
      +
    • Allow perf testing even at a later date.
    • +
    • Allow bisection when bugs are discovered later.
    • +
    • Ensure release quality since if we're always releasing, we can catch problems +early.
    • +
    +

    Rollups

    +

    Some PRs don’t need the full test suite to be executed: trivial changes like +typo fixes or README improvements shouldn’t break the build, and testing every +single one of them for 2+ hours is a big waste of time. To solve this, we +regularly create a "rollup", a PR where we merge several pending trivial PRs so +they can be tested together. Rollups are created manually by a team member using +the "create a rollup" button on the merge queue. The team member uses their +judgment to decide if a PR is risky or not, and are the best tool we have at the +moment to keep the queue in a manageable state.

    +

    Docker

    +

    All CI jobs, except those on macOS and Windows, are executed inside that +platform’s custom Docker container. This has a lot of advantages for us:

    +
      +
    • The build environment is consistent regardless of the changes of the +underlying image (switching from the trusty image to xenial was painless for +us).
    • +
    • We can use ancient build environments to ensure maximum binary compatibility, +for example using older CentOS releases on our Linux +builders.
    • +
    • We can avoid reinstalling tools (like QEMU or the Android emulator) every time +thanks to Docker image caching.
    • +
    • Users can run the same tests in the same environment locally by just running +cargo run --manifest-path src/ci/citool/Cargo.toml run-local <job-name>, which is awesome to debug failures. Note that there are only linux docker images available locally due to licensing and +other restrictions.
    • +
    +

    The docker images prefixed with dist- are used for building artifacts while +those without that prefix run tests and checks.

    +

    We also run tests for less common architectures (mainly Tier 2 and Tier 3 +platforms) in CI. Since those platforms are not x86 we either run everything +inside QEMU or just cross-compile if we don’t want to run the tests for that +platform.

    +

    These builders are running on a special pool of builders set up and maintained +for us by GitHub.

    +

    Caching

    +

    Our CI workflow uses various caching mechanisms, mainly for two things:

    +

    Docker images caching

    +

    The Docker images we use to run most of the Linux-based builders take a long +time to fully build. To speed up the build, we cache them using Docker registry +caching, with the intermediate artifacts being stored on ghcr.io. We also +push the built Docker images to ghcr, so that they can be reused by other tools +(rustup) or by developers running the Docker build locally (to speed up their +build).

    +

    Since we test multiple, diverged branches (master, beta and stable), we +can’t rely on a single cache for the images, otherwise builds on a branch would +override the cache for the others. Instead, we store the images under different +tags, identifying them with a custom hash made from the contents of all the +Dockerfiles and related scripts.

    +

    The CI calculates a hash key, so that the cache of a Docker image is +invalidated if one of the following changes:

    +
      +
    • Dockerfile
    • +
    • Files copied into the Docker image in the Dockerfile
    • +
    • The architecture of the GitHub runner (x86 or ARM)
    • +
    +

    LLVM caching with sccache

    +

    We build some C/C++ stuff in various CI jobs, and we rely on sccache to cache +the intermediate LLVM artifacts. Sccache is a distributed ccache developed by +Mozilla, which can use an object storage bucket as the storage backend.

    +

    With sccache there's no need to calculate the hash key ourselves. Sccache +invalidates the cache automatically when it detects changes to relevant inputs, +such as the source code, the version of the compiler, and important environment +variables. +So we just pass the sccache wrapper on top of cargo and sccache does the rest.

    +

    We store the persistent artifacts on the S3 bucket rust-lang-ci-sccache2. So +when the CI runs, if sccache sees that LLVM is being compiled with the same C/C++ +compiler and the LLVM source code is the same, sccache retrieves the individual +compiled translation units from S3.

    +

    Custom tooling around CI

    +

    During the years we developed some custom tooling to improve our CI experience.

    +

    Rust Log Analyzer to show the error message in PRs

    +

    The build logs for rust-lang/rust are huge, and it’s not practical to find +what caused the build to fail by looking at the logs. To improve the developers’ +experience we developed a bot called Rust Log Analyzer (RLA) that +receives the build logs on failure and extracts the error message automatically, +posting it on the PR.

    +

    The bot is not hardcoded to look for error strings, but was trained with a bunch +of build failures to recognize which lines are common between builds and which +are not. While the generated snippets can be weird sometimes, the bot is pretty +good at identifying the relevant lines even if it’s an error we've never seen +before.

    +

    Toolstate to support allowed failures

    +

    The rust-lang/rust repo doesn’t only test the compiler on its CI, but also a +variety of tools and documentation. Some documentation is pulled in via git +submodules. If we blocked merging rustc PRs on the documentation being fixed, we +would be stuck in a chicken-and-egg problem, because the documentation's CI +would not pass since updating it would need the not-yet-merged version of rustc +to test against (and we usually require CI to be passing).

    +

    To avoid the problem, submodules are allowed to fail, and their status is +recorded in rust-toolstate. When a submodule breaks, a bot automatically pings +the maintainers so they know about the breakage, and it records the failure on +the toolstate repository. The release process will then ignore broken tools on +nightly, removing them from the shipped nightlies.

    +

    While tool failures are allowed most of the time, they’re automatically +forbidden a week before a release: we don’t care if tools are broken on nightly +but they must work on beta and stable, so they also need to work on nightly a +few days before we promote nightly to beta.

    +

    More information is available in the toolstate documentation.

    +

    Public CI dashboard

    +

    To monitor the Rust CI, you can have a look at the public dashboard maintained by the infra-team.

    +

    These are some useful panels from the dashboard:

    +
      +
    • Pipeline duration: check how long the auto builds takes to run.
    • +
    • Top slowest jobs: check which jobs are taking the longest to run.
    • +
    • Change in median job duration: check what jobs are slowest than before. Useful +to detect regressions.
    • +
    • Top failed jobs: check which jobs are failing the most.
    • +
    +

    To learn more about the dashboard, see the Datadog CI docs.

    +

    Determining the CI configuration

    +

    If you want to determine which bootstrap.toml settings are used in CI for a +particular job, it is probably easiest to just look at the build log. To do +this:

    +
      +
    1. Go to +https://github.com/rust-lang/rust/actions?query=branch%3Aauto+is%3Asuccess +to find the most recently successful build, and click on it.
    2. +
    3. Choose the job you are interested in on the left-hand side.
    4. +
    5. Click on the gear icon and choose "View raw logs"
    6. +
    7. Search for the string "Configure the build"
    8. +
    9. All of the build settings are listed below that starting with the +configure: prefix.
    10. +
    +

    Adding new tests

    + +

    In general, we expect every PR that fixes a bug in rustc to come accompanied +by a regression test of some kind. This test should fail in master but pass +after the PR. These tests are really useful for preventing us from repeating the +mistakes of the past.

    +

    The first thing to decide is which kind of test to add. This will depend on the +nature of the change and what you want to exercise. Here are some rough +guidelines:

    +
      +
    • The majority of compiler tests are done with compiletest. +
        +
      • The majority of compiletest tests are UI tests in the tests/ui +directory.
      • +
      +
    • +
    • Changes to the standard library are usually tested within the standard library +itself. +
        +
      • The majority of standard library tests are written as doctests, which +illustrate and exercise typical API behavior.
      • +
      • Additional unit tests should go in +library/${crate}/tests (where ${crate} is usually core, alloc, or +std).
      • +
      +
    • +
    • If the code is part of an isolated system, and you are not testing compiler +output, consider using a unit or integration test.
    • +
    • Need to run rustdoc? Prefer a rustdoc or rustdoc-ui test. Occasionally +you'll need rustdoc-js as well.
    • +
    • Other compiletest test suites are generally used for special purposes: +
        +
      • Need to run gdb or lldb? Use the debuginfo test suite.
      • +
      • Need to inspect LLVM IR or MIR IR? Use the codegen or mir-opt test +suites.
      • +
      • Need to inspect the resulting binary in some way? Or if all the other test +suites are too limited for your purposes? Then use run-make.
      • +
      • Check out the compiletest chapter for more specialized test suites.
      • +
      +
    • +
    +

    After deciding on which kind of test to add, see best +practices for guidance on how to author tests that are easy +to work with that stand the test of time (i.e. if a test fails or need to be +modified several years later, how can we make it easier for them?).

    +

    UI test walkthrough

    +

    The following is a basic guide for creating a UI test, which is one of +the most common compiler tests. For this tutorial, we'll be adding a test for an +async error message.

    +

    Step 1: Add a test file

    +

    The first step is to create a Rust source file somewhere in the tests/ui +tree. When creating a test, do your best to find a good location and name (see +Test organization for more). Since naming is the +hardest part of development, everything should be downhill from here!

    +

    Let's place our async test at tests/ui/async-await/await-without-async.rs:

    +
    // Provide diagnostics when the user writes `await` in a non-`async` function.
    +//@ edition:2018
    +
    +async fn foo() {}
    +
    +fn bar() {
    +    foo().await
    +}
    +
    +fn main() {}
    +

    A few things to notice about our test:

    +
      +
    • The top should start with a short comment that explains what the test is +for.
    • +
    • The //@ edition:2018 comment is called a directive which +provides instructions to compiletest on how to build the test. Here we need to +set the edition for async to work (the default is edition 2015).
    • +
    • Following that is the source of the test. Try to keep it succinct and to the +point. This may require some effort if you are trying to minimize an example +from a bug report.
    • +
    • We end this test with an empty fn main function. This is because the default +for UI tests is a bin crate-type, and we don't want the "main not found" +error in our test. Alternatively, you could add #![crate_type="lib"].
    • +
    +

    Step 2: Generate the expected output

    +

    The next step is to create the expected output snapshots from the compiler. This +can be done with the --bless option:

    +
    ./x test tests/ui/async-await/await-without-async.rs --bless
    +
    +

    This will build the compiler (if it hasn't already been built), compile the +test, and place the output of the compiler in a file called +tests/ui/async-await/await-without-async.stderr.

    +

    However, this step will fail! You should see an error message, something like +this:

    +
    +

    error: /rust/tests/ui/async-await/await-without-async.rs:7: unexpected +error: '7:10: 7:16: await is only allowed inside async functions and +blocks E0728'

    +
    +

    This is because the stderr contains errors which were not matched by error +annotations in the source file.

    +

    Step 3: Add error annotations

    +

    Every error needs to be annotated with a comment in the source with the text of +the error. In this case, we can add the following comment to our test file:

    +
    fn bar() {
    +    foo().await
    +    //~^ ERROR `await` is only allowed inside `async` functions and blocks
    +}
    +

    The //~^ squiggle caret comment tells compiletest that the error belongs to +the previous line (more on this in the Error +annotations section).

    +

    Save that, and run the test again:

    +
    ./x test tests/ui/async-await/await-without-async.rs
    +
    +

    It should now pass, yay!

    +

    Step 4: Review the output

    +

    Somewhat hand-in-hand with the previous step, you should inspect the .stderr +file that was created to see if it looks like how you expect. If you are adding +a new diagnostic message, now would be a good time to also consider how readable +the message looks overall, particularly for people new to Rust.

    +

    Our example tests/ui/async-await/await-without-async.stderr file should look +like this:

    +
    error[E0728]: `await` is only allowed inside `async` functions and blocks
    +  --> $DIR/await-without-async.rs:7:10
    +   |
    +LL | fn bar() {
    +   |    --- this is not `async`
    +LL |     foo().await
    +   |          ^^^^^^ only allowed inside `async` functions and blocks
    +
    +error: aborting due to previous error
    +
    +For more information about this error, try `rustc --explain E0728`.
    +
    +

    You may notice some things look a little different than the regular compiler +output.

    +
      +
    • The $DIR removes the path information which will differ between systems.
    • +
    • The LL values replace the line numbers. That helps avoid small changes in +the source from triggering large diffs. See the +Normalization section for more.
    • +
    +

    Around this stage, you may need to iterate over the last few steps a few times +to tweak your test, re-bless the test, and re-review the output.

    +

    Step 5: Check other tests

    +

    Sometimes when adding or changing a diagnostic message, this will affect other +tests in the test suite. The final step before posting a PR is to check if you +have affected anything else. Running the UI suite is usually a good start:

    +
    ./x test tests/ui
    +
    +

    If other tests start failing, you may need to investigate what has changed and +if the new output makes sense.

    +

    You may also need to re-bless the output with the --bless flag.

    +

    +

    Comment explaining what the test is about

    +

    The first comment of a test file should summarize the point of the test, and +highlight what is important about it. If there is an issue number associated +with the test, include the issue number.

    +

    This comment doesn't have to be super extensive. Just something like "Regression +test for #18060: match arms were matching in the wrong order." might already be +enough.

    +

    These comments are very useful to others later on when your test breaks, since +they often can highlight what the problem is. They are also useful if for some +reason the tests need to be refactored, since they let others know which parts +of the test were important. Often a test must be rewritten because it no longer +tests what it was meant to test, and then it's useful to know what it was +meant to test exactly.

    +

    Best practices for writing tests

    +

    This chapter describes best practices related to authoring and modifying tests. +We want to make sure the tests we author are easy to understand and modify, even +several years later, without needing to consult the original author and perform +a bunch of git archeology.

    +

    It's good practice to review the test that you authored by pretending that you +are a different contributor who is looking at the test that failed several years +later without much context (this also helps yourself even a few days or months +later!). Then ask yourself: how can I make my life and their lives easier?

    +

    To help put this into perspective, let's start with an aside on how to write a +test that makes the life of another contributor as hard as possible.

    +
    +

    Aside: Simple Test Sabotage Field Manual

    +

    To make the life of another contributor as hard as possible, one might:

    +
      +
    • Name the test after an issue number alone without any other context, e.g. +issue-123456.rs.
    • +
    • Have no comments at all on what the test is trying to exercise, no links to +relevant context.
    • +
    • Include a test that is massive (that can otherwise be minimized) and +contains non-essential pieces which distracts from the core thing the test +is actually trying to test.
    • +
    • Include a bunch of unrelated syntax errors and other errors which are not +critical to what the test is trying to check.
    • +
    • Weirdly format the snippets.
    • +
    • Include a bunch of unused and unrelated features.
    • +
    • Have e.g. ignore-windows compiletest directives but don't offer any +explanation as to why they are needed.
    • +
    +
    +

    Test naming

    +

    Make it easy for the reader to immediately understand what the test is +exercising, instead of having to type in the issue number and dig through github +search for what the test is trying to exercise. This has an additional benefit +of making the test possible to be filtered via --test-args as a collection of +related tests.

    +
      +
    • Name the test after what it's trying to exercise or prevent regressions of.
    • +
    • Keep it concise.
    • +
    • Avoid using issue numbers alone as test names.
    • +
    • Avoid starting the test name with issue-xxxxx prefix as it degrades +auto-completion.
    • +
    +
    +

    Avoid using only issue numbers as test names

    +

    Prefer including them as links or #123456 in test comments instead. Or if it +makes sense to include the issue number, also include brief keywords like +macro-external-span-ice-123956.rs.

    +
    tests/ui/typeck/issue-123456.rs                              // bad
    +tests/ui/typeck/issue-123456-asm-macro-external-span-ice.rs  // bad (for tab completion)
    +tests/ui/typeck/asm-macro-external-span-ice-123456.rs        // good
    +tests/ui/typeck/asm-macro-external-span-ice.rs               // good
    +
    +

    issue-123456.rs does not tell you immediately anything about what the test +is actually exercising meaning you need to do additional searching. Including +the issue number in the test name as a prefix makes tab completion less useful +(if you ls a test directory and get a bunch of issue-xxxxx prefixes). We +can link to the issue in a test comment.

    +
    //! Check that `asm!` macro including nested macros that come from external
    +//! crates do not lead to a codepoint boundary assertion ICE.
    +//!
    +//! Regression test for <https://github.com/rust-lang/rust/issues/123456>.
    +
    +

    One exception to this rule is crashes tests: there it is canonical that +tests are named only after issue numbers because its purpose is to track +snippets from which issues no longer ICE/crash, and they would either be +removed or converted into proper ui/other tests in the fix PRs.

    +
    +

    Test organization

    +
      +
    • For most test suites, try to find a semantically meaningful subdirectory to +home the test. +
        +
      • E.g. for an implementation of RFC 2093 specifically, we can group a +collection of tests under tests/ui/rfc-2093-infer-outlives/. For the +directory name, include what the RFC is about.
      • +
      +
    • +
    • For the run-make test suite, each rmake.rs must be contained within an +immediate subdirectory under tests/run-make/. Further nesting is not +presently supported. Avoid including issue number in the directory name too, +include that info in a comment inside rmake.rs.
    • +
    +

    Test descriptions

    +

    To help other contributors understand what the test is about if their changes +lead to the test failing, we should make sure a test has sufficient docs about +its intent/purpose, links to relevant context (incl. issue numbers or other +discussions) and possibly relevant resources (e.g. can be helpful to link to +Win32 APIs for specific behavior).

    +

    Synopsis of a test with good comments

    +
    //! Brief summary of what the test is exercising.
    +//! Example: Regression test for #123456: make sure coverage attribute don't ICE
    +//!     when applied to non-items.
    +//!
    +//! Optional: Remarks on related tests/issues, external APIs/tools, crash
    +//!     mechanism, how it's fixed, FIXMEs, limitations, etc.
    +//! Example: This test is like `tests/attrs/linkage.rs`, but this test is
    +//!     specifically checking `#[coverage]` which exercises a different code
    +//!     path. The ICE was triggered during attribute validation when we tried
    +//!     to construct a `def_path_str` but only emitted the diagnostic when the
    +//!     platform is windows, causing an ICE on unix.
    +//!
    +//! Links to relevant issues and discussions. Examples below:
    +//! Regression test for <https://github.com/rust-lang/rust/issues/123456>.
    +//! See also <https://github.com/rust-lang/rust/issues/101345>.
    +//! See discussion at <https://rust-lang.zulipchat.com/#narrow/stream/131828-t-compiler/topic/123456-example-topic>.
    +//! See [`clone(2)`].
    +//!
    +//! [`clone(2)`]: https://man7.org/linux/man-pages/man2/clone.2.html
    +
    +//@ ignore-windows
    +// Reason: (why is this test ignored for windows? why not specifically
    +// windows-gnu or windows-msvc?)
    +
    +// Optional: Summary of test cases: What positive cases are checked?
    +// What negative cases are checked? Any specific quirks?
    +
    +fn main() {
    +    #[coverage]
    +    //~^ ERROR coverage attribute can only be applied to function items.
    +    let _ = {
    +        // Comment highlighting something that deserves reader attention.
    +        fn foo() {}
    +    };
    +}
    +

    For how much context/explanation is needed, it is up to the author and +reviewer's discretion. A good rule of thumb is non-trivial things exercised in +the test deserves some explanation to help other contributors to understand. +This may include remarks on:

    +
      +
    • How an ICE can get triggered if it's quite elaborate.
    • +
    • Related issues and tests (e.g. this test is like another test but is kept +separate because...).
    • +
    • Platform-specific behaviors.
    • +
    • Behavior of external dependencies and APIs: syscalls, linkers, tools, +environments and the likes.
    • +
    +

    Test content

    +
      +
    • Try to make sure the test is as minimal as possible.
    • +
    • Minimize non-critical code and especially minimize unnecessary syntax and type +errors which can clutter stderr snapshots.
    • +
    • Where possible, use semantically meaningful names (e.g. fn bare_coverage_attributes() {}).
    • +
    +

    Flaky tests

    +

    All tests need to strive to be reproducible and reliable. Flaky tests are the +worst kind of tests, arguably even worse than not having the test in the first +place.

    +
      +
    • Flaky tests can fail in completely unrelated PRs which can confuse other +contributors and waste their time trying to figure out if test failure is +related.
    • +
    • Flaky tests provide no useful information from its test results other than +it's flaky and not reliable: if a test passed but it's flakey, did I just get +lucky? if a test is flakey but it failed, was it just spurious?
    • +
    • Flaky tests degrade confidence in the whole test suite. If a test suite can +randomly spuriously fail due to flaky tests, did the whole test suite pass or +did I just get lucky/unlucky?
    • +
    • Flaky tests can randomly fail in full CI, wasting previous full CI resources.
    • +
    +

    Compiletest directives

    +

    See compiletest directives for a listing of directives.

    +
      +
    • For ignore-*/needs-*/only-* directives, unless extremely obvious, +provide a brief remark on why the directive is needed. E.g. "//@ ignore-wasi (wasi codegens the main symbol differently)".
    • +
    • When using //@ ignore-auxiliary, specify the corresponding main test files, +e.g. //@ ignore-auxiliary (used by `./foo.rs`).
    • +
    +

    FileCheck best practices

    +

    See LLVM FileCheck guide for details.

    +
      +
    • Avoid matching on specific register numbers or basic block numbers unless +they're special or critical for the test. Consider using patterns to match +them where suitable.
    • +
    +
    +

    TODO

    +

    Pending concrete advice.

    +
    +

    Compiletest

    + +

    Introduction

    +

    compiletest is the main test harness of the Rust test suite. It allows test +authors to organize large numbers of tests (the Rust compiler has many +thousands), efficient test execution (parallel execution is supported), and +allows the test author to configure behavior and expected results of both +individual and groups of tests.

    +
    +

    Note for macOS users

    +

    For macOS users, SIP (System Integrity Protection) may consistently check +the compiled binary by sending network requests to Apple, so you may +get a huge performance degradation when running tests.

    +

    You can resolve it by tweaking the following settings: Privacy & Security -> Developer Tools -> Add Terminal (Or VsCode, etc.).

    +
    +

    compiletest may check test code for compile-time or run-time success/failure.

    +

    Tests are typically organized as a Rust source file with annotations in comments +before and/or within the test code. These comments serve to direct compiletest +on if or how to run the test, what behavior to expect, and more. See +directives and the test suite documentation below for more details +on these annotations.

    +

    See the Adding new tests and Best practies +chapters for a tutorial on creating a new test and advice on writing a good +test, and the Running tests chapter on how to run the test suite.

    +

    Arguments can be passed to compiletest using --test-args or by placing them after --, e.g.

    +
      +
    • x test --test-args --force-rerun
    • +
    • x test -- --force-rerun
    • +
    +

    Additionally, bootstrap accepts several common arguments directly, e.g.

    +

    x test --no-capture --force-rerun --run --pass.

    +

    Compiletest itself tries to avoid running tests when the artifacts that are +involved (mainly the compiler) haven't changed. You can use x test --test-args --force-rerun to rerun a test even when none of the inputs have changed.

    +

    Test suites

    +

    All of the tests are in the tests directory. The tests are organized into +"suites", with each suite in a separate subdirectory. Each test suite behaves a +little differently, with different compiler behavior and different checks for +correctness. For example, the tests/incremental directory contains tests for +incremental compilation. The various suites are defined in +src/tools/compiletest/src/common.rs in the pub enum Mode declaration.

    +

    The following test suites are available, with links for more information:

    +

    Compiler-specific test suites

    +
    + + + + + + + + + + + + +
    Test suitePurpose
    uiCheck the stdout/stderr snapshots from the compilation and/or running the resulting executable
    ui-fulldepsui tests which require a linkable build of rustc (such as using extern crate rustc_span; or used as a plugin)
    prettyCheck pretty printing
    incrementalCheck incremental compilation behavior
    debuginfoCheck debuginfo generation running debuggers
    codegenCheck code generation
    codegen-unitsCheck codegen unit partitioning
    assemblyCheck assembly output
    mir-optCheck MIR generation and optimizations
    coverageCheck coverage instrumentation
    coverage-run-rustdoccoverage tests that also run instrumented doctests
    crashesCheck that the compiler ICEs/panics/crashes on certain inputs to catch accidental fixes
    +
    +

    General purpose test suite

    +

    run-make are general purpose tests using Rust programs.

    +

    Rustdoc test suites

    +
    + + + + + + +
    Test suitePurpose
    rustdocCheck HTML output of rustdoc
    rustdoc-guiCheck rustdoc's GUI using a web browser
    rustdoc-jsCheck rustdoc's search engine and index
    rustdoc-js-stdCheck rustdoc's search engine and index on the std library docs
    rustdoc-jsonCheck JSON output of rustdoc
    rustdoc-uiCheck terminal output of rustdoc (see also)
    +
    +

    Some rustdoc-specific tests can also be found in ui/rustdoc/. +These check rustdoc-related or -specific lints that (also) run as part of rustc, not (only) rustdoc. +Run-make tests pertaining to rustdoc are typically named run-make/rustdoc-*/.

    +

    Pretty-printer tests

    +

    The tests in tests/pretty exercise the "pretty-printing" functionality of +rustc. The -Z unpretty CLI option for rustc causes it to translate the +input source into various different formats, such as the Rust source after macro +expansion.

    +

    The pretty-printer tests have several directives described below. +These commands can significantly change the behavior of the test, but the +default behavior without any commands is to:

    +
      +
    1. Run rustc -Zunpretty=normal on the source file.
    2. +
    3. Run rustc -Zunpretty=normal on the output of the previous step.
    4. +
    5. The output of the previous two steps should be the same.
    6. +
    7. Run rustc -Zno-codegen on the output to make sure that it can type check +(similar to cargo check).
    8. +
    +

    If any of the commands above fail, then the test fails.

    +

    The directives for pretty-printing tests are:

    +
      +
    • pretty-mode specifies the mode pretty-print tests should run in (that is, +the argument to -Zunpretty). The default is normal if not specified.
    • +
    • pretty-compare-only causes a pretty test to only compare the pretty-printed +output (stopping after step 3 from above). It will not try to compile the +expanded output to type check it. This is needed for a pretty-mode that does +not expand to valid Rust, or for other situations where the expanded output +cannot be compiled.
    • +
    • pp-exact is used to ensure a pretty-print test results in specific output. +If specified without a value, then it means the pretty-print output should +match the original source. If specified with a value, as in //@ pp-exact:foo.pp, it will ensure that the pretty-printed output matches the +contents of the given file. Otherwise, if pp-exact is not specified, then +the pretty-printed output will be pretty-printed one more time, and the output +of the two pretty-printing rounds will be compared to ensure that the +pretty-printed output converges to a steady state.
    • +
    +

    Incremental tests

    +

    The tests in tests/incremental exercise incremental compilation. They use +revisions directive to tell compiletest to run the compiler in a +series of steps.

    +

    Compiletest starts with an empty directory with the -C incremental flag, and +then runs the compiler for each revision, reusing the incremental results from +previous steps.

    +

    The revisions should start with:

    +
      +
    • rpass — the test should compile and run successfully
    • +
    • rfail — the test should compile successfully, but the executable should fail to run
    • +
    • cfail — the test should fail to compile
    • +
    +

    To make the revisions unique, you should add a suffix like rpass1 and +rpass2.

    +

    To simulate changing the source, compiletest also passes a --cfg flag with the +current revision name.

    +

    For example, this will run twice, simulating changing a function:

    +
    //@ revisions: rpass1 rpass2
    +
    +#[cfg(rpass1)]
    +fn foo() {
    +    println!("one");
    +}
    +
    +#[cfg(rpass2)]
    +fn foo() {
    +    println!("two");
    +}
    +
    +fn main() { foo(); }
    +

    cfail tests support the forbid-output directive to specify that a certain +substring must not appear anywhere in the compiler output. This can be useful to +ensure certain errors do not appear, but this can be fragile as error messages +change over time, and a test may no longer be checking the right thing but will +still pass.

    +

    cfail tests support the should-ice directive to specify that a test should +cause an Internal Compiler Error (ICE). This is a highly specialized directive +to check that the incremental cache continues to work after an ICE.

    +

    Debuginfo tests

    +

    The tests in tests/debuginfo test debuginfo generation. They build a +program, launch a debugger, and issue commands to the debugger. A single test +can work with cdb, gdb, and lldb.

    +

    Most tests should have the //@ compile-flags: -g directive or something +similar to generate the appropriate debuginfo.

    +

    To set a breakpoint on a line, add a // #break comment on the line.

    +

    The debuginfo tests consist of a series of debugger commands along with +"check" lines which specify output that is expected from the debugger.

    +

    The commands are comments of the form // $DEBUGGER-command:$COMMAND where +$DEBUGGER is the debugger being used and $COMMAND is the debugger command +to execute.

    +

    The debugger values can be:

    +
      +
    • cdb
    • +
    • gdb
    • +
    • gdbg — GDB without Rust support (versions older than 7.11)
    • +
    • gdbr — GDB with Rust support
    • +
    • lldb
    • +
    • lldbg — LLDB without Rust support
    • +
    • lldbr — LLDB with Rust support (this no longer exists)
    • +
    +

    The command to check the output are of the form // $DEBUGGER-check:$OUTPUT +where $OUTPUT is the output to expect.

    +

    For example, the following will build the test, start the debugger, set a +breakpoint, launch the program, inspect a value, and check what the debugger +prints:

    +
    //@ compile-flags: -g
    +
    +//@ lldb-command: run
    +//@ lldb-command: print foo
    +//@ lldb-check: $0 = 123
    +
    +fn main() {
    +    let foo = 123;
    +    b(); // #break
    +}
    +
    +fn b() {}
    +

    The following directives are available to disable a test based on +the debugger currently being used:

    +
      +
    • min-cdb-version: 10.0.18317.1001 — ignores the test if the version of cdb +is below the given version
    • +
    • min-gdb-version: 8.2 — ignores the test if the version of gdb is below the +given version
    • +
    • ignore-gdb-version: 9.2 — ignores the test if the version of gdb is equal +to the given version
    • +
    • ignore-gdb-version: 7.11.90 - 8.0.9 — ignores the test if the version of +gdb is in a range (inclusive)
    • +
    • min-lldb-version: 310 — ignores the test if the version of lldb is below +the given version
    • +
    • rust-lldb — ignores the test if lldb is not contain the Rust plugin. NOTE: +The "Rust" version of LLDB doesn't exist anymore, so this will always be +ignored. This should probably be removed.
    • +
    +

    By passing the --debugger option to compiletest, you can specify a single debugger to run tests with. +For example, ./x test tests/debuginfo -- --debugger gdb will only test GDB commands.

    +
    +

    Note on running lldb debuginfo tests locally

    +

    If you want to run lldb debuginfo tests locally, then currently on Windows it +is required that:

    +
      +
    • You have Python 3.10 installed.
    • +
    • You have python310.dll available in your PATH env var. This is not +provided by the standard Python installer you obtain from python.org; you +need to add this to PATH manually.
    • +
    +

    Otherwise the lldb debuginfo tests can produce crashes in mysterious ways.

    +
    +
    +

    Note on acquiring cdb.exe on Windows 11

    +

    cdb.exe is acquired alongside a suitable "Windows 11 SDK" which is part of +the "Desktop Development with C++" workload profile in a Visual Studio +installer (e.g. Visual Studio 2022 installer).

    +

    HOWEVER this is not sufficient by default alone. If you need cdb.exe, +you must go to Installed Apps, find the newest "Windows Software Development +Kit" (and yes, this can still say Windows 10.0.22161.3233 even though the OS +is called Windows 11). You must then click "Modify" -> "Change" and then +selected "Debugging Tools for Windows" in order to acquire cdb.exe.

    +
    +

    Codegen tests

    +

    The tests in tests/codegen test LLVM code generation. They compile the test +with the --emit=llvm-ir flag to emit LLVM IR. They then run the LLVM +FileCheck tool. The test is annotated with various // CHECK comments to +check the generated code. See the FileCheck documentation for a tutorial and +more information.

    +

    See also the assembly tests for a similar set of tests.

    +

    If you need to work with #![no_std] cross-compiling tests, consult the +minicore test auxiliary chapter.

    +

    Assembly tests

    +

    The tests in tests/assembly test LLVM assembly output. They compile the test +with the --emit=asm flag to emit a .s file with the assembly output. They +then run the LLVM FileCheck tool.

    +

    Each test should be annotated with the //@ assembly-output: directive with a +value of either emit-asm or ptx-linker to indicate the type of assembly +output.

    +

    Then, they should be annotated with various // CHECK comments to check the +assembly output. See the FileCheck documentation for a tutorial and more +information.

    +

    See also the codegen tests for a similar set of tests.

    +

    If you need to work with #![no_std] cross-compiling tests, consult the +minicore test auxiliary chapter.

    +

    Codegen-units tests

    +

    The tests in tests/codegen-units test the +monomorphization collector and CGU partitioning.

    +

    These tests work by running rustc with a flag to print the result of the +monomorphization collection pass, i.e., -Zprint-mono-items, and then special +annotations in the file are used to compare against that.

    +

    Then, the test should be annotated with comments of the form //~ MONO_ITEM name where name is the monomorphized string printed by rustc like fn <u32 as Trait>::foo.

    +

    To check for CGU partitioning, a comment of the form //~ MONO_ITEM name @@ cgu +where cgu is a space separated list of the CGU names and the linkage +information in brackets. For example: //~ MONO_ITEM static function::FOO @@ statics[Internal]

    +

    Mir-opt tests

    +

    The tests in tests/mir-opt check parts of the generated MIR to make sure it +is generated correctly and is doing the expected optimizations. Check out the +MIR Optimizations chapter for more.

    +

    Compiletest will build the test with several flags to dump the MIR output and +set a baseline for optimizations:

    +
      +
    • -Copt-level=1
    • +
    • -Zdump-mir=all
    • +
    • -Zmir-opt-level=4
    • +
    • -Zvalidate-mir
    • +
    • -Zdump-mir-exclude-pass-number
    • +
    +

    The test should be annotated with // EMIT_MIR comments that specify files that +will contain the expected MIR output. You can use x test --bless to create the +initial expected files.

    +

    There are several forms the EMIT_MIR comment can take:

    +
      +
    • +

      // EMIT_MIR $MIR_PATH.mir — This will check that the given filename matches +the exact output from the MIR dump. For example, +my_test.main.SimplifyCfg-elaborate-drops.after.mir will load that file from +the test directory, and compare it against the dump from rustc.

      +

      Checking the "after" file (which is after optimization) is useful if you are +interested in the final state after an optimization. Some rare cases may want +to use the "before" file for completeness.

      +
    • +
    • +

      // EMIT_MIR $MIR_PATH.diff — where $MIR_PATH is the filename of the MIR +dump, such as my_test_name.my_function.EarlyOtherwiseBranch. Compiletest +will diff the .before.mir and .after.mir files, and compare the diff +output to the expected .diff file from the EMIT_MIR comment.

      +

      This is useful if you want to see how an optimization changes the MIR.

      +
    • +
    • +

      // EMIT_MIR $MIR_PATH.dot — When using specific flags that dump additional +MIR data (e.g. -Z dump-mir-graphviz to produce .dot files), this will +check that the output matches the given file.

      +
    • +
    +

    By default 32 bit and 64 bit targets use the same dump files, which can be +problematic in the presence of pointers in constants or other bit width +dependent things. In that case you can add // EMIT_MIR_FOR_EACH_BIT_WIDTH to +your test, causing separate files to be generated for 32bit and 64bit systems.

    +

    run-make tests

    +

    The tests in tests/run-make are general-purpose tests using Rust recipes, +which are small programs (rmake.rs) allowing arbitrary Rust code such as +rustc invocations, and is supported by a run_make_support library. Using +Rust recipes provide the ultimate in flexibility.

    +

    run-make tests should be used if no other test suites better suit your needs.

    +

    Using Rust recipes

    +

    Each test should be in a separate directory with a rmake.rs Rust program, +called the recipe. A recipe will be compiled and executed by compiletest with +the run_make_support library linked in.

    +

    If you need new utilities or functionality, consider extending and improving the +run_make_support library.

    +

    Compiletest directives like //@ only-<target> or //@ ignore-<target> are +supported in rmake.rs, like in UI tests. However, revisions or building +auxiliary via directives are not currently supported.

    +

    rmake.rs and run-make-support may not use any nightly/unstable features, +as they must be compilable by a stage 0 rustc that may be a beta or even stable +rustc.

    +

    Quickly check if rmake.rs tests can be compiled

    +

    You can quickly check if rmake.rs tests can be compiled without having to +build stage1 rustc by forcing rmake.rs to be compiled with the stage0 +compiler:

    +
    $ COMPILETEST_FORCE_STAGE0=1 x test --stage 0 tests/run-make/<test-name>
    +
    +

    Of course, some tests will not successfully run in this way.

    +

    Using rust-analyzer with rmake.rs

    +

    Like other test programs, the rmake.rs scripts used by run-make tests do not +have rust-analyzer integration by default.

    +

    To work around this when working on a particular test, temporarily create a +Cargo.toml file in the test's directory +(e.g. tests/run-make/sysroot-crates-are-unstable/Cargo.toml) +with these contents:

    +
    +

    Be careful not to add this Cargo.toml or its Cargo.lock to your actual PR!

    +
    +
    # Convince cargo that this isn't part of an enclosing workspace.
    +[workspace]
    +
    +[package]
    +name = "rmake"
    +version = "0.1.0"
    +edition = "2021"
    +
    +[dependencies]
    +run_make_support = { path = "../../../src/tools/run-make-support" }
    +
    +[[bin]]
    +name = "rmake"
    +path = "rmake.rs"
    +
    +

    Then add a corresponding entry to "rust-analyzer.linkedProjects" +(e.g. in .vscode/settings.json):

    +
    "rust-analyzer.linkedProjects": [
    +  "tests/run-make/sysroot-crates-are-unstable/Cargo.toml"
    +],
    +
    +

    Coverage tests

    +

    The tests in tests/coverage are shared by multiple test modes that test +coverage instrumentation in different ways. Running the coverage test suite +will automatically run each test in all of the different coverage modes.

    +

    Each mode also has an alias to run the coverage tests in just that mode:

    +
    ./x test coverage # runs all of tests/coverage in all coverage modes
    +./x test tests/coverage # same as above
    +
    +./x test tests/coverage/if.rs # runs the specified test in all coverage modes
    +
    +./x test coverage-map # runs all of tests/coverage in "coverage-map" mode only
    +./x test coverage-run # runs all of tests/coverage in "coverage-run" mode only
    +
    +./x test coverage-map -- tests/coverage/if.rs # runs the specified test in "coverage-map" mode only
    +
    +

    If a particular test should not be run in one of the coverage test modes for +some reason, use the //@ ignore-coverage-map or //@ ignore-coverage-run +directives.

    +

    coverage-map suite

    +

    In coverage-map mode, these tests verify the mappings between source code +regions and coverage counters that are emitted by LLVM. They compile the test +with --emit=llvm-ir, then use a custom tool (src/tools/coverage-dump) to +extract and pretty-print the coverage mappings embedded in the IR. These tests +don't require the profiler runtime, so they run in PR CI jobs and are easy to +run/bless locally.

    +

    These coverage map tests can be sensitive to changes in MIR lowering or MIR +optimizations, producing mappings that are different but produce identical +coverage reports.

    +

    As a rule of thumb, any PR that doesn't change coverage-specific code should +feel free to re-bless the coverage-map tests as necessary, without +worrying about the actual changes, as long as the coverage-run tests still +pass.

    +

    coverage-run suite

    +

    In coverage-run mode, these tests perform an end-to-end test of coverage +reporting. They compile a test program with coverage instrumentation, run that +program to produce raw coverage data, and then use LLVM tools to process that +data into a human-readable code coverage report.

    +

    Instrumented binaries need to be linked against the LLVM profiler runtime, so +coverage-run tests are automatically skipped unless the profiler runtime +is enabled in bootstrap.toml:

    +
    # bootstrap.toml
    +[build]
    +profiler = true
    +
    +

    This also means that they typically don't run in PR CI jobs, though they do run +as part of the full set of CI jobs used for merging.

    +

    coverage-run-rustdoc suite

    +

    The tests in tests/coverage-run-rustdoc also run instrumented doctests and +include them in the coverage report. This avoids having to build rustdoc when +only running the main coverage suite.

    +

    Crashes tests

    +

    tests/crashes serve as a collection of tests that are expected to cause the +compiler to ICE, panic or crash in some other way, so that accidental fixes are +tracked. Formerly, this was done at https://github.com/rust-lang/glacier but +doing it inside the rust-lang/rust testsuite is more convenient.

    +

    It is imperative that a test in the suite causes rustc to ICE, panic, or +crash in some other way. A test will "pass" if rustc exits with an exit status +other than 1 or 0.

    +

    If you want to see verbose stdout/stderr, you need to set +COMPILETEST_VERBOSE_CRASHES=1, e.g.

    +
    $ COMPILETEST_VERBOSE_CRASHES=1 ./x test tests/crashes/999999.rs --stage 1
    +
    +

    Anyone can add "untracked" crashes from the issue tracker. It's strongly +recommended to include test cases from several issues in a single PR. +When you do so, each issue number should be noted in the file name (12345.rs +should suffice) and also inside the file by means of a //@ known-bug: #12345 +directive. Please label the relevant issues with S-bug-has-test +afterwards.

    +

    If you happen to fix one of the crashes, please move it to a fitting +subdirectory in tests/ui and give it a meaningful name. Please add a doc +comment at the top of the file explaining why this test exists, even better if +you can briefly explain how the example causes rustc to crash previously and +what was done to prevent rustc to ICE/panic/crash.

    +

    Adding

    +
    Fixes #NNNNN
    +Fixes #MMMMM
    +
    +

    to the description of your pull request will ensure the corresponding tickets be closed +automatically upon merge.

    +

    Make sure that your fix actually fixes the root cause of the issue and not just +a subset first. The issue numbers can be found in the file name or the //@ known-bug directive inside the test file.

    +

    Building auxiliary crates

    +

    It is common that some tests require additional auxiliary crates to be compiled. +There are multiple directives to assist with that:

    +
      +
    • aux-build
    • +
    • aux-crate
    • +
    • aux-bin
    • +
    • aux-codegen-backend
    • +
    • proc-macro
    • +
    +

    aux-build will build a separate crate from the named source file. The source +file should be in a directory called auxiliary beside the test file.

    +
    //@ aux-build: my-helper.rs
    +
    +extern crate my_helper;
    +// ... You can use my_helper.
    +

    The aux crate will be built as a dylib if possible (unless on a platform that +does not support them, or the no-prefer-dynamic header is specified in the aux +file). The -L flag is used to find the extern crates.

    +

    aux-crate is very similar to aux-build. However, it uses the --extern flag +to link to the extern crate to make the crate be available as an extern prelude. +That allows you to specify the additional syntax of the --extern flag, such as +renaming a dependency. For example, //@ aux-crate:foo=bar.rs will compile +auxiliary/bar.rs and make it available under then name foo within the test. +This is similar to how Cargo does dependency renaming.

    +

    aux-bin is similar to aux-build but will build a binary instead of a +library. The binary will be available in auxiliary/bin relative to the working +directory of the test.

    +

    aux-codegen-backend is similar to aux-build, but will then pass the compiled +dylib to -Zcodegen-backend when building the main file. This will only work +for tests in tests/ui-fulldeps, since it requires the use of compiler crates.

    +

    Auxiliary proc-macro

    +

    If you want a proc-macro dependency, then you can use the proc-macro +directive. This directive behaves just like aux-build, i.e. that you should +place the proc-macro test auxiliary file under a auxiliary folder under the +same parent folder as the main test file. However, it also has four additional +preset behavior compared to aux-build for the proc-macro test auxiliary:

    +
      +
    1. The aux test file is built with --crate-type=proc-macro.
    2. +
    3. The aux test file is built without -C prefer-dynamic, i.e. it will not try +to produce a dylib for the aux crate.
    4. +
    5. The aux crate is made available to the test file via extern prelude with +--extern <aux_crate_name>. Note that since UI tests default to edition +2015, you still need to specify extern <aux_crate_name> unless the main +test file is using an edition that is 2018 or newer if you want to use the +aux crate name in a use import.
    6. +
    7. The proc_macro crate is made available as an extern prelude module. Same +edition 2015 vs newer edition distinction for extern proc_macro; applies.
    8. +
    +

    For example, you might have a test tests/ui/cat/meow.rs and proc-macro +auxiliary tests/ui/cat/auxiliary/whiskers.rs:

    +
    tests/ui/cat/
    +    meow.rs                 # main test file
    +    auxiliary/whiskers.rs   # auxiliary
    +
    +
    // tests/ui/cat/meow.rs
    +
    +//@ proc-macro: whiskers.rs
    +
    +extern crate whiskers; // needed as ui test defaults to edition 2015
    +
    +fn main() {
    +  whiskers::identity!();
    +}
    +
    +
    // tests/ui/cat/auxiliary/whiskers.rs
    +
    +extern crate proc_macro;
    +use proc_macro::*;
    +
    +#[proc_macro]
    +pub fn identity(ts: TokenStream) -> TokenStream {
    +    ts
    +}
    +
    +
    +

    Note: The proc-macro header currently does not work with the +build-aux-doc header for rustdoc tests. In that case, you will need to use +the aux-build header, and use #![crate_type="proc_macro"], and //@ force-host and //@ no-prefer-dynamic headers in the proc-macro.

    +
    +

    Revisions

    +

    Revisions allow a single test file to be used for multiple tests. This is done +by adding a special directive at the top of the file:

    +
    //@ revisions: foo bar baz
    +

    This will result in the test being compiled (and tested) three times, once with +--cfg foo, once with --cfg bar, and once with --cfg baz. You can therefore +use #[cfg(foo)] etc within the test to tweak each of these results.

    +

    You can also customize directives and expected error messages to a particular +revision. To do this, add [revision-name] after the //@ for directives, and +after // for UI error annotations, like so:

    +
    // A flag to pass in only for cfg `foo`:
    +//@[foo]compile-flags: -Z verbose-internals
    +
    +#[cfg(foo)]
    +fn test_foo() {
    +    let x: usize = 32_u32; //[foo]~ ERROR mismatched types
    +}
    +

    Multiple revisions can be specified in a comma-separated list, such as +//[foo,bar,baz]~^.

    +

    In test suites that use the LLVM FileCheck tool, the current revision name is +also registered as an additional prefix for FileCheck directives:

    +
    //@ revisions: NORMAL COVERAGE
    +//@[COVERAGE] compile-flags: -Cinstrument-coverage
    +//@[COVERAGE] needs-profiler-runtime
    +
    +// COVERAGE:   @__llvm_coverage_mapping
    +// NORMAL-NOT: @__llvm_coverage_mapping
    +
    +// CHECK: main
    +fn main() {}
    +

    Note that not all directives have meaning when customized to a revision. For +example, the ignore-test directives (and all "ignore" directives) currently +only apply to the test as a whole, not to particular revisions. The only +directives that are intended to really work when customized to a revision are +error patterns and compiler flags.

    + +

    The following test suites support revisions:

    +
      +
    • ui
    • +
    • assembly
    • +
    • codegen
    • +
    • coverage
    • +
    • debuginfo
    • +
    • rustdoc UI tests
    • +
    • incremental (these are special in that they inherently cannot be run in +parallel)
    • +
    +

    Ignoring unused revision names

    +

    Normally, revision names mentioned in other directives and error annotations +must correspond to an actual revision declared in a revisions directive. This is +enforced by an ./x test tidy check.

    +

    If a revision name needs to be temporarily removed from the revision list for +some reason, the above check can be suppressed by adding the revision name to an +//@ unused-revision-names: header instead.

    +

    Specifying an unused name of * (i.e. //@ unused-revision-names: *) will +permit any unused revision name to be mentioned.

    +

    Compare modes

    +

    Compiletest can be run in different modes, called compare modes, which can be +used to compare the behavior of all tests with different compiler flags enabled. +This can help highlight what differences might appear with certain flags, and +check for any problems that might arise.

    +

    To run the tests in a different mode, you need to pass the --compare-mode CLI +flag:

    +
    ./x test tests/ui --compare-mode=chalk
    +
    +

    The possible compare modes are:

    +
      +
    • polonius — Runs with Polonius with -Zpolonius.
    • +
    • chalk — Runs with Chalk with -Zchalk.
    • +
    • split-dwarf — Runs with unpacked split-DWARF with +-Csplit-debuginfo=unpacked.
    • +
    • split-dwarf-single — Runs with packed split-DWARF with +-Csplit-debuginfo=packed.
    • +
    +

    See UI compare modes for more information about how UI +tests support different output for different modes.

    +

    In CI, compare modes are only used in one Linux builder, and only with the +following settings:

    +
      +
    • tests/debuginfo: Uses split-dwarf mode. This helps ensure that none of the +debuginfo tests are affected when enabling split-DWARF.
    • +
    +

    Note that compare modes are separate to revisions. All revisions +are tested when running ./x test tests/ui, however compare-modes must be +manually run individually via the --compare-mode flag.

    +

    UI tests

    + +

    UI tests are a particular test suite of +compiletest.

    +

    Introduction

    +

    The tests in tests/ui are a collection of general-purpose tests which +primarily focus on validating the console output of the compiler, but can be +used for many other purposes. For example, tests can also be configured to run +the resulting program to verify its +behavior.

    +

    If you need to work with #![no_std] cross-compiling tests, consult the +minicore test auxiliary chapter.

    +

    General structure of a test

    +

    A test consists of a Rust source file located anywhere in the tests/ui +directory, but they should be placed in a suitable sub-directory. For example, +tests/ui/hello.rs is a basic hello-world test.

    +

    Compiletest will use rustc to compile the test, and compare the output against +the expected output which is stored in a .stdout or .stderr file located +next to the test. See Output comparison for more.

    +

    Additionally, errors and warnings should be annotated with comments within the +source file. See Error annotations for more.

    +

    Compiletest directives in the form of special comments prefixed +with //@ control how the test is compiled and what the expected behavior is.

    +

    Tests are expected to fail to compile, since most tests are testing compiler +errors. You can change that behavior with a directive, see Controlling +pass/fail expectations.

    +

    By default, a test is built as an executable binary. If you need a different +crate type, you can use the #![crate_type] attribute to set it as needed.

    +

    Output comparison

    +

    UI tests store the expected output from the compiler in .stderr and .stdout +snapshots next to the test. You normally generate these files with the --bless +CLI option, and then inspect them manually to verify they contain what you +expect.

    +

    The output is normalized to ignore unwanted differences, see the +Normalization section. If the file is missing, then +compiletest expects the corresponding output to be empty.

    +

    There can be multiple stdout/stderr files. The general form is:

    +
    *test-name*`.`*revision*`.`*compare_mode*`.`*extension*
    +
    +
      +
    • test-name cannot contain dots. This is so that the general form of test +output filenames have a predictable form we can pattern match on in order to +track stray test output files.
    • +
    • revision is the revision name. This is not included when +not using revisions.
    • +
    • compare_mode is the compare mode. This will only be +checked when the given compare mode is active. If the file does not exist, +then compiletest will check for a file without the compare mode.
    • +
    • extension is the kind of output being checked: +
        +
      • stderr — compiler stderr
      • +
      • stdout — compiler stdout
      • +
      • run.stderr — stderr when running the test
      • +
      • run.stdout — stdout when running the test
      • +
      • 64bit.stderr — compiler stderr with stderr-per-bitwidth directive on a +64-bit target
      • +
      • 32bit.stderr — compiler stderr with stderr-per-bitwidth directive on a +32-bit target
      • +
      +
    • +
    +

    A simple example would be foo.stderr next to a foo.rs test. +A more complex example would be foo.my-revision.polonius.stderr.

    +

    There are several directives which will change how compiletest +will check for output files:

    +
      +
    • stderr-per-bitwidth — checks separate output files based on the target +pointer width. Consider using the normalize-stderr directive instead (see +Normalization).
    • +
    • dont-check-compiler-stderr — Ignores stderr from the compiler.
    • +
    • dont-check-compiler-stdout — Ignores stdout from the compiler.
    • +
    +

    UI tests run with -Zdeduplicate-diagnostics=no flag which disables rustc's +built-in diagnostic deduplication mechanism. This means you may see some +duplicate messages in the output. This helps illuminate situations where +duplicate diagnostics are being generated.

    +

    Normalization

    +

    The compiler output is normalized to eliminate output difference between +platforms, mainly about filenames.

    +

    Compiletest makes the following replacements on the compiler output:

    +
      +
    • The directory where the test is defined is replaced with $DIR. Example: +/path/to/rust/tests/ui/error-codes
    • +
    • The directory to the standard library source is replaced with $SRC_DIR. +Example: /path/to/rust/library
    • +
    • Line and column numbers for paths in $SRC_DIR are replaced with LL:COL. +This helps ensure that changes to the layout of the standard library do not +cause widespread changes to the .stderr files. Example: +$SRC_DIR/alloc/src/sync.rs:53:46
    • +
    • The base directory where the test's output goes is replaced with +$TEST_BUILD_DIR. This only comes up in a few rare circumstances. Example: +/path/to/rust/build/x86_64-unknown-linux-gnu/test/ui
    • +
    • Tabs are replaced with \t.
    • +
    • Backslashes (\) are converted to forward slashes (/) within paths (using a +heuristic). This helps normalize differences with Windows-style paths.
    • +
    • CRLF newlines are converted to LF.
    • +
    • Error line annotations like //~ ERROR some message are removed.
    • +
    • Various v0 and legacy symbol hashes are replaced with placeholders like +[HASH] or <SYMBOL_HASH>.
    • +
    +

    Additionally, the compiler is run with the -Z ui-testing flag which causes +the compiler itself to apply some changes to the diagnostic output to make it +more suitable for UI testing.

    +

    For example, it will anonymize line numbers in the output (line numbers +prefixing each source line are replaced with LL). In extremely rare +situations, this mode can be disabled with the directive //@ compile-flags: -Z ui-testing=no.

    +

    Note: The line and column numbers for --> lines pointing to the test are not +normalized, and left as-is. This ensures that the compiler continues to point to +the correct location, and keeps the stderr files readable. Ideally all +line/column information would be retained, but small changes to the source +causes large diffs, and more frequent merge conflicts and test errors.

    +

    Sometimes these built-in normalizations are not enough. In such cases, you may +provide custom normalization rules using normalize-* directives, e.g.

    +
    //@ normalize-stdout: "foo" -> "bar"
    +//@ normalize-stderr: "foo" -> "bar"
    +//@ normalize-stderr-32bit: "fn\(\) \(32 bits\)" -> "fn\(\) \($$PTR bits\)"
    +//@ normalize-stderr-64bit: "fn\(\) \(64 bits\)" -> "fn\(\) \($$PTR bits\)"
    +

    This tells the test, on 32-bit platforms, whenever the compiler writes fn() (32 bits) to stderr, it should be normalized to read fn() ($PTR bits) instead. +Similar for 64-bit. The replacement is performed by regexes using default regex +flavor provided by regex crate.

    +

    The corresponding reference file will use the normalized output to test both +32-bit and 64-bit platforms:

    +
    ...
    +   |
    +   = note: source type: fn() ($PTR bits)
    +   = note: target type: u16 (16 bits)
    +...
    +
    +

    Please see ui/transmute/main.rs and main.stderr for a concrete +usage example.

    +

    Error annotations

    +

    Error annotations specify the errors that the compiler is expected to emit. They +are "attached" to the line in source where the error is located.

    +
    fn main() {
    +    boom  //~ ERROR cannot find value `boom` in this scope [E0425]
    +}
    +

    Although UI tests have a .stderr file which contains the entire compiler +output, UI tests require that errors are also annotated within the source. This +redundancy helps avoid mistakes since the .stderr files are usually +auto-generated. It also helps to directly see where the error spans are expected +to point to by looking at one file instead of having to compare the .stderr +file with the source. Finally, they ensure that no additional unexpected errors +are generated.

    +

    They have several forms, but generally are a comment with the diagnostic level +(such as ERROR) and a substring of the expected error output. You don't have +to write out the entire message, just make sure to include the important part of +the message to make it self-documenting.

    +

    Most error annotations need to match with the line of the diagnostic. There are +several ways to match the message with the line (see the examples below):

    +
      +
    • ~: Associates the error level and message with the current line
    • +
    • ~^: Associates the error level and message with the previous error +annotation line. Each caret (^) that you add adds a line to this, so ~^^^ +is three lines above the error annotation line.
    • +
    • ~|: Associates the error level and message with the same line as the +previous comment. This is more convenient than using multiple carets when +there are multiple messages associated with the same line.
    • +
    • ~v: Associates the error level and message with the next error +annotation line. Each symbol (v) that you add adds a line to this, so ~vvv +is three lines below the error annotation line.
    • +
    +

    Example:

    +
    let _ = same_line; //~ ERROR undeclared variable
    +fn meow(_: [u8]) {}
    +//~^ ERROR unsized
    +//~| ERROR anonymous parameters
    +

    The space character between //~ (or other variants) and the subsequent text is +negligible (i.e. there is no semantic difference between //~ ERROR and +//~ERROR although the former is more common in the codebase).

    +

    ~? <diagnostic kind> (example being ~? ERROR) +is used to match diagnostics without line info at all, +or where the line info is outside the main test file1. +These annotations can be placed on any line in the test file.

    +

    Error annotation examples

    +

    Here are examples of error annotations on different lines of UI test source.

    +

    Positioned on error line

    +

    Use the //~ ERROR idiom:

    +
    fn main() {
    +    let x = (1, 2, 3);
    +    match x {
    +        (_a, _x @ ..) => {} //~ ERROR `_x @` is not allowed in a tuple
    +        _ => {}
    +    }
    +}
    +

    Positioned below error line

    +

    Use the //~^ idiom with number of carets in the string to indicate the number +of lines above. In the example below, the error line is four lines above the +error annotation line so four carets are included in the annotation.

    +
    fn main() {
    +    let x = (1, 2, 3);
    +    match x {
    +        (_a, _x @ ..) => {}  // <- the error is on this line
    +        _ => {}
    +    }
    +}
    +//~^^^^ ERROR `_x @` is not allowed in a tuple
    +

    Use same error line as defined on error annotation line above

    +

    Use the //~| idiom to define the same error line as the error annotation +line above:

    +
    struct Binder(i32, i32, i32);
    +
    +fn main() {
    +    let x = Binder(1, 2, 3);
    +    match x {
    +        Binder(_a, _x @ ..) => {}  // <- the error is on this line
    +        _ => {}
    +    }
    +}
    +//~^^^^ ERROR `_x @` is not allowed in a tuple struct
    +//~| ERROR this pattern has 1 field, but the corresponding tuple struct has 3 fields [E0023]
    +

    Positioned above error line

    +

    Use the //~v idiom with number of v's in the string to indicate the number +of lines below. This is typically used in lexer or parser tests matching on errors like unclosed +delimiter or unclosed literal happening at the end of file.

    +
    // ignore-tidy-trailing-newlines
    +//~v ERROR this file contains an unclosed delimiter
    +fn main((ؼ
    +

    Error without line information

    +

    Use //~? to match an error without line information. +//~? is precise and will not match errors if their line information is available. +It should be preferred to using error-pattern, which is imprecise and non-exhaustive.

    +
    //@ compile-flags: --print yyyy
    +
    +//~? ERROR unknown print request: `yyyy`
    +

    error-pattern

    +

    The error-pattern directive can be used for runtime messages, which don't +have a specific span, or in exceptional cases, for compile time messages.

    +

    Let's think about this test:

    +
    fn main() {
    +    let a: *const [_] = &[1, 2, 3];
    +    unsafe {
    +        let _b = (*a)[3];
    +    }
    +}
    +

    We want to ensure this shows "index out of bounds", but we cannot use the ERROR +annotation since the runtime error doesn't have any span. Then it's time to use the +error-pattern directive:

    +
    //@ error-pattern: index out of bounds
    +fn main() {
    +    let a: *const [_] = &[1, 2, 3];
    +    unsafe {
    +        let _b = (*a)[3];
    +    }
    +}
    +

    Use of error-pattern is not recommended in general.

    +

    For strict testing of compile time output, try to use the line annotations //~ as much as +possible, including //~? annotations for diagnostics without spans.

    +

    If the compile time output is target dependent or too verbose, use directive +//@ dont-require-annotations: <diagnostic-kind> to make the line annotation checking +non-exhaustive. +Some of the compiler messages can stay uncovered by annotations in this mode.

    +

    For checking runtime output, //@ check-run-results may be preferable.

    +

    Only use error-pattern if none of the above works.

    +

    Line annotations //~ and error-pattern are compatible and can be used in the same test.

    +

    Diagnostic kinds (error levels)

    +

    The diagnostic kinds that you can have are:

    +
      +
    • ERROR
    • +
    • WARN (or WARNING)
    • +
    • NOTE
    • +
    • HELP
    • +
    • SUGGESTION
    • +
    • RAW
    • +
    +

    The SUGGESTION kind is used for specifying what the expected replacement text +should be for a diagnostic suggestion. +The RAW kind can be used for matching on lines from non-structured output sometimes emitted +by the compiler instead of or in addition to structured json.

    +

    ERROR and WARN kinds are required to be exhaustively covered by line annotations +//~ by default.

    +

    Other kinds only need to be line-annotated if at least one annotation of that kind appears +in the test file. For example, one //~ NOTE will also require all other //~ NOTEs in the file +to be written out explicitly.

    +

    Use directive //@ dont-require-annotations to opt out of exhaustive annotations. +E.g. use //@ dont-require-annotations: NOTE to annotate notes selectively. +Avoid using this directive for ERRORs and WARNings, unless there's a serious reason, like +target-dependent compiler output.

    +

    Some diagnostics are never required to be line-annotated, regardless of their kind or directives, +for example secondary lines of multiline diagnostics, +or ubiquitous diagnostics like aborting due to N previous errors.

    +

    UI tests use the -A unused flag by default to ignore all unused warnings, as +unused warnings are usually not the focus of a test. However, simple code +samples often have unused warnings. If the test is specifically testing an +unused warning, just add the appropriate #![warn(unused)] attribute as needed.

    +

    cfg revisions

    +

    When using revisions, different messages can be +conditionally checked based on the current revision. This is done by placing the +revision cfg name in brackets like this:

    +
    //@ edition:2018
    +//@ revisions: mir thir
    +//@[thir] compile-flags: -Z thir-unsafeck
    +
    +async unsafe fn f() {}
    +
    +async fn g() {
    +    f(); //~ ERROR call to unsafe function is unsafe
    +}
    +
    +fn main() {
    +    f(); //[mir]~ ERROR call to unsafe function is unsafe
    +}
    +

    In this example, the second error message is only emitted in the mir revision. +The thir revision only emits the first error.

    +

    If the cfg causes the compiler to emit different output, then a test can have +multiple .stderr files for the different outputs. In the example above, there +would be a .mir.stderr and .thir.stderr file with the different outputs of +the different revisions.

    +
    +

    Note: cfg revisions also work inside the source code with #[cfg] attributes.

    +

    By convention, the FALSE cfg is used to have an always-false config.

    +
    +

    Controlling pass/fail expectations

    +

    By default, a UI test is expected to generate a compile error because most +of the tests are checking for invalid input and error diagnostics. However, you +can also make UI tests where compilation is expected to succeed, and you can +even run the resulting program. Just add one of the following +directives:

    +
      +
    • Pass directives: +
        +
      • //@ check-pass — compilation should succeed but skip codegen +(which is expensive and isn't supposed to fail in most cases).
      • +
      • //@ build-pass — compilation and linking should succeed but do +not run the resulting binary.
      • +
      • //@ run-pass — compilation should succeed and running the resulting +binary should also succeed.
      • +
      +
    • +
    • Fail directives: +
        +
      • //@ check-fail — compilation should fail (the codegen phase is skipped). +This is the default for UI tests.
      • +
      • //@ build-fail — compilation should fail during the codegen phase. +This will run rustc twice, once to verify that it compiles successfully +without the codegen phase, then a second time the full compile should +fail.
      • +
      • //@ run-fail — compilation should succeed, but running the resulting +binary should fail.
      • +
      +
    • +
    +

    For run-pass and run-fail tests, by default the output of the program itself +is not checked.

    +

    If you want to check the output of running the program, include the +check-run-results directive. This will check for a .run.stderr and +.run.stdout files to compare against the actual output of the program.

    +

    Tests with the *-pass directives can be overridden with the --pass +command-line option:

    +
    ./x test tests/ui --pass check
    +
    +

    The --pass option only affects UI tests. Using --pass check can run the UI +test suite much faster (roughly twice as fast on my system), though obviously +not exercising as much.

    +

    The ignore-pass directive can be used to ignore the --pass CLI flag if the +test won't work properly with that override.

    +

    Known bugs

    +

    The known-bug directive may be used for tests that demonstrate a known bug +that has not yet been fixed. Adding tests for known bugs is helpful for several +reasons, including:

    +
      +
    1. Maintaining a functional test that can be conveniently reused when the bug is +fixed.
    2. +
    3. Providing a sentinel that will fail if the bug is incidentally fixed. This +can alert the developer so they know that the associated issue has been fixed +and can possibly be closed.
    4. +
    +

    This directive takes comma-separated issue numbers as arguments, or "unknown":

    +
      +
    • //@ known-bug: #123, #456 (when the issues are on rust-lang/rust)
    • +
    • //@ known-bug: rust-lang/chalk#123456 +(allows arbitrary text before the #, which is useful when the issue is on another repo)
    • +
    • //@ known-bug: unknown +(when there is no known issue yet; preferrably open one if it does not already exist)
    • +
    +

    Do not include error annotations in a test with +known-bug. The test should still include other normal directives and +stdout/stderr files.

    +

    Test organization

    +

    When deciding where to place a test file, please try to find a subdirectory that +best matches what you are trying to exercise. Do your best to keep things +organized. Admittedly it can be difficult as some tests can overlap different +categories, and the existing layout may not fit well.

    +

    Name the test by a concise description of what the test is checking. Avoid +including the issue number in the test name. See best +practices for a more in-depth discussion of this.

    +

    Ideally, the test should be added to a directory that helps identify what piece +of code is being tested here (e.g., +tests/ui/borrowck/reject-move-out-of-borrow-via-pat.rs)

    +

    When writing a new feature, you may want to create a subdirectory to store +your tests. For example, if you are implementing RFC 1234 ("Widgets"), then it +might make sense to put the tests in a directory like +tests/ui/rfc1234-widgets/.

    +

    In other cases, there may already be a suitable directory.

    +

    Over time, the tests/ui directory has grown very fast. There is a check in +tidy that will ensure none of the subdirectories has more than +1000 entries. Having too many files causes problems because it isn't editor/IDE +friendly and the GitHub UI won't show more than 1000 entries. However, since +tests/ui (UI test root directory) and tests/ui/issues directories have more +than 1000 entries, we set a different limit for those directories. So, please +avoid putting a new test there and try to find a more relevant place.

    +

    For example, if your test is related to closures, you should put it in +tests/ui/closures. When you reach the limit, you could increase it by tweaking +here.

    +

    Rustfix tests

    +

    UI tests can validate that diagnostic suggestions apply correctly and that the +resulting changes compile correctly. This can be done with the run-rustfix +directive:

    +
    //@ run-rustfix
    +//@ check-pass
    +#![crate_type = "lib"]
    +
    +pub struct not_camel_case {}
    +//~^ WARN `not_camel_case` should have an upper camel case name
    +//~| HELP convert the identifier to upper camel case
    +//~| SUGGESTION NotCamelCase
    +

    Rustfix tests should have a file with the .fixed extension which contains the +source file after the suggestion has been applied.

    +
      +
    • When the test is run, compiletest first checks that the correct lint/warning +is generated.
    • +
    • Then, it applies the suggestion and compares against .fixed (they must +match).
    • +
    • Finally, the fixed source is compiled, and this compilation is required to +succeed.
    • +
    +

    Usually when creating a rustfix test you will generate the .fixed file +automatically with the x test --bless option.

    +

    The run-rustfix directive will cause all suggestions to be applied, even if +they are not MachineApplicable. If this is a +problem, then you can add the rustfix-only-machine-applicable directive in +addition to run-rustfix. This should be used if there is a mixture of +different suggestion levels, and some of the non-machine-applicable ones do not +apply cleanly.

    +

    Compare modes

    +

    Compare modes can be used to run all tests with +different flags from what they are normally compiled with. In some cases, this +might result in different output from the compiler. To support this, different +output files can be saved which contain the output based on the compare mode.

    +

    For example, when using the Polonius mode, a test foo.rs will first look for +expected output in foo.polonius.stderr, falling back to the usual foo.stderr +if not found. This is useful as different modes can sometimes result in +different diagnostics and behavior. This can help track which tests have +differences between the modes, and to visually inspect those diagnostic +differences.

    +

    If in the rare case you encounter a test that has different behavior, you can +run something like the following to generate the alternate stderr file:

    +
    ./x test tests/ui --compare-mode=polonius --bless
    +
    +

    Currently none of the compare modes are checked in CI for UI tests.

    +

    rustc_* TEST attributes

    +

    The compiler defines several perma-unstable #[rustc_*] attributes gated behind +the internal feature rustc_attrs that dump extra compiler-internal +information. See the corresponding subsection in compiler debugging for more +details.

    +

    They can be used in tests to more precisely, legibly and easily test internal +compiler state in cases where it would otherwise be very hard to do the same +with "user-facing" Rust alone. Indeed, one could say that this slightly abuses +the term "UI" (user interface) and turns such UI tests from black-box tests +into white-box ones. Use them carefully and sparingly.

    +

    UI test mode preset lint levels

    +

    By default, test suites under UI test mode (tests/ui, tests/ui-fulldeps, +but not tests/rustdoc-ui) will specify

    +
      +
    • -A unused
    • +
    • -A internal_features
    • +
    +

    If:

    +
      +
    • The ui test's pass mode is below run (i.e. check or build).
    • +
    • No compare modes are specified.
    • +
    +

    Since they can be very noisy in ui tests.

    +

    You can override them with compile-flags lint level flags or +in-source lint level attributes as required.

    +

    Note that the rustfix version will not have -A unused passed, +meaning that you may have to #[allow(unused)] to suppress unused +lints on the rustfix'd file (because we might be testing rustfix +on unused lints themselves).

    +
    +
    1. +

      This is a file that has the ~? annotations, +as distinct from aux files, or sources that we have no control over.

      +
    2. +

    Compiletest directives

    + + +

    Directives are special comments that tell compiletest how to build and interpret a test. +They may also appear in rmake.rs run-make tests.

    +

    They are normally put after the short comment that explains the point of this +test. Compiletest test suites use //@ to signal that a comment is a directive. +For example, this test uses the //@ compile-flags command to specify a custom +flag to give to rustc when the test is compiled:

    +
    // Test the behavior of `0 - 1` when overflow checks are disabled.
    +
    +//@ compile-flags: -C overflow-checks=off
    +
    +fn main() {
    +    let x = 0 - 1;
    +    ...
    +}
    +

    Directives can be standalone (like //@ run-pass) or take a value (like //@ compile-flags: -C overflow-checks=off).

    +

    Directives are written one directive per line: you cannot write multiple +directives on the same line. For example, if you write //@ only-x86 only-windows then only-windows is interpreted as a comment, not a separate +directive.

    +

    Listing of compiletest directives

    +

    The following is a list of compiletest directives. Directives are linked to +sections that describe the command in more detail if available. This list may +not be exhaustive. Directives can generally be found by browsing the +TestProps structure found in header.rs from the compiletest source.

    +

    Assembly

    + +
    + +
    DirectiveExplanationSupported test suitesPossible values
    assembly-outputAssembly output kind to checkassemblyemit-asm, bpf-linker, ptx-linker
    +
    +

    Auxiliary builds

    +
    + + + + + + +
    DirectiveExplanationSupported test suitesPossible values
    aux-binBuild a aux binary, made available in auxiliary/bin relative to test directoryAll except run-makePath to auxiliary .rs file
    aux-buildBuild a separate crate from the named source fileAll except run-makePath to auxiliary .rs file
    aux-crateLike aux-build but makes available as extern preludeAll except run-make<extern_prelude_name>=<path/to/aux/file.rs>
    aux-codegen-backendSimilar to aux-build but pass the compiled dylib to -Zcodegen-backend when building the main fileui-fulldepsPath to codegen backend file
    proc-macroSimilar to aux-build, but for aux forces host and don't use -Cprefer-dynamic1.All except run-makePath to auxiliary proc-macro .rs file
    build-aux-docsBuild docs for auxiliaries as wellAll except run-makeN/A
    +
    +

    Controlling outcome expectations

    +

    See Controlling pass/fail +expectations.

    +
    + + + + + + + + + + + +
    DirectiveExplanationSupported test suitesPossible values
    check-passBuilding (no codegen) should passui, crashes, incrementalN/A
    check-failBuilding (no codegen) should failui, crashesN/A
    build-passBuilding should passui, crashes, codegen, incrementalN/A
    build-failBuilding should failui, crashesN/A
    run-passRunning the test binary should passui, crashes, incrementalN/A
    run-failRunning the test binary should failui, crashesN/A
    ignore-passIgnore --pass flagui, crashes, codegen, incrementalN/A
    dont-check-failure-statusDon't check exact failure status (i.e. 1)ui, incrementalN/A
    failure-statusCheckui, crashesAny u16
    should-iceCheck failure status is 101coverage, incrementalN/A
    should-failCompiletest self-testAllN/A
    +
    +

    Controlling output snapshots and normalizations

    +

    See Normalization, Output +comparison and Rustfix tests +for more details.

    +
    + + + + + + + + + + + + + + + + + + + +
    DirectiveExplanationSupported test suitesPossible values
    check-run-resultsCheck run test binary run-{pass,fail} output snapshotui, crashes, incremental if run-passN/A
    error-patternCheck that output contains a specific stringui, crashes, incremental if run-passString
    regex-error-patternCheck that output contains a regex patternui, crashes, incremental if run-passRegex
    check-stdoutCheck stdout against error-patterns from running test binary2ui, crashes, incrementalN/A
    normalize-stderr-32bitNormalize actual stderr (for 32-bit platforms) with a rule "<raw>" -> "<normalized>" before comparing against snapshotui, incremental"<RAW>" -> "<NORMALIZED>", <RAW>/<NORMALIZED> is regex capture and replace syntax
    normalize-stderr-64bitNormalize actual stderr (for 64-bit platforms) with a rule "<raw>" -> "<normalized>" before comparing against snapshotui, incremental"<RAW>" -> "<NORMALIZED>", <RAW>/<NORMALIZED> is regex capture and replace syntax
    normalize-stderrNormalize actual stderr with a rule "<raw>" -> "<normalized>" before comparing against snapshotui, incremental"<RAW>" -> "<NORMALIZED>", <RAW>/<NORMALIZED> is regex capture and replace syntax
    normalize-stdoutNormalize actual stdout with a rule "<raw>" -> "<normalized>" before comparing against snapshotui, incremental"<RAW>" -> "<NORMALIZED>", <RAW>/<NORMALIZED> is regex capture and replace syntax
    dont-check-compiler-stderrDon't check actual compiler stderr vs stderr snapshotuiN/A
    dont-check-compiler-stdoutDon't check actual compiler stdout vs stdout snapshotuiN/A
    dont-require-annotationsDon't require line annotations for the given diagnostic kind (//~ KIND) to be exhaustiveui, incrementalERROR, WARN, NOTE, HELP, SUGGESTION
    run-rustfixApply all suggestions via rustfix, snapshot fixed output, and check fixed output buildsuiN/A
    rustfix-only-machine-applicablerun-rustfix but only machine-applicable suggestionsuiN/A
    exec-envEnv var to set when executing a testui, crashes<KEY>=<VALUE>
    unset-exec-envEnv var to unset when executing a testui, crashesAny env var name
    stderr-per-bitwidthGenerate a stderr snapshot for each bitwidthuiN/A
    forbid-outputA pattern which must not appear in stderr/cfail outputui, incrementalRegex pattern
    run-flagsFlags passed to the test executableuiArbitrary flags
    known-bugNo error annotation needed due to known bugui, crashes, incrementalIssue number #123456
    +
    +

    Controlling when tests are run

    +

    These directives are used to ignore the test in some situations, which +means the test won't be compiled or run.

    +
      +
    • ignore-X where X is a target detail or other criteria on which to ignore the test (see below)
    • +
    • only-X is like ignore-X, but will only run the test on that target or +stage
    • +
    • ignore-auxiliary is intended for files that participate in one or more other +main test files but that compiletest should not try to build the file itself. +Please backlink to which main test is actually using the auxiliary file.
    • +
    • ignore-test always ignores the test. This can be used to temporarily disable +a test if it is currently not working, but you want to keep it in tree to +re-enable it later.
    • +
    +

    Some examples of X in ignore-X or only-X:

    +
      +
    • A full target triple: aarch64-apple-ios
    • +
    • Architecture: aarch64, arm, mips, wasm32, x86_64, x86, +...
    • +
    • OS: android, emscripten, freebsd, ios, linux, macos, windows, +...
    • +
    • Environment (fourth word of the target triple): gnu, msvc, musl
    • +
    • WASM: wasm32-bare matches wasm32-unknown-unknown. emscripten also +matches that target as well as the emscripten targets.
    • +
    • Pointer width: 32bit, 64bit
    • +
    • Endianness: endian-big
    • +
    • Stage: stage1, stage2
    • +
    • Binary format: elf
    • +
    • Channel: stable, beta
    • +
    • When cross compiling: cross-compile
    • +
    • When remote testing is used: remote
    • +
    • When particular debuggers are being tested: cdb, gdb, lldb
    • +
    • When particular debugger versions are matched: ignore-gdb-version
    • +
    • Specific compare modes: compare-mode-polonius, compare-mode-chalk, +compare-mode-split-dwarf, compare-mode-split-dwarf-single
    • +
    • The two different test modes used by coverage tests: +ignore-coverage-map, ignore-coverage-run
    • +
    • When testing a dist toolchain: dist +
        +
      • This needs to be enabled with COMPILETEST_ENABLE_DIST_TESTS=1
      • +
      +
    • +
    • The rustc_abi of the target: e.g. rustc_abi-x86_64-sse2
    • +
    +

    The following directives will check rustc build settings and target +settings:

    +
      +
    • needs-asm-support — ignores if it is running on a target that doesn't have +stable support for asm!
    • +
    • needs-profiler-runtime — ignores the test if the profiler runtime was not +enabled for the target +(build.profiler = true in rustc's bootstrap.toml)
    • +
    • needs-sanitizer-support — ignores if the sanitizer support was not enabled +for the target (sanitizers = true in rustc's bootstrap.toml)
    • +
    • needs-sanitizer-{address,hwaddress,leak,memory,thread} — ignores if the +corresponding sanitizer is not enabled for the target (AddressSanitizer, +hardware-assisted AddressSanitizer, LeakSanitizer, MemorySanitizer or +ThreadSanitizer respectively)
    • +
    • needs-run-enabled — ignores if it is a test that gets executed, and running +has been disabled. Running tests can be disabled with the x test --run=never +flag, or running on fuchsia.
    • +
    • needs-unwind — ignores if the target does not support unwinding
    • +
    • needs-rust-lld — ignores if the rust lld support is not enabled (rust.lld = true in bootstrap.toml)
    • +
    • needs-threads — ignores if the target does not have threading support
    • +
    • needs-subprocess — ignores if the target does not have subprocess support
    • +
    • needs-symlink — ignores if the target does not support symlinks. This can be +the case on Windows if the developer did not enable privileged symlink +permissions.
    • +
    • ignore-std-debug-assertions — ignores if std was built with debug +assertions.
    • +
    • needs-std-debug-assertions — ignores if std was not built with debug +assertions.
    • +
    • ignore-rustc-debug-assertions — ignores if rustc was built with debug +assertions.
    • +
    • needs-rustc-debug-assertions — ignores if rustc was not built with debug +assertions.
    • +
    • needs-target-has-atomic — ignores if target does not have support for all +specified atomic widths, e.g. the test with //@ needs-target-has-atomic: 8, 16, ptr will only run if it supports the comma-separated list of atomic +widths.
    • +
    • needs-dynamic-linking — ignores if target does not support dynamic linking +(which is orthogonal to it being unable to create dylib and cdylib crate types)
    • +
    • needs-crate-type — ignores if target platform does not support one or more +of the comma-delimited list of specified crate types. For example, +//@ needs-crate-type: cdylib, proc-macro will cause the test to be ignored +on wasm32-unknown-unknown target because the target does not support the +proc-macro crate type.
    • +
    • needs-target-std — ignores if target platform does not have std support.
    • +
    +

    The following directives will check LLVM support:

    +
      +
    • exact-llvm-major-version: 19 — ignores if the llvm major version does not +match the specified llvm major version.
    • +
    • min-llvm-version: 13.0 — ignored if the LLVM version is less than the given +value
    • +
    • min-system-llvm-version: 12.0 — ignored if using a system LLVM and its +version is less than the given value
    • +
    • max-llvm-major-version: 19 — ignored if the LLVM major version is higher +than the given major version
    • +
    • ignore-llvm-version: 9.0 — ignores a specific LLVM version
    • +
    • ignore-llvm-version: 7.0 - 9.9.9 — ignores LLVM versions in a range +(inclusive)
    • +
    • needs-llvm-components: powerpc — ignores if the specific LLVM component was +not built. Note: The test will fail on CI (when +COMPILETEST_REQUIRE_ALL_LLVM_COMPONENTS is set) if the component does not +exist.
    • +
    • needs-forced-clang-based-tests — test is ignored unless the environment +variable RUSTBUILD_FORCE_CLANG_BASED_TESTS is set, which enables building +clang alongside LLVM +
        +
      • This is only set in two CI jobs (x86_64-gnu-debug and +aarch64-gnu-debug), which only runs a +subset of run-make tests. Other tests with this directive will not +run at all, which is usually not what you want.
      • +
      +
    • +
    +

    See also Debuginfo tests for directives for +ignoring debuggers.

    +

    Affecting how tests are built

    +
    + + + + + + +
    DirectiveExplanationSupported test suitesPossible values
    compile-flagsFlags passed to rustc when building the test or aux fileAll except for run-makeAny valid rustc flags, e.g. -Awarnings -Dfoo. Cannot be -Cincremental or --edition
    editionThe edition used to build the testAll except for run-makeAny valid --edition value
    rustc-envEnv var to set when running rustcAll except for run-make<KEY>=<VALUE>
    unset-rustc-envEnv var to unset when running rustcAll except for run-makeAny env var name
    incrementalProper incremental support for tests outside of incremental test suiteui, crashesN/A
    no-prefer-dynamicDon't use -C prefer-dynamic, don't build as a dylib via a --crate-type=dylib preset flagui, crashesN/A
    +
    +

    Tests (outside of run-make) that want to use incremental tests not in the +incremental test-suite must not pass -C incremental via compile-flags, and +must instead use the //@ incremental directive.

    +

    Consider writing the test as a proper incremental test instead.

    +
    +

    Rustdoc

    +
    + +
    DirectiveExplanationSupported test suitesPossible values
    doc-flagsFlags passed to rustdoc when building the test or aux filerustdoc, rustdoc-js, rustdoc-jsonAny valid rustdoc flags
    +
    +

    Test-suite-specific directives

    +

    The test suites rustdoc, rustdoc-js/rustdoc-js-std +and rustdoc-json each feature an additional set of directives whose basic +syntax resembles the one of compiletest directives but which are ultimately read and checked by +separate tools. For more information, please read their respective chapters as linked above.

    +

    Pretty printing

    +

    See Pretty-printer.

    +

    Misc directives

    +
      +
    • no-auto-check-cfg — disable auto check-cfg (only for --check-cfg tests)
    • +
    • revisions — compile multiple times
    • +
    • unused-revision-names - +suppress tidy checks for mentioning unknown revision names +-forbid-output — incremental cfail rejects +output pattern
    • +
    • should-ice — incremental cfail should +ICE
    • +
    • reference — an annotation linking to a rule in the reference
    • +
    +

    Tool-specific directives

    +

    The following directives affect how certain command-line tools are invoked, in +test suites that use those tools:

    + +

    Substitutions

    +

    Directive values support substituting a few variables which will be replaced +with their corresponding value. For example, if you need to pass a compiler flag +with a path to a specific file, something like the following could work:

    +
    //@ compile-flags: --remap-path-prefix={{src-base}}=/the/src
    +

    Where the sentinel {{src-base}} will be replaced with the appropriate path +described below:

    +
      +
    • {{cwd}}: The directory where compiletest is run from. This may not be the +root of the checkout, so you should avoid using it where possible. +
        +
      • Examples: /path/to/rust, /path/to/build/root
      • +
      +
    • +
    • {{src-base}}: The directory where the test is defined. This is equivalent to +$DIR for output normalization. +
        +
      • Example: /path/to/rust/tests/ui/error-codes
      • +
      +
    • +
    • {{build-base}}: The base directory where the test's output goes. This is +equivalent to $TEST_BUILD_DIR for output normalization. +
        +
      • Example: /path/to/rust/build/x86_64-unknown-linux-gnu/test/ui
      • +
      +
    • +
    • {{rust-src-base}}: The sysroot directory where libstd/libcore/... are +located
    • +
    • {{sysroot-base}}: Path of the sysroot directory used to build the test. +
        +
      • Mainly intended for ui-fulldeps tests that run the compiler via API.
      • +
      +
    • +
    • {{target-linker}}: Linker that would be passed to -Clinker for this test, +or blank if no linker override is active. +
        +
      • Mainly intended for ui-fulldeps tests that run the compiler via API.
      • +
      +
    • +
    • {{target}}: The target the test is compiling for +
        +
      • Example: x86_64-unknown-linux-gnu
      • +
      +
    • +
    +

    See +tests/ui/commandline-argfile.rs +for an example of a test that uses this substitution.

    +

    Adding a directive

    +

    One would add a new directive if there is a need to define some test property or +behavior on an individual, test-by-test basis. A directive property serves as +the directive's backing store (holds the command's current value) at runtime.

    +

    To add a new directive property:

    +
      +
    1. Look for the pub struct TestProps declaration in +src/tools/compiletest/src/header.rs and add the new public property to +the end of the declaration.
    2. +
    3. Look for the impl TestProps implementation block immediately following the +struct declaration and initialize the new property to its default value.
    4. +
    +

    Adding a new directive parser

    +

    When compiletest encounters a test file, it parses the file a line at a time +by calling every parser defined in the Config struct's implementation block, +also in src/tools/compiletest/src/header.rs (note that the Config struct's +declaration block is found in src/tools/compiletest/src/common.rs). +TestProps's load_from() method will try passing the current line of text to +each parser, which, in turn typically checks to see if the line begins with a +particular commented (//@) directive such as //@ must-compile-successfully +or //@ failure-status. Whitespace after the comment marker is optional.

    +

    Parsers will override a given directive property's default value merely by being +specified in the test file as a directive or by having a parameter value +specified in the test file, depending on the directive.

    +

    Parsers defined in impl Config are typically named parse_<directive-name> +(note kebab-case <directive-command> transformed to snake-case +<directive_command>). impl Config also defines several 'low-level' parsers +which make it simple to parse common patterns like simple presence or not +(parse_name_directive()), directive:parameter(s) +(parse_name_value_directive()), optional parsing only if a particular cfg +attribute is defined (has_cfg_prefix()) and many more. The low-level parsers +are found near the end of the impl Config block; be sure to look through them +and their associated parsers immediately above to see how they are used to avoid +writing additional parsing code unnecessarily.

    +

    As a concrete example, here is the implementation for the +parse_failure_status() parser, in src/tools/compiletest/src/header.rs:

    +
    @@ -232,6 +232,7 @@ pub struct TestProps {
    +     // customized normalization rules
    +     pub normalize_stdout: Vec<(String, String)>,
    +     pub normalize_stderr: Vec<(String, String)>,
    ++    pub failure_status: i32,
    + }
    +
    + impl TestProps {
    +@@ -260,6 +261,7 @@ impl TestProps {
    +             run_pass: false,
    +             normalize_stdout: vec![],
    +             normalize_stderr: vec![],
    ++            failure_status: 101,
    +         }
    +     }
    +
    +@@ -383,6 +385,10 @@ impl TestProps {
    +             if let Some(rule) = config.parse_custom_normalization(ln, "normalize-stderr") {
    +                 self.normalize_stderr.push(rule);
    +             }
    ++
    ++            if let Some(code) = config.parse_failure_status(ln) {
    ++                self.failure_status = code;
    ++            }
    +         });
    +
    +         for key in &["RUST_TEST_NOCAPTURE", "RUST_TEST_THREADS"] {
    +@@ -488,6 +494,13 @@ impl Config {
    +         self.parse_name_directive(line, "pretty-compare-only")
    +     }
    +
    ++    fn parse_failure_status(&self, line: &str) -> Option<i32> {
    ++        match self.parse_name_value_directive(line, "failure-status") {
    ++            Some(code) => code.trim().parse::<i32>().ok(),
    ++            _ => None,
    ++        }
    ++    }
    +
    +

    Implementing the behavior change

    +

    When a test invokes a particular directive, it is expected that some behavior +will change as a result. What behavior, obviously, will depend on the purpose of +the directive. In the case of failure-status, the behavior that changes is +that compiletest expects the failure code defined by the directive invoked in +the test, rather than the default value.

    +

    Although specific to failure-status (as every directive will have a different +implementation in order to invoke behavior change) perhaps it is helpful to see +the behavior change implementation of one case, simply as an example. To +implement failure-status, the check_correct_failure_status() function found +in the TestCx implementation block, located in +src/tools/compiletest/src/runtest.rs, was modified as per below:

    +
    @@ -295,11 +295,14 @@ impl<'test> TestCx<'test> {
    +     }
    +
    +     fn check_correct_failure_status(&self, proc_res: &ProcRes) {
    +-        // The value the Rust runtime returns on failure
    +-        const RUST_ERR: i32 = 101;
    +-        if proc_res.status.code() != Some(RUST_ERR) {
    ++        let expected_status = Some(self.props.failure_status);
    ++        let received_status = proc_res.status.code();
    ++
    ++        if expected_status != received_status {
    +             self.fatal_proc_rec(
    +-                &format!("failure produced the wrong error: {}", proc_res.status),
    ++                &format!("Error: expected failure status ({:?}) but received status {:?}.",
    ++                         expected_status,
    ++                         received_status),
    +                 proc_res,
    +             );
    +         }
    +@@ -320,7 +323,6 @@ impl<'test> TestCx<'test> {
    +         );
    +
    +         let proc_res = self.exec_compiled_test();
    +-
    +         if !proc_res.status.success() {
    +             self.fatal_proc_rec("test run failed!", &proc_res);
    +         }
    +@@ -499,7 +501,6 @@ impl<'test> TestCx<'test> {
    +                 expected,
    +                 actual
    +             );
    +-            panic!();
    +         }
    +     }
    +
    +

    Note the use of self.props.failure_status to access the directive property. In +tests which do not specify the failure status directive, +self.props.failure_status will evaluate to the default value of 101 at the +time of this writing. But for a test which specifies a directive of, for +example, //@ failure-status: 1, self.props.failure_status will evaluate to +1, as parse_failure_status() will have overridden the TestProps default +value, for that test specifically.

    +
    +
    1. +

      please see the Auxiliary proc-macro section in the +compiletest chapter for specifics.

      +
    2. +
    3. +

      presently this has a weird quirk +where the test binary's stdout and stderr gets concatenated and then +error-patterns are matched on this combined output, which is ??? slightly +questionable to say the least.

      +
    4. +

    minicore test auxiliary: using core stubs

    + +

    tests/auxiliary/minicore.rs is a test auxiliary for +ui/codegen/assembly test suites. It provides core stubs for tests that need to +build for cross-compiled targets but do not need/want to run.

    +
    +

    Please note that minicore is only intended for core items, and explicitly +not std or alloc items because core items are applicable to a wider +range of tests.

    +
    +

    A test can use minicore by specifying the //@ add-core-stubs directive. +Then, mark the test with #![feature(no_core)] + #![no_std] + #![no_core]. +Due to Edition 2015 extern prelude rules, you will probably need to declare +minicore as an extern crate.

    +

    Implied compiler flags

    +

    Due to the no_std + no_core nature of these tests, //@ add-core-stubs +implies and requires that the test will be built with -C panic=abort. +Unwinding panics are not supported.

    +

    Tests will also be built with -C force-unwind-tables=yes to preserve CFI +directives in assembly tests.

    +

    TL;DR: //@ add-core-stubs implies two compiler flags:

    +
      +
    1. -C panic=abort
    2. +
    3. -C force-unwind-tables=yes
    4. +
    +

    Adding more core stubs

    +

    If you find a core item to be missing from the minicore stub, consider +adding it to the test auxiliary if it's likely to be used or is already needed +by more than one test.

    +

    Example codegen test that uses minicore

    +
    #![allow(unused)]
    +fn main() {
    +//@ add-core-stubs
    +//@ revisions: meow bark
    +//@[meow] compile-flags: --target=x86_64-unknown-linux-gnu
    +//@[meow] needs-llvm-components: x86
    +//@[bark] compile-flags: --target=wasm32-unknown-unknown
    +//@[bark] needs-llvm-components: webassembly
    +
    +#![crate_type = "lib"]
    +#![feature(no_core)]
    +#![no_std]
    +#![no_core]
    +
    +extern crate minicore;
    +use minicore::*;
    +
    +struct Meow;
    +impl Copy for Meow {} // `Copy` here is provided by `minicore`
    +
    +// CHECK-LABEL: meow
    +#[unsafe(no_mangle)]
    +fn meow() {}
    +}
    +

    Ecosystem testing

    +

    Rust tests integration with real-world code in the ecosystem to catch +regressions and make informed decisions about the evolution of the language.

    +

    Testing methods

    +

    Crater

    +

    Crater is a tool which runs tests on many thousands of public projects. This +tool has its own separate infrastructure for running, and is not run as part of +CI. See the Crater chapter for more details.

    +

    cargotest

    +

    cargotest is a small tool which runs cargo test on a few sample projects +(such as servo, ripgrep, tokei, etc.). This runs as part of CI and ensures +there aren't any significant regressions:

    +
    ./x test src/tools/cargotest
    +
    +

    Large OSS Project builders

    +

    We have CI jobs that build large open-source Rust projects that are used as +regression tests in CI. Our integration jobs build the following projects:

    + +

    Crater

    +

    Crater is a tool for compiling and +running tests for every crate on crates.io (and a few on +GitHub). It is mainly used for checking the extent of breakage when implementing +potentially breaking changes and ensuring lack of breakage by running beta vs +stable compiler versions.

    +

    When to run Crater

    +

    You should request a crater run if your PR makes large changes to the compiler +or could cause breakage. If you are unsure, feel free to ask your PR's reviewer.

    +

    Requesting Crater Runs

    +

    The rust team maintains a few machines that can be used for running crater runs +on the changes introduced by a PR. If your PR needs a crater run, leave a +comment for the triage team in the PR thread. Please inform the team whether you +require a "check-only" crater run, a "build only" crater run, or a +"build-and-test" crater run. The difference is primarily in time; the +conservative (if you're not sure) option is to go for the build-and-test run. If +making changes that will only have an effect at compile-time (e.g., implementing +a new trait) then you only need a check run.

    +

    Your PR will be enqueued by the triage team and the results will be posted when +they are ready. Check runs will take around ~3-4 days, with the other two taking +5-6 days on average.

    +

    While crater is really useful, it is also important to be aware of a few +caveats:

    +
      +
    • +

      Not all code is on crates.io! There is a lot of code in repos on GitHub and +elsewhere. Also, companies may not wish to publish their code. Thus, a +successful crater run is not a magically green light that there will be no +breakage; you still need to be careful.

      +
    • +
    • +

      Crater only runs Linux builds on x86_64. Thus, other architectures and +platforms are not tested. Critically, this includes Windows.

      +
    • +
    • +

      Many crates are not tested. This could be for a lot of reasons, including that +the crate doesn't compile any more (e.g. used old nightly features), has +broken or flaky tests, requires network access, or other reasons.

      +
    • +
    • +

      Before crater can be run, @bors try needs to succeed in building artifacts. +This means that if your code doesn't compile, you cannot run crater.

      +
    • +
    +

    Fuchsia integration tests

    +

    Fuchsia is an open-source operating system with about 2 +million lines of Rust code.1 It has caught a large number of regressions +in the past and was subsequently included in CI.

    +

    What to do if the Fuchsia job breaks?

    +

    Please contact the fuchsia ping group and ask them for help.

    +
    @rustbot ping fuchsia
    +
    +

    Building Fuchsia in CI

    +

    Fuchsia builds as part of the suite of bors tests that run before a pull request +is merged.

    +

    If you are worried that a pull request might break the Fuchsia builder and want +to test it out before submitting it to the bors queue, simply add this line to +your PR description:

    +
    +

    try-job: x86_64-fuchsia

    +
    +

    Then when you @bors try it will pick the job that builds Fuchsia.

    +

    Building Fuchsia locally

    +

    Because Fuchsia uses languages other than Rust, it does not use Cargo as a build +system. It also requires the toolchain build to be configured in a certain +way.

    +

    The recommended way to build Fuchsia is to use the Docker scripts that check out +and run a Fuchsia build for you. If you've run Docker tests before, you can +simply run this command from your Rust checkout to download and build Fuchsia +using your local Rust toolchain.

    +
    src/ci/docker/run.sh x86_64-fuchsia
    +
    +

    See the Testing with Docker chapter for more details on how to run +and debug jobs with Docker.

    +

    Note that a Fuchsia checkout is large – as of this writing, a checkout and +build takes 46G of space – and as you might imagine, it takes a while to +complete.

    +

    Modifying the Fuchsia checkout

    +

    The main reason you would want to build Fuchsia locally is because you need to +investigate a regression. After running a Docker build, you'll find the Fuchsia +checkout inside the obj/fuchsia directory of your Rust checkout. If you +modify the KEEP_CHECKOUT line in the build-fuchsia.sh script to +KEEP_CHECKOUT=1, you can change the checkout as needed and rerun the build +command above. This will reuse all the build results from before.

    +

    You can find more options to customize the Fuchsia checkout in the +build-fuchsia.sh script.

    +

    Customizing the Fuchsia build

    +

    You can find more info about the options used to build Fuchsia in Rust CI in the +build_fuchsia_from_rust_ci.sh script invoked by build-fuchsia.sh.

    +

    The Fuchsia build system uses GN, a metabuild system that generates Ninja +files and then hands off the work of running the build to Ninja.

    +

    Fuchsia developers use fx to run builds and perform other development tasks. +This tool is located in .jiri_root/bin of the Fuchsia checkout; you may need +to add this to your $PATH for some workflows.

    +

    There are a few fx subcommands that are relevant, including:

    +
      +
    • fx set accepts build arguments, writes them to out/default/args.gn, and +runs GN.
    • +
    • fx build builds the Fuchsia project using Ninja. It will automatically pick +up changes to build arguments and rerun GN. By default it builds everything, +but it also accepts target paths to build specific targets (see below).
    • +
    • fx clippy runs Clippy on specific Rust targets (or all of them). We use this +in the Rust CI build to avoid running codegen on most Rust targets. Underneath +it invokes Ninja, just like fx build. The clippy results are saved in json +files inside the build output directory before being printed.
    • +
    +

    Target paths

    +

    GN uses paths like the following to identify build targets:

    +
    //src/starnix/kernel:starnix_core
    +
    +

    The initial // means the root of the checkout, and the remaining slashes are +directory names. The string after : is the target name of a target defined +in the BUILD.gn file of that directory.

    +

    The target name can be omitted if it is the same as the directory name. In other +words, //src/starnix/kernel is the same as //src/starnix/kernel:kernel.

    +

    These target paths are used inside BUILD.gn files to reference dependencies, +and can also be used in fx build.

    +

    Modifying compiler flags

    +

    You can put custom compiler flags inside a GN config that is added to a +target. As a simple example:

    +
    config("everybody_loops") {
    +    rustflags = [ "-Zeverybody-loops" ]
    +}
    +
    +rustc_binary("example") {
    +    crate_root = "src/bin.rs"
    +    # ...existing keys here...
    +    configs += [ ":everybody_loops" ]
    +}
    +
    +

    This will add the flag -Zeverybody-loops to rustc when building the example +target. Note that you can also use public_configs for a config to be added +to every target that depends on that target.

    +

    If you want to add a flag to every Rust target in the build, you can add +rustflags to the //build/config:compiler config or to the OS-specific +configs referenced in that file. Note that cflags and ldflags are ignored on +Rust targets.

    +

    Running ninja and rustc commands directly

    +

    Going down one layer, fx build invokes ninja, which in turn eventually +invokes rustc. All build actions are run inside the out directory, which is +usually out/default inside the Fuchsia checkout.

    +

    You can get ninja to print the actual command it invokes by forcing that command +to fail, e.g. by adding a syntax error to one of the source files of the target. +Once you have the command, you can run it from inside the output directory.

    +

    After changing the toolchain itself, the build setting rustc_version_string in +out/default/args.gn needs to be changed so that fx build or ninja will +rebuild all the Rust targets. This can be done in a text editor and the contents +of the string do not matter, as long as it changes from one build to the next. +build_fuchsia_from_rust_ci.sh does this for you by hashing the toolchain +directory.

    +

    The Fuchsia website has more detailed documentation of the build system.

    +

    Other tips and tricks

    +

    When using build_fuchsia_from_rust_ci.sh you can comment out the fx set +command after the initial run so it won't rerun GN each time. If you do this you +can also comment out the version_string line to save a couple seconds.

    +

    export NINJA_PERSISTENT_MODE=1 to get faster ninja startup times after the +initial build.

    +

    Fuchsia target support

    +

    To learn more about Fuchsia target support, see the Fuchsia chapter in the +rustc book.

    +
    +
    1. +

      As of June 2024, Fuchsia had about 2 million lines of first-party Rust +code and a roughly equal amount of third-party code, as counted by tokei +(excluding comments and blanks).

      +
    2. +

    Rust for Linux integration tests

    +

    Rust for Linux (RfL) is an effort for adding +support for the Rust programming language into the Linux kernel.

    +

    What to do if the Rust for Linux job breaks?

    +

    If a PR breaks the Rust for Linux CI job, then:

    +
      +
    • If the breakage was unintentional and seems spurious, then let RfL +know and retry. +
        +
      • If the PR is urgent and retrying doesn't fix it, then disable the CI job +temporarily (comment out the image: x86_64-rust-for-linux job in +src/ci/github-actions/jobs.yml).
      • +
      +
    • +
    • If the breakage was unintentional, then change the PR to resolve the breakage.
    • +
    • If the breakage was intentional, then let RfL know and discuss +what will the kernel need to change. +
        +
      • If the PR is urgent, then disable the CI job temporarily (comment out +the image: x86_64-rust-for-linux job in src/ci/github-actions/jobs.yml).
      • +
      • If the PR can wait a few days, then wait for RfL maintainers to provide a +new Linux kernel commit hash with the needed changes done, and apply it to +the PR, which would confirm the changes work (update the LINUX_VERSION +environment variable in src/ci/docker/scripts/rfl-build.sh).
      • +
      +
    • +
    +

    If you need to contact the RfL developers, you can ping the Rust for Linux +ping group to ask for help:

    +
    @rustbot ping rfl
    +
    +

    Building Rust for Linux in CI

    +

    Rust for Linux builds as part of the suite of bors tests that run before a pull +request is merged.

    +

    The workflow builds a stage1 sysroot of the Rust compiler, downloads the Linux +kernel, and tries to compile several Rust for Linux drivers and examples using +this sysroot. RfL uses several unstable compiler/language features, therefore +this workflow notifies us if a given compiler change would break it.

    +

    If you are worried that a pull request might break the Rust for Linux builder +and want to test it out before submitting it to the bors queue, simply add this +line to your PR description:

    +
    +

    try-job: x86_64-rust-for-linux

    +
    +

    Then when you @bors try it will pick the job that builds the Rust for Linux +integration.

    +

    Codegen backend testing

    +

    See also the Code generation chapter.

    +

    In addition to the primary LLVM codegen backend, the rust-lang/rust CI also runs tests of the cranelift and GCC codegen backends in certain test jobs.

    +

    For more details on the tests involved, see:

    + +

    Cranelift codegen backend tests

    +

    TODO: please add some more information to this page.

    +

    GCC codegen backend tests

    +

    TODO: please add some more information to this page.

    +

    Performance testing

    +

    rustc-perf

    +

    A lot of work is put into improving the performance of the compiler and +preventing performance regressions.

    +

    The rustc-perf project provides +several services for testing and tracking performance. It provides hosted +infrastructure for running benchmarks as a service. At this time, only +x86_64-unknown-linux-gnu builds are tracked.

    +

    A "perf run" is used to compare the performance of the compiler in different +configurations for a large collection of popular crates. Different +configurations include "fresh builds", builds with incremental compilation, etc.

    +

    The result of a perf run is a comparison between two versions of the compiler +(by their commit hashes).

    +

    You can also use rustc-perf to manually benchmark and profile the compiler +locally.

    +

    Automatic perf runs

    +

    After every PR is merged, a suite of benchmarks are run against the compiler. +The results are tracked over time on the https://perf.rust-lang.org/ website. +Any changes are noted in a comment on the PR.

    +

    Manual perf runs

    +

    Additionally, performance tests can be ran before a PR is merged on an as-needed +basis. You should request a perf run if your PR may affect performance, +especially if it can affect performance adversely.

    +

    To evaluate the performance impact of a PR, write this comment on the PR:

    +

    @bors try @rust-timer queue

    +
    +

    Note: Only users authorized to do perf runs are allowed to post this +comment. Teams that are allowed to use it are tracked in the Teams +repository with the perf = true value in +the [permissions] section (and bors permissions are also required). If you +are not on one of those teams, feel free to ask for someone to post it for you +(either on Zulip or ask the assigned reviewer).

    +
    +

    This will first tell bors to do a "try" build which do a full release build for +x86_64-unknown-linux-gnu. After the build finishes, it will place it in the +queue to run the performance suite against it. After the performance tests +finish, the bot will post a comment on the PR with a summary and a link to a +full report.

    +

    If you want to do a perf run for an already built artifact (e.g. for a previous +try build that wasn't benchmarked yet), you can run this instead:

    +

    @rust-timer build <commit-sha>

    +

    You cannot benchmark the same artifact twice though.

    +

    More information about the available perf bot commands can be found +here.

    +

    More details about the benchmarking process itself are available in the perf +collector +documentation.

    +

    Suggest tests tool

    +

    This chapter is about the internals of and contribution instructions for the +suggest-tests tool. For a high-level overview of the tool, see this +section. This tool is currently in a beta +state and is tracked by this +issue on Github. Currently the number of tests it will suggest are very limited +in scope, we are looking to expand this (contributions welcome!).

    +

    Internals

    +

    The tool is defined in a separate crate +(src/tools/suggest-tests) +which outputs suggestions which are parsed by a shim in bootstrap +(src/bootstrap/src/core/build_steps/suggest.rs). +The only notable thing the bootstrap shim does is (when invoked with the --run +flag) use bootstrap's internal mechanisms to create a new Builder and uses it +to invoke the suggested commands. The suggest-tests crate is where the fun +happens, two kinds of suggestions are defined: "static" and "dynamic" +suggestions.

    +

    Static suggestions

    +

    Defined +here. +Static suggestions are simple: they are just +globs which map to a x command. In +suggest-tests, this is implemented with a simple macro_rules macro.

    +

    Dynamic suggestions

    +

    Defined +here. +These are more complicated than static suggestions and are implemented as +functions with the following signature: fn(&Path) -> Vec<Suggestion>. In other +words, each suggestion takes a path to a modified file and (after running +arbitrary Rust code) can return any number of suggestions, or none. Dynamic +suggestions are useful for situations where fine-grained control over +suggestions is needed. For example, modifications to the compiler/xyz/ path +should trigger the x test compiler/xyz suggestion. In the future, dynamic +suggestions might even read file contents to determine if (what) tests should +run.

    +

    Adding a suggestion

    +

    The following steps should serve as a rough guide to add suggestions to +suggest-tests (very welcome!):

    +
      +
    1. Determine the rules for your suggestion. Is it simple and operates only on a +single path or does it match globs? Does it need fine-grained control over +the resulting command or does "one size fit all"?
    2. +
    3. Based on the previous step, decide if your suggestion should be implemented +as either static or dynamic.
    4. +
    5. Implement the suggestion. If it is dynamic then a test is highly recommended, +to verify that your logic is correct and to give an example of the +suggestion. See the +tests.rs +file.
    6. +
    7. Open a PR implementing your suggestion. (TODO: add example PR)
    8. +
    +

    Miscellaneous testing-related info

    +

    RUSTC_BOOTSTRAP and stability

    + +

    This is a bootstrap/compiler implementation detail, but it can also be useful +for testing:

    +
      +
    • RUSTC_BOOTSTRAP=1 will "cheat" and bypass usual stability checking, allowing +you to use unstable features and cli flags on a stable rustc.
    • +
    • RUSTC_BOOTSTRAP=-1 will force a given rustc to pretend that is a stable +compiler, even if it's actually a nightly rustc. This is useful because some +behaviors of the compiler (e.g. diagnostics) can differ depending on whether +the compiler is nightly or not.
    • +
    +

    In ui tests and other test suites that support //@ rustc-env, you can specify

    +
    // Force unstable features to be usable on stable rustc
    +//@ rustc-env:RUSTC_BOOTSTRAP=1
    +
    +// Or force nightly rustc to pretend it is a stable rustc
    +//@ rustc-env:RUSTC_BOOTSTRAP=-1
    +

    For run-make tests, //@ rustc-env is not supported. You can do something +like the following for individual rustc invocations.

    +
    use run_make_support::rustc;
    +
    +fn main() {
    +    rustc()
    +        // Pretend that I am very stable
    +        .env("RUSTC_BOOTSTRAP", "-1")
    +        //...
    +        .run();
    +}
    +

    Debugging the compiler

    + +

    This chapter contains a few tips to debug the compiler. These tips aim to be +useful no matter what you are working on. Some of the other chapters have +advice about specific parts of the compiler (e.g. the Queries Debugging and +Testing chapter or the LLVM Debugging +chapter).

    +

    Configuring the compiler

    +

    By default, rustc is built without most debug information. To enable debug info, +set debug = true in your bootstrap.toml.

    +

    Setting debug = true turns on many different debug options (e.g., debug-assertions, +debug-logging, etc.) which can be individually tweaked if you want to, but many people +simply set debug = true.

    +

    If you want to use GDB to debug rustc, please set bootstrap.toml with options:

    +
    [rust]
    +debug = true
    +debuginfo-level = 2
    +
    +
    +

    NOTE: +This will use a lot of disk space +(upwards of 35GB), +and will take a lot more compile time. +With debuginfo-level = 1 (the default when debug = true), +you will be able to track the execution path, +but will lose the symbol information for debugging.

    +
    +

    The default configuration will enable symbol-mangling-version v0. +This requires at least GDB v10.2, +otherwise you need to disable new symbol-mangling-version in bootstrap.toml.

    +
    [rust]
    +new-symbol-mangling = false
    +
    +
    +

    See the comments in bootstrap.example.toml for more info.

    +
    +

    You will need to rebuild the compiler after changing any configuration option.

    +

    Suppressing the ICE file

    +

    By default, if rustc encounters an Internal Compiler Error (ICE) it will dump the ICE contents to an +ICE file within the current working directory named rustc-ice-<timestamp>-<pid>.txt. If this is +not desirable, you can prevent the ICE file from being created with RUSTC_ICE=0.

    +

    Getting a backtrace

    +

    When you have an ICE (panic in the compiler), you can set +RUST_BACKTRACE=1 to get the stack trace of the panic! like in +normal Rust programs. IIRC backtraces don't work on MinGW, +sorry. If you have trouble or the backtraces are full of unknown, +you might want to find some way to use Linux, Mac, or MSVC on Windows.

    +

    In the default configuration (without debug set to true), you don't have line numbers +enabled, so the backtrace looks like this:

    +
    stack backtrace:
    +   0: std::sys::imp::backtrace::tracing::imp::unwind_backtrace
    +   1: std::sys_common::backtrace::_print
    +   2: std::panicking::default_hook::{{closure}}
    +   3: std::panicking::default_hook
    +   4: std::panicking::rust_panic_with_hook
    +   5: std::panicking::begin_panic
    +   (~~~~ LINES REMOVED BY ME FOR BREVITY ~~~~)
    +  32: rustc_typeck::check_crate
    +  33: <std::thread::local::LocalKey<T>>::with
    +  34: <std::thread::local::LocalKey<T>>::with
    +  35: rustc::ty::context::TyCtxt::create_and_enter
    +  36: rustc_driver::driver::compile_input
    +  37: rustc_driver::run_compiler
    +
    +

    If you set debug = true, you will get line numbers for the stack trace. +Then the backtrace will look like this:

    +
    stack backtrace:
    +   (~~~~ LINES REMOVED BY ME FOR BREVITY ~~~~)
    +             at /home/user/rust/compiler/rustc_typeck/src/check/cast.rs:110
    +   7: rustc_typeck::check::cast::CastCheck::check
    +             at /home/user/rust/compiler/rustc_typeck/src/check/cast.rs:572
    +             at /home/user/rust/compiler/rustc_typeck/src/check/cast.rs:460
    +             at /home/user/rust/compiler/rustc_typeck/src/check/cast.rs:370
    +   (~~~~ LINES REMOVED BY ME FOR BREVITY ~~~~)
    +  33: rustc_driver::driver::compile_input
    +             at /home/user/rust/compiler/rustc_driver/src/driver.rs:1010
    +             at /home/user/rust/compiler/rustc_driver/src/driver.rs:212
    +  34: rustc_driver::run_compiler
    +             at /home/user/rust/compiler/rustc_driver/src/lib.rs:253
    +
    +

    -Z flags

    +

    The compiler has a bunch of -Z * flags. These are unstable flags that are only +enabled on nightly. Many of them are useful for debugging. To get a full listing +of -Z flags, use -Z help.

    +

    One useful flag is -Z verbose-internals, which generally enables printing more +info that could be useful for debugging.

    +

    Right below you can find elaborate explainers on a selected few.

    +

    Getting a backtrace for errors

    +

    If you want to get a backtrace to the point where the compiler emits an +error message, you can pass the -Z treat-err-as-bug=n, which will make +the compiler panic on the nth error. If you leave off =n, the compiler will +assume 1 for n and thus panic on the first error it encounters.

    +

    For example:

    +
    $ cat error.rs
    +
    +
    fn main() {
    +    1 + ();
    +}
    +
    $ rustc +stage1 error.rs
    +error[E0277]: cannot add `()` to `{integer}`
    + --> error.rs:2:7
    +  |
    +2 |       1 + ();
    +  |         ^ no implementation for `{integer} + ()`
    +  |
    +  = help: the trait `Add<()>` is not implemented for `{integer}`
    +
    +error: aborting due to previous error
    +
    +

    Now, where does the error above come from?

    +
    $ RUST_BACKTRACE=1 rustc +stage1 error.rs -Z treat-err-as-bug
    +error[E0277]: the trait bound `{integer}: std::ops::Add<()>` is not satisfied
    + --> error.rs:2:7
    +  |
    +2 |     1 + ();
    +  |       ^ no implementation for `{integer} + ()`
    +  |
    +  = help: the trait `std::ops::Add<()>` is not implemented for `{integer}`
    +
    +error: internal compiler error: unexpected panic
    +
    +note: the compiler unexpectedly panicked. this is a bug.
    +
    +note: we would appreciate a bug report: https://github.com/rust-lang/rust/blob/master/CONTRIBUTING.md#bug-reports
    +
    +note: rustc 1.24.0-dev running on x86_64-unknown-linux-gnu
    +
    +note: run with `RUST_BACKTRACE=1` for a backtrace
    +
    +thread 'rustc' panicked at 'encountered error with `-Z treat_err_as_bug',
    +/home/user/rust/compiler/rustc_errors/src/lib.rs:411:12
    +note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose
    +backtrace.
    +stack backtrace:
    +  (~~~ IRRELEVANT PART OF BACKTRACE REMOVED BY ME ~~~)
    +   7: rustc::traits::error_reporting::<impl rustc::infer::InferCtxt<'a, 'tcx>>
    +             ::report_selection_error
    +             at /home/user/rust/compiler/rustc_middle/src/traits/error_reporting.rs:823
    +   8: rustc::traits::error_reporting::<impl rustc::infer::InferCtxt<'a, 'tcx>>
    +             ::report_fulfillment_errors
    +             at /home/user/rust/compiler/rustc_middle/src/traits/error_reporting.rs:160
    +             at /home/user/rust/compiler/rustc_middle/src/traits/error_reporting.rs:112
    +   9: rustc_typeck::check::FnCtxt::select_obligations_where_possible
    +             at /home/user/rust/compiler/rustc_typeck/src/check/mod.rs:2192
    +  (~~~ IRRELEVANT PART OF BACKTRACE REMOVED BY ME ~~~)
    +  36: rustc_driver::run_compiler
    +             at /home/user/rust/compiler/rustc_driver/src/lib.rs:253
    +
    +

    Cool, now I have a backtrace for the error!

    +

    Debugging delayed bugs

    +

    The -Z eagerly-emit-delayed-bugs option makes it easy to debug delayed bugs. +It turns them into normal errors, i.e. makes them visible. This can be used in +combination with -Z treat-err-as-bug to stop at a particular delayed bug and +get a backtrace.

    +

    Getting the error creation location

    +

    -Z track-diagnostics can help figure out where errors are emitted. It uses #[track_caller] +for this and prints its location alongside the error:

    +
    $ RUST_BACKTRACE=1 rustc +stage1 error.rs -Z track-diagnostics
    +error[E0277]: cannot add `()` to `{integer}`
    + --> src\error.rs:2:7
    +  |
    +2 |     1 + ();
    +  |       ^ no implementation for `{integer} + ()`
    +-Ztrack-diagnostics: created at compiler/rustc_trait_selection/src/traits/error_reporting/mod.rs:638:39
    +  |
    +  = help: the trait `Add<()>` is not implemented for `{integer}`
    +  = help: the following other types implement trait `Add<Rhs>`:
    +            <&'a f32 as Add<f32>>
    +            <&'a f64 as Add<f64>>
    +            <&'a i128 as Add<i128>>
    +            <&'a i16 as Add<i16>>
    +            <&'a i32 as Add<i32>>
    +            <&'a i64 as Add<i64>>
    +            <&'a i8 as Add<i8>>
    +            <&'a isize as Add<isize>>
    +          and 48 others
    +
    +For more information about this error, try `rustc --explain E0277`.
    +
    +

    This is similar but different to -Z treat-err-as-bug:

    +
      +
    • it will print the locations for all errors emitted
    • +
    • it does not require a compiler built with debug symbols
    • +
    • you don't have to read through a big stack trace.
    • +
    +

    Getting logging output

    +

    The compiler uses the tracing crate for logging.

    +

    For details see the guide section on tracing

    +

    Narrowing (Bisecting) Regressions

    +

    The cargo-bisect-rustc tool can be used as a quick and easy way to +find exactly which PR caused a change in rustc behavior. It automatically +downloads rustc PR artifacts and tests them against a project you provide +until it finds the regression. You can then look at the PR to get more context +on why it was changed. See this tutorial on how to use +it.

    +

    Downloading Artifacts from Rust's CI

    +

    The rustup-toolchain-install-master tool by kennytm can be used to +download the artifacts produced by Rust's CI for a specific SHA1 -- this +basically corresponds to the successful landing of some PR -- and then sets +them up for your local use. This also works for artifacts produced by @bors try. This is helpful when you want to examine the resulting build of a PR +without doing the build yourself.

    +

    #[rustc_*] TEST attributes

    +

    The compiler defines a whole lot of internal (perma-unstable) attributes some of which are useful +for debugging by dumping extra compiler-internal information. These are prefixed with rustc_ and +are gated behind the internal feature rustc_attrs (enabled via e.g. #![feature(rustc_attrs)]).

    +

    For a complete and up to date list, see builtin_attrs. More specifically, the ones marked TEST. +Here are some notable ones:

    +
    + + + + + + + + + + + + +
    AttributeDescription
    rustc_def_pathDumps the def_path_str of an item.
    rustc_dump_def_parentsDumps the chain of DefId parents of certain definitions.
    rustc_dump_item_boundsDumps the item_bounds of an item.
    rustc_dump_predicatesDumps the predicates_of an item.
    rustc_dump_vtableDumps the vtable layout of an impl, or a type alias of a dyn type.
    rustc_hidden_type_of_opaquesDumps the hidden type of each opaque types in the crate.
    rustc_layoutSee this section.
    rustc_object_lifetime_defaultDumps the object lifetime defaults of an item.
    rustc_outlivesDumps implied bounds of an item. More precisely, the inferred_outlives_of an item.
    rustc_regionsDumps NLL closure region requirements.
    rustc_symbol_nameDumps the mangled & demangled symbol_name of an item.
    rustc_variancesDumps the variances of an item.
    +
    +

    Right below you can find elaborate explainers on a selected few.

    +

    Formatting Graphviz output (.dot files)

    +

    Some compiler options for debugging specific features yield graphviz graphs - +e.g. the #[rustc_mir(borrowck_graphviz_postflow="suffix.dot")] attribute +on a function dumps various borrow-checker dataflow graphs in conjunction with +-Zdump-mir-dataflow.

    +

    These all produce .dot files. To view these files, install graphviz (e.g. +apt-get install graphviz) and then run the following commands:

    +
    $ dot -T pdf maybe_init_suffix.dot > maybe_init_suffix.pdf
    +$ firefox maybe_init_suffix.pdf # Or your favorite pdf viewer
    +
    +

    Debugging type layouts

    +

    The internal attribute #[rustc_layout] can be used to dump the Layout of +the type it is attached to. For example:

    +
    #![allow(unused)]
    +#![feature(rustc_attrs)]
    +
    +fn main() {
    +#[rustc_layout(debug)]
    +type T<'a> = &'a u32;
    +}
    +

    Will emit the following:

    +
    error: layout_of(&'a u32) = Layout {
    +    fields: Primitive,
    +    variants: Single {
    +        index: 0,
    +    },
    +    abi: Scalar(
    +        Scalar {
    +            value: Pointer,
    +            valid_range: 1..=18446744073709551615,
    +        },
    +    ),
    +    largest_niche: Some(
    +        Niche {
    +            offset: Size {
    +                raw: 0,
    +            },
    +            scalar: Scalar {
    +                value: Pointer,
    +                valid_range: 1..=18446744073709551615,
    +            },
    +        },
    +    ),
    +    align: AbiAndPrefAlign {
    +        abi: Align {
    +            pow2: 3,
    +        },
    +        pref: Align {
    +            pow2: 3,
    +        },
    +    },
    +    size: Size {
    +        raw: 8,
    +    },
    +}
    + --> src/lib.rs:4:1
    +  |
    +4 | type T<'a> = &'a u32;
    +  | ^^^^^^^^^^^^^^^^^^^^^
    +
    +error: aborting due to previous error
    +
    +

    Configuring CodeLLDB for debugging rustc

    +

    If you are using VSCode, and have edited your bootstrap.toml to request debugging +level 1 or 2 for the parts of the code you're interested in, then you should be +able to use the CodeLLDB extension in VSCode to debug it.

    +

    Here is a sample launch.json file, being used to run a stage 1 compiler direct +from the directory where it is built (does not have to be "installed"):

    +
    // .vscode/launch.json
    +{
    +    "version": "0.2.0",
    +    "configurations": [
    +      {
    +        "type": "lldb",
    +        "request": "launch",
    +        "name": "Launch",
    +        "args": [],  // array of string command-line arguments to pass to compiler
    +        "program": "${workspaceFolder}/build/host/stage1/bin/rustc",
    +        "windows": {  // applicable if using windows
    +            "program": "${workspaceFolder}/build/host/stage1/bin/rustc.exe"
    +        },
    +        "cwd": "${workspaceFolder}",  // current working directory at program start
    +        "stopOnEntry": false,
    +        "sourceLanguages": ["rust"]
    +      }
    +    ]
    +  }
    +
    +

    Using tracing to debug the compiler

    + +

    The compiler has a lot of debug! (or trace!) calls, which print out logging information +at many points. These are very useful to at least narrow down the location of +a bug if not to find it entirely, or just to orient yourself as to why the +compiler is doing a particular thing.

    +

    To see the logs, you need to set the RUSTC_LOG environment variable to your +log filter. The full syntax of the log filters can be found in the rustdoc +of tracing-subscriber.

    +

    Function level filters

    +

    Lots of functions in rustc are annotated with

    +
    #[instrument(level = "debug", skip(self))]
    +fn foo(&self, bar: Type) {}
    +
    +

    which allows you to use

    +
    RUSTC_LOG=[foo]
    +
    +

    to do the following all at once

    +
      +
    • log all function calls to foo
    • +
    • log the arguments (except for those in the skip list)
    • +
    • log everything (from anywhere else in the compiler) until the function returns
    • +
    +

    I don't want everything

    +

    Depending on the scope of the function, you may not want to log everything in its body. +As an example: the do_mir_borrowck function will dump hundreds of lines even for trivial +code being borrowchecked.

    +

    Since you can combine all filters, you can add a crate/module path, e.g.

    +
    RUSTC_LOG=rustc_borrowck[do_mir_borrowck]
    +
    +

    I don't want all calls

    +

    If you are compiling libcore, you likely don't want all borrowck dumps, but only one +for a specific function. You can filter function calls by their arguments by regexing them.

    +
    RUSTC_LOG=[do_mir_borrowck{id=\.\*from_utf8_unchecked\.\*}]
    +
    +

    will only give you the logs of borrowchecking from_utf8_unchecked. Note that you will +still get a short message per ignored do_mir_borrowck, but none of the things inside those +calls. This helps you in looking through the calls that are happening and helps you adjust +your regex if you mistyped it.

    +

    Query level filters

    +

    Every query is automatically tagged with a logging span so that +you can display all log messages during the execution of the query. For +example, if you want to log everything during type checking:

    +
    RUSTC_LOG=[typeck]
    +
    +

    The query arguments are included as a tracing field which means that you can +filter on the debug display of the arguments. For example, the typeck query +has an argument key: LocalDefId of what is being checked. You can use a +regex to match on that LocalDefId to log type checking for a specific +function:

    +
    RUSTC_LOG=[typeck{key=.*name_of_item.*}]
    +
    +

    Different queries have different arguments. You can find a list of queries and +their arguments in +rustc_middle/src/query/mod.rs.

    +

    Broad module level filters

    +

    You can also use filters similar to the log crate's filters, which will enable +everything within a specific module. This is often too verbose and too unstructured, +so it is recommended to use function level filters.

    +

    Your log filter can be just debug to get all debug! output and +higher (e.g., it will also include info!), or path::to::module to get all +output (which will include trace!) from a particular module, or +path::to::module=debug to get debug! output and higher from a particular +module.

    +

    For example, to get the debug! output and higher for a specific module, you +can run the compiler with RUSTC_LOG=path::to::module=debug rustc my-file.rs. +All debug! output will then appear in standard error.

    +

    Note that you can use a partial path and the filter will still work. For +example, if you want to see info! output from only +rustdoc::passes::collect_intra_doc_links, you could use +RUSTDOC_LOG=rustdoc::passes::collect_intra_doc_links=info or you could use +RUSTDOC_LOG=rustdoc::passes::collect_intra=info.

    +

    If you are developing rustdoc, use RUSTDOC_LOG instead. If you are developing +Miri, use MIRI_LOG instead. You get the idea :)

    +

    See the tracing crate's docs, and specifically the docs for debug! to +see the full syntax you can use. (Note: unlike the compiler, the tracing +crate and its examples use the RUST_LOG environment variable. rustc, rustdoc, +and other tools set custom environment variables.)

    +

    Note that unless you use a very strict filter, the logger will emit a lot of +output, so use the most specific module(s) you can (comma-separated if +multiple). It's typically a good idea to pipe standard error to a file and +look at the log output with a text editor.

    +

    So, to put it together:

    +
    # This puts the output of all debug calls in `rustc_middle/src/traits` into
    +# standard error, which might fill your console backscroll.
    +$ RUSTC_LOG=rustc_middle::traits=debug rustc +stage1 my-file.rs
    +
    +# This puts the output of all debug calls in `rustc_middle/src/traits` in
    +# `traits-log`, so you can then see it with a text editor.
    +$ RUSTC_LOG=rustc_middle::traits=debug rustc +stage1 my-file.rs 2>traits-log
    +
    +# Not recommended! This will show the output of all `debug!` calls
    +# in the Rust compiler, and there are a *lot* of them, so it will be
    +# hard to find anything.
    +$ RUSTC_LOG=debug rustc +stage1 my-file.rs 2>all-log
    +
    +# This will show the output of all `info!` calls in `rustc_codegen_ssa`.
    +#
    +# There's an `info!` statement in `codegen_instance` that outputs
    +# every function that is codegen'd. This is useful to find out
    +# which function triggers an LLVM assertion, and this is an `info!`
    +# log rather than a `debug!` log so it will work on the official
    +# compilers.
    +$ RUSTC_LOG=rustc_codegen_ssa=info rustc +stage1 my-file.rs
    +
    +# This will show all logs in `rustc_codegen_ssa` and `rustc_resolve`.
    +$ RUSTC_LOG=rustc_codegen_ssa,rustc_resolve rustc +stage1 my-file.rs
    +
    +# This will show the output of all `info!` calls made by rustdoc
    +# or any rustc library it calls.
    +$ RUSTDOC_LOG=info rustdoc +stage1 my-file.rs
    +
    +# This will only show `debug!` calls made by rustdoc directly,
    +# not any `rustc*` crate.
    +$ RUSTDOC_LOG=rustdoc=debug rustdoc +stage1 my-file.rs
    +
    +

    Log colors

    +

    By default, rustc (and other tools, like rustdoc and Miri) will be smart about +when to use ANSI colors in the log output. If they are outputting to a terminal, +they will use colors, and if they are outputting to a file or being piped +somewhere else, they will not. However, it's hard to read log output in your +terminal unless you have a very strict filter, so you may want to pipe the +output to a pager like less. But then there won't be any colors, which makes +it hard to pick out what you're looking for!

    +

    You can override whether to have colors in log output with the RUSTC_LOG_COLOR +environment variable (or RUSTDOC_LOG_COLOR for rustdoc, or MIRI_LOG_COLOR +for Miri, etc.). There are three options: auto (the default), always, and +never. So, if you want to enable colors when piping to less, use something +similar to this command:

    +
    # The `-R` switch tells less to print ANSI colors without escaping them.
    +$ RUSTC_LOG=debug RUSTC_LOG_COLOR=always rustc +stage1 ... | less -R
    +
    +

    Note that MIRI_LOG_COLOR will only color logs that come from Miri, not logs +from rustc functions that Miri calls. Use RUSTC_LOG_COLOR to color logs from +rustc.

    +

    How to keep or remove debug! and trace! calls from the resulting binary

    +

    While calls to error!, warn! and info! are included in every build of the compiler, +calls to debug! and trace! are only included in the program if +debug-logging=true is turned on in bootstrap.toml (it is +turned off by default), so if you don't see DEBUG logs, especially +if you run the compiler with RUSTC_LOG=rustc rustc some.rs and only see +INFO logs, make sure that debug-logging=true is turned on in your +bootstrap.toml.

    +

    Logging etiquette and conventions

    +

    Because calls to debug! are removed by default, in most cases, don't worry +about the performance of adding "unnecessary" calls to debug! and leaving them in code you +commit - they won't slow down the performance of what we ship.

    +

    That said, there can also be excessive tracing calls, especially +when they are redundant with other calls nearby or in functions called from +here. There is no perfect balance to hit here, and is left to the reviewer's +discretion to decide whether to let you leave debug! statements in or whether to ask +you to remove them before merging.

    +

    It may be preferable to use trace! over debug! for very noisy logs.

    +

    A loosely followed convention is to use #[instrument(level = "debug")] +(also see the attribute's documentation) +in favour of debug!("foo(...)") at the start of a function foo. +Within functions, prefer debug!(?variable.field) over debug!("xyz = {:?}", variable.field) +and debug!(bar = ?var.method(arg)) over debug!("bar = {:?}", var.method(arg)). +The documentation for this syntax can be found here.

    +

    One thing to be careful of is expensive operations in logs.

    +

    If in the module rustc::foo you have a statement

    +
    debug!(x = ?random_operation(tcx));
    +
    +

    Then if someone runs a debug rustc with RUSTC_LOG=rustc::foo, then +random_operation() will run. RUSTC_LOG filters that do not enable this +debug statement will not execute random_operation.

    +

    This means that you should not put anything too expensive or likely to crash +there - that would annoy anyone who wants to use logging for that module. +No-one will know it until someone tries to use logging to find another bug.

    +

    Profiling the compiler

    +

    This section talks about how to profile the compiler and find out where it spends its time.

    +

    Depending on what you're trying to measure, there are several different approaches:

    +
      +
    • +

      If you want to see if a PR improves or regresses compiler performance, +see the rustc-perf chapter for requesting a benchmarking run.

      +
    • +
    • +

      If you want a medium-to-high level overview of where rustc is spending its time:

      +
        +
      • The -Z self-profile flag and measureme tools offer a query-based approach to profiling. +See their docs for more information.
      • +
      +
    • +
    • +

      If you want function level performance data or even just more details than the above approaches:

      +
        +
      • Consider using a native code profiler such as perf
      • +
      • or tracy for a nanosecond-precision, +full-featured graphical interface.
      • +
      +
    • +
    • +

      If you want a nice visual representation of the compile times of your crate graph, +you can use cargo's --timings flag, +e.g. cargo build --timings. +You can use this flag on the compiler itself with CARGOFLAGS="--timings" ./x build

      +
    • +
    • +

      If you want to profile memory usage, you can use various tools depending on what operating system +you are using.

      + +
    • +
    +

    Optimizing rustc's bootstrap times with cargo-llvm-lines

    +

    Using cargo-llvm-lines you can count the +number of lines of LLVM IR across all instantiations of a generic function. +Since most of the time compiling rustc is spent in LLVM, the idea is that by +reducing the amount of code passed to LLVM, compiling rustc gets faster.

    +

    To use cargo-llvm-lines together with somewhat custom rustc build process, you can use +-C save-temps to obtain required LLVM IR. The option preserves temporary work products +created during compilation. Among those is LLVM IR that represents an input to the +optimization pipeline; ideal for our purposes. It is stored in files with *.no-opt.bc +extension in LLVM bitcode format.

    +

    Example usage:

    +
    cargo install cargo-llvm-lines
    +# On a normal crate you could now run `cargo llvm-lines`, but `x` isn't normal :P
    +
    +# Do a clean before every run, to not mix in the results from previous runs.
    +./x clean
    +env RUSTFLAGS=-Csave-temps ./x build --stage 0 compiler/rustc
    +
    +# Single crate, e.g., rustc_middle. (Relies on the glob support of your shell.)
    +# Convert unoptimized LLVM bitcode into a human readable LLVM assembly accepted by cargo-llvm-lines.
    +for f in build/x86_64-unknown-linux-gnu/stage0-rustc/x86_64-unknown-linux-gnu/release/deps/rustc_middle-*.no-opt.bc; do
    +  ./build/x86_64-unknown-linux-gnu/llvm/bin/llvm-dis "$f"
    +done
    +cargo llvm-lines --files ./build/x86_64-unknown-linux-gnu/stage0-rustc/x86_64-unknown-linux-gnu/release/deps/rustc_middle-*.ll > llvm-lines-middle.txt
    +
    +# Specify all crates of the compiler.
    +for f in build/x86_64-unknown-linux-gnu/stage0-rustc/x86_64-unknown-linux-gnu/release/deps/*.no-opt.bc; do
    +  ./build/x86_64-unknown-linux-gnu/llvm/bin/llvm-dis "$f"
    +done
    +cargo llvm-lines --files ./build/x86_64-unknown-linux-gnu/stage0-rustc/x86_64-unknown-linux-gnu/release/deps/*.ll > llvm-lines.txt
    +
    +

    Example output for the compiler:

    +
      Lines            Copies          Function name
    +  -----            ------          -------------
    +  45207720 (100%)  1583774 (100%)  (TOTAL)
    +   2102350 (4.7%)   146650 (9.3%)  core::ptr::drop_in_place
    +    615080 (1.4%)     8392 (0.5%)  std::thread::local::LocalKey<T>::try_with
    +    594296 (1.3%)     1780 (0.1%)  hashbrown::raw::RawTable<T>::rehash_in_place
    +    592071 (1.3%)     9691 (0.6%)  core::option::Option<T>::map
    +    528172 (1.2%)     5741 (0.4%)  core::alloc::layout::Layout::array
    +    466854 (1.0%)     8863 (0.6%)  core::ptr::swap_nonoverlapping_one
    +    412736 (0.9%)     1780 (0.1%)  hashbrown::raw::RawTable<T>::resize
    +    367776 (0.8%)     2554 (0.2%)  alloc::raw_vec::RawVec<T,A>::grow_amortized
    +    367507 (0.8%)      643 (0.0%)  rustc_query_system::dep_graph::graph::DepGraph<K>::with_task_impl
    +    355882 (0.8%)     6332 (0.4%)  alloc::alloc::box_free
    +    354556 (0.8%)    14213 (0.9%)  core::ptr::write
    +    354361 (0.8%)     3590 (0.2%)  core::iter::traits::iterator::Iterator::fold
    +    347761 (0.8%)     3873 (0.2%)  rustc_middle::ty::context::tls::set_tlv
    +    337534 (0.7%)     2377 (0.2%)  alloc::raw_vec::RawVec<T,A>::allocate_in
    +    331690 (0.7%)     3192 (0.2%)  hashbrown::raw::RawTable<T>::find
    +    328756 (0.7%)     3978 (0.3%)  rustc_middle::ty::context::tls::with_context_opt
    +    326903 (0.7%)      642 (0.0%)  rustc_query_system::query::plumbing::try_execute_query
    +
    +

    Since this doesn't seem to work with incremental compilation or ./x check, +you will be compiling rustc a lot. +I recommend changing a few settings in bootstrap.toml to make it bearable:

    +
    [rust]
    +# A debug build takes _a third_ as long on my machine,
    +# but compiling more than stage0 rustc becomes unbearably slow.
    +optimize = false
    +
    +# We can't use incremental anyway, so we disable it for a little speed boost.
    +incremental = false
    +# We won't be running it, so no point in compiling debug checks.
    +debug = false
    +
    +# Using a single codegen unit gives less output, but is slower to compile.
    +codegen-units = 0  # num_cpus
    +
    +

    The llvm-lines output is affected by several options. +optimize = false increases it from 2.1GB to 3.5GB and codegen-units = 0 to 4.1GB.

    +

    MIR optimizations have little impact. Compared to the default RUSTFLAGS="-Z mir-opt-level=1", level 0 adds 0.3GB and level 2 removes 0.2GB. +As of July 2022, +inlining happens in LLVM and GCC codegen backends, +missing only in the Cranelift one.

    +

    Profiling with perf

    +

    This is a guide for how to profile rustc with perf.

    +

    Initial steps

    +
      +
    • Get a clean checkout of rust-lang/master, or whatever it is you want +to profile.
    • +
    • Set the following settings in your bootstrap.toml: +
        +
      • debuginfo-level = 1 - enables line debuginfo
      • +
      • jemalloc = false - lets you do memory use profiling with valgrind
      • +
      • leave everything else the defaults
      • +
      +
    • +
    • Run ./x build to get a full build
    • +
    • Make a rustup toolchain pointing to that result + +
    • +
    +

    Gathering a perf profile

    +

    perf is an excellent tool on linux that can be used to gather and +analyze all kinds of information. Mostly it is used to figure out +where a program spends its time. It can also be used for other sorts +of events, though, like cache misses and so forth.

    +

    The basics

    +

    The basic perf command is this:

    +
    perf record -F99 --call-graph dwarf XXX
    +
    +

    The -F99 tells perf to sample at 99 Hz, which avoids generating too +much data for longer runs (why 99 Hz you ask? It is often chosen +because it is unlikely to be in lockstep with other periodic +activity). The --call-graph dwarf tells perf to get call-graph +information from debuginfo, which is accurate. The XXX is the +command you want to profile. So, for example, you might do:

    +
    perf record -F99 --call-graph dwarf cargo +<toolchain> rustc
    +
    +

    to run cargo -- here <toolchain> should be the name of the toolchain +you made in the beginning. But there are some things to be aware of:

    +
      +
    • You probably don't want to profile the time spend building +dependencies. So something like cargo build; cargo clean -p $C may +be helpful (where $C is the crate name) +
        +
      • Though usually I just do touch src/lib.rs and rebuild instead. =)
      • +
      +
    • +
    • You probably don't want incremental messing about with your +profile. So something like CARGO_INCREMENTAL=0 can be helpful.
    • +
    +

    In case to avoid the issue of addr2line xxx/elf: could not read first record when reading +collected data from cargo, you may need use the latest version of addr2line:

    +
    cargo install addr2line --features="bin"
    +
    +

    Gathering a perf profile from a perf.rust-lang.org test

    +

    Often we want to analyze a specific test from perf.rust-lang.org. +The easiest way to do that is to use the rustc-perf +benchmarking suite, this approach is described here.

    +

    Instead of using the benchmark suite CLI, you can also profile the benchmarks manually. First, +you need to clone the rustc-perf repository:

    +
    $ git clone https://github.com/rust-lang/rustc-perf
    +
    +

    and then find the source code of the test that you want to profile. Sources for the tests +are found in the collector/compile-benchmarks directory +and the collector/runtime-benchmarks directory. So let's +go into the directory of a specific test; we'll use clap-rs as an example:

    +
    cd collector/compile-benchmarks/clap-3.1.6
    +
    +

    In this case, let's say we want to profile the cargo check +performance. In that case, I would first run some basic commands to +build the dependencies:

    +
    # Setup: first clean out any old results and build the dependencies:
    +cargo +<toolchain> clean
    +CARGO_INCREMENTAL=0 cargo +<toolchain> check
    +
    +

    (Again, <toolchain> should be replaced with the name of the +toolchain we made in the first step.)

    +

    Next: we want record the execution time for just the clap-rs crate, +running cargo check. I tend to use cargo rustc for this, since it +also allows me to add explicit flags, which we'll do later on.

    +
    touch src/lib.rs
    +CARGO_INCREMENTAL=0 perf record -F99 --call-graph dwarf cargo rustc --profile check --lib
    +
    +

    Note that final command: it's a doozy! It uses the cargo rustc +command, which executes rustc with (potentially) additional options; +the --profile check and --lib options specify that we are doing a +cargo check execution, and that this is a library (not a binary).

    +

    At this point, we can use perf tooling to analyze the results. For example:

    +
    perf report
    +
    +

    will open up an interactive TUI program. In simple cases, that can be +helpful. For more detailed examination, the perf-focus tool +can be helpful; it is covered below.

    +

    A note of caution. Each of the rustc-perf tests is its own special +snowflake. In particular, some of them are not libraries, in which +case you would want to do touch src/main.rs and avoid passing +--lib. I'm not sure how best to tell which test is which to be +honest.

    +

    Gathering NLL data

    +

    If you want to profile an NLL run, you can just pass extra options to +the cargo rustc command, like so:

    +
    touch src/lib.rs
    +CARGO_INCREMENTAL=0 perf record -F99 --call-graph dwarf cargo rustc --profile check --lib -- -Z borrowck=mir
    +
    +

    Analyzing a perf profile with perf focus

    +

    Once you've gathered a perf profile, we want to get some information +about it. For this, I personally use perf focus. It's a kind of +simple but useful tool that lets you answer queries like:

    +
      +
    • "how much time was spent in function F" (no matter where it was called from)
    • +
    • "how much time was spent in function F when it was called from G"
    • +
    • "how much time was spent in function F excluding time spent in G"
    • +
    • "what functions does F call and how much time does it spend in them"
    • +
    +

    To understand how it works, you have to know just a bit about +perf. Basically, perf works by sampling your process on a regular +basis (or whenever some event occurs). For each sample, perf gathers a +backtrace. perf focus lets you write a regular expression that tests +which functions appear in that backtrace, and then tells you which +percentage of samples had a backtrace that met the regular +expression. It's probably easiest to explain by walking through how I +would analyze NLL performance.

    +

    Installing perf-focus

    +

    You can install perf-focus using cargo install:

    +
    cargo install perf-focus
    +
    +

    Example: How much time is spent in MIR borrowck?

    +

    Let's say we've gathered the NLL data for a test. We'd like to know +how much time it is spending in the MIR borrow-checker. The "main" +function of the MIR borrowck is called do_mir_borrowck, so we can do +this command:

    +
    $ perf focus '{do_mir_borrowck}'
    +Matcher    : {do_mir_borrowck}
    +Matches    : 228
    +Not Matches: 542
    +Percentage : 29%
    +
    +

    The '{do_mir_borrowck}' argument is called the matcher. It +specifies the test to be applied on the backtrace. In this case, the +{X} indicates that there must be some function on the backtrace +that meets the regular expression X. In this case, that regex is +just the name of the function we want (in fact, it's a subset of the name; +the full name includes a bunch of other stuff, like the module +path). In this mode, perf-focus just prints out the percentage of +samples where do_mir_borrowck was on the stack: in this case, 29%.

    +

    A note about c++filt. To get the data from perf, perf focus +currently executes perf script (perhaps there is a better +way...). I've sometimes found that perf script outputs C++ mangled +names. This is annoying. You can tell by running perf script | head yourself — if you see names like 5rustc6middle instead of +rustc::middle, then you have the same problem. You can solve this +by doing:

    +
    perf script | c++filt | perf focus --from-stdin ...
    +
    +

    This will pipe the output from perf script through c++filt and +should mostly convert those names into a more friendly format. The +--from-stdin flag to perf focus tells it to get its data from +stdin, rather than executing perf focus. We should make this more +convenient (at worst, maybe add a c++filt option to perf focus, or +just always use it — it's pretty harmless).

    +

    Example: How much time does MIR borrowck spend solving traits?

    +

    Perhaps we'd like to know how much time MIR borrowck spends in the +trait checker. We can ask this using a more complex regex:

    +
    $ perf focus '{do_mir_borrowck}..{^rustc::traits}'
    +Matcher    : {do_mir_borrowck},..{^rustc::traits}
    +Matches    : 12
    +Not Matches: 1311
    +Percentage : 0%
    +
    +

    Here we used the .. operator to ask "how often do we have +do_mir_borrowck on the stack and then, later, some function whose +name begins with rustc::traits?" (basically, code in that module). It +turns out the answer is "almost never" — only 12 samples fit that +description (if you ever see no samples, that often indicates your +query is messed up).

    +

    If you're curious, you can find out exactly which samples by using the +--print-match option. This will print out the full backtrace for +each sample. The | at the front of the line indicates the part that +the regular expression matched.

    +

    Example: Where does MIR borrowck spend its time?

    +

    Often we want to do more "explorational" queries. Like, we know that +MIR borrowck is 29% of the time, but where does that time get spent? +For that, the --tree-callees option is often the best tool. You +usually also want to give --tree-min-percent or +--tree-max-depth. The result looks like this:

    +
    $ perf focus '{do_mir_borrowck}' --tree-callees --tree-min-percent 3
    +Matcher    : {do_mir_borrowck}
    +Matches    : 577
    +Not Matches: 746
    +Percentage : 43%
    +
    +Tree
    +| matched `{do_mir_borrowck}` (43% total, 0% self)
    +: | rustc_borrowck::nll::compute_regions (20% total, 0% self)
    +: : | rustc_borrowck::nll::type_check::type_check_internal (13% total, 0% self)
    +: : : | core::ops::function::FnOnce::call_once (5% total, 0% self)
    +: : : : | rustc_borrowck::nll::type_check::liveness::generate (5% total, 3% self)
    +: : : | <rustc_borrowck::nll::type_check::TypeVerifier<'a, 'b, 'tcx> as rustc::mir::visit::Visitor<'tcx>>::visit_mir (3% total, 0% self)
    +: | rustc::mir::visit::Visitor::visit_mir (8% total, 6% self)
    +: | <rustc_borrowck::MirBorrowckCtxt<'cx, 'tcx> as rustc_mir_dataflow::DataflowResultsConsumer<'cx, 'tcx>>::visit_statement_entry (5% total, 0% self)
    +: | rustc_mir_dataflow::do_dataflow (3% total, 0% self)
    +
    +

    What happens with --tree-callees is that

    +
      +
    • we find each sample matching the regular expression
    • +
    • we look at the code that occurs after the regex match and try +to build up a call tree
    • +
    +

    The --tree-min-percent 3 option says "only show me things that take +more than 3% of the time". Without this, the tree often gets really +noisy and includes random stuff like the innards of +malloc. --tree-max-depth can be useful too, it just limits how many +levels we print.

    +

    For each line, we display the percent of time in that function +altogether ("total") and the percent of time spent in just that +function and not some callee of that function (self). Usually +"total" is the more interesting number, but not always.

    +

    Relative percentages

    +

    By default, all in perf-focus are relative to the total program +execution. This is useful to help you keep perspective — often as +we drill down to find hot spots, we can lose sight of the fact that, +in terms of overall program execution, this "hot spot" is actually not +important. It also ensures that percentages between different queries +are easily compared against one another.

    +

    That said, sometimes it's useful to get relative percentages, so perf focus offers a --relative option. In this case, the percentages are +listed only for samples that match (vs all samples). So for example we +could get our percentages relative to the borrowck itself +like so:

    +
    $ perf focus '{do_mir_borrowck}' --tree-callees --relative --tree-max-depth 1 --tree-min-percent 5
    +Matcher    : {do_mir_borrowck}
    +Matches    : 577
    +Not Matches: 746
    +Percentage : 100%
    +
    +Tree
    +| matched `{do_mir_borrowck}` (100% total, 0% self)
    +: | rustc_borrowck::nll::compute_regions (47% total, 0% self) [...]
    +: | rustc::mir::visit::Visitor::visit_mir (19% total, 15% self) [...]
    +: | <rustc_borrowck::MirBorrowckCtxt<'cx, 'tcx> as rustc_mir_dataflow::DataflowResultsConsumer<'cx, 'tcx>>::visit_statement_entry (13% total, 0% self) [...]
    +: | rustc_mir_dataflow::do_dataflow (8% total, 1% self) [...]
    +
    +

    Here you see that compute_regions came up as "47% total" — that +means that 47% of do_mir_borrowck is spent in that function. Before, +we saw 20% — that's because do_mir_borrowck itself is only 43% of +the total time (and .47 * .43 = .20).

    +

    Profiling on Windows

    +

    Introducing WPR and WPA

    +

    High-level performance analysis (including memory usage) can be performed with the Windows +Performance Recorder (WPR) and Windows Performance Analyzer (WPA). As the names suggest, WPR is for +recording system statistics (in the form of event trace log a.k.a. ETL files), while WPA is for +analyzing these ETL files.

    +

    WPR collects system wide statistics, so it won't just record things relevant to rustc but also +everything else that's running on the machine. During analysis, we can filter to just the things we +find interesting.

    +

    These tools are quite powerful but also require a bit of learning +before we can successfully profile the Rust compiler.

    +

    Here we will explore how to use WPR and WPA for analyzing the Rust compiler as well as provide +links to useful "profiles" (i.e., settings files that tweak the defaults for WPR and WPA) that are +specifically designed to make analyzing rustc easier.

    +

    Installing WPR and WPA

    +

    You can install WPR and WPA as part of the Windows Performance Toolkit which itself is an option as +part of downloading the Windows Assessment and Deployment Kit (ADK). You can download the ADK +installer here. Make sure to select the Windows +Performance Toolkit (you don't need to select anything else).

    +

    Recording

    +

    In order to perform system analysis, you'll first need to record your system with WPR. Open WPR and +at the bottom of the window select the "profiles" of the things you want to record. For looking +into memory usage of the rustc bootstrap process, we'll want to select the following items:

    +
      +
    • CPU usage
    • +
    • VirtualAlloc usage
    • +
    +

    You might be tempted to record "Heap usage" as well, but this records every single heap allocation +and can be very, very expensive. For high-level analysis, it might be best to leave that turned +off.

    +

    Now we need to get our setup ready to record. For memory usage analysis, it is best to record the +stage 2 compiler build with a stage 1 compiler build with debug symbols. Having symbols in the +compiler we're using to build rustc will aid our analysis greatly by allowing WPA to resolve Rust +symbols correctly. Unfortunately, the stage 0 compiler does not have symbols turned on which is why +we'll need to build a stage 1 compiler and then a stage 2 compiler ourselves.

    +

    To do this, make sure you have set debuginfo-level = 1 in your bootstrap.toml file. This tells +rustc to generate debug information which includes stack frames when bootstrapping.

    +

    Now you can build the stage 1 compiler: x build --stage 1 -i library or however +else you want to build the stage 1 compiler.

    +

    Now that the stage 1 compiler is built, we can record the stage 2 build. Go back to WPR, click the +"start" button and build the stage 2 compiler (e.g., x build --stage=2 -i library). +When this process finishes, stop the recording.

    +

    Click the Save button and once that process is complete, click the "Open in WPA" button which +appears.

    +
    +

    Note: The trace file is fairly large so it can take WPA some time to finish opening the file.

    +
    +

    Analysis

    +

    Now that our ETL file is open in WPA, we can analyze the results. First, we'll want to apply the +pre-made "profile" which will put WPA into a state conducive to analyzing rustc bootstrap. Download +the profile here. +Select the "Profiles" menu at the top, then "apply" and then choose the downloaded profile.

    +

    You should see something resembling the following:

    +

    WPA with profile applied

    +

    Next, we will need to tell WPA to load and process debug symbols so that it can properly demangle +the Rust stack traces. To do this, click "Trace" and then choose "Load Symbols". This step can take +a while.

    +

    Once WPA has loaded symbols for rustc, we can expand the rustc.exe node and begin drilling down +into the stack with the largest allocations.

    +

    To do that, we'll expand the [Root] node in the "Commit Stack" column and continue expanding +until we find interesting stack frames.

    +
    +

    Tip: After selecting the node you want to expand, press the right arrow key. This will expand the +node and put the selection on the next largest node in the expanded set. You can continue pressing +the right arrow key until you reach an interesting frame.

    +
    +

    WPA with expanded stack

    +

    In this sample, you can see calls through codegen are allocating ~30gb of memory in total +throughout this profile.

    +

    Other Analysis Tabs

    +

    The profile also includes a few other tabs which can be helpful:

    +
      +
    • System Configuration +
        +
      • General information about the system the capture was recorded on.
      • +
      +
    • +
    • rustc Build Processes +
        +
      • A flat list of relevant processes such as rustc.exe, cargo.exe, link.exe etc.
      • +
      • Each process lists its command line arguments.
      • +
      • Useful for figuring out what a specific rustc process was working on.
      • +
      +
    • +
    • rustc Build Process Tree +
        +
      • Timeline showing when processes started and exited.
      • +
      +
    • +
    • rustc CPU Analysis +
        +
      • Contains charts preconfigured to show hotspots in rustc.
      • +
      • These charts are designed to support analyzing where rustc is spending its time.
      • +
      +
    • +
    • rustc Memory Analysis +
        +
      • Contains charts preconfigured to show where rustc is allocating memory.
      • +
      +
    • +
    +

    Profiling with rustc-perf

    +

    The Rust benchmark suite provides a comprehensive way of profiling and benchmarking +the Rust compiler. You can find instructions on how to use the suite in its manual.

    +

    However, using the suite manually can be a bit cumbersome. To make this easier for rustc contributors, +the compiler build system (bootstrap) also provides built-in integration with the benchmarking suite, +which will download and build the suite for you, build a local compiler toolchain and let you profile it using a simplified command-line interface.

    +

    You can use the ./x perf <command> [options] command to use this integration.

    +

    You can use normal bootstrap flags for this command, such as --stage 1 or --stage 2, for example to modify the stage of the created sysroot. It might also be useful to configure bootstrap.toml to better support profiling, e.g. set rust.debuginfo-level = 1 to add source line information to the built compiler.

    +

    x perf currently supports the following commands:

    +
      +
    • benchmark <id>: Benchmark the compiler and store the results under the passed id.
    • +
    • compare <baseline> <modified>: Compare the benchmark results of two compilers with the two passed ids.
    • +
    • eprintln: Just run the compiler and capture its stderr output. Note that the compiler normally does not print +anything to stderr, you might want to add some eprintln! calls to get any output.
    • +
    • samply: Profile the compiler using the samply sampling profiler.
    • +
    • cachegrind: Use Cachegrind to generate a detailed simulated trace of the compiler's execution.
    • +
    +
    +

    You can find a more detailed description of the profilers in the rustc-perf manual.

    +
    +

    You can use the following options for the x perf command, which mirror the corresponding options of the +profile_local and bench_local commands that you can use in the suite:

    +
      +
    • --include: Select benchmarks which should be profiled/benchmarked.
    • +
    • --profiles: Select profiles (Check, Debug, Opt, Doc) which should be profiled/benchmarked.
    • +
    • --scenarios: Select scenarios (Full, IncrFull, IncrPatched, IncrUnchanged) which should be profiled/benchmarked.
    • +
    +

    crates.io dependencies

    +

    The Rust compiler supports building with some dependencies from crates.io. +Examples are log and env_logger.

    +

    In general, +you should avoid adding dependencies to the compiler for several reasons:

    +
      +
    • The dependency may not be of high quality or well-maintained.
    • +
    • The dependency may not be using a compatible license.
    • +
    • The dependency may have transitive dependencies that have one of the above +problems.
    • +
    + +

    Note that there is no official policy for vetting new dependencies to the compiler. +Decisions are made on a case-by-case basis, during code review.

    +

    Permitted dependencies

    +

    The tidy tool has a list of crates that are allowed. To add a +dependency that is not already in the compiler, you will need to add it to the list.

    +

    Contribution procedures

    + +

    Bug reports

    +

    While bugs are unfortunate, they're a reality in software. We can't fix what we +don't know about, so please report liberally. If you're not sure if something +is a bug or not, feel free to file a bug anyway.

    +

    If you believe reporting your bug publicly represents a security risk to Rust users, +please follow our instructions for reporting security vulnerabilities.

    +

    If you're using the nightly channel, please check if the bug exists in the +latest toolchain before filing your bug. It might be fixed already.

    +

    If you have the chance, before reporting a bug, please search existing issues, +as it's possible that someone else has already reported your error. This doesn't +always work, and sometimes it's hard to know what to search for, so consider this +extra credit. We won't mind if you accidentally file a duplicate report.

    +

    Similarly, to help others who encountered the bug find your issue, consider +filing an issue with a descriptive title, which contains information that might +be unique to it. This can be the language or compiler feature used, the +conditions that trigger the bug, or part of the error message if there is any. +An example could be: "impossible case reached" on lifetime inference for impl +Trait in return position.

    +

    Opening an issue is as easy as following this +link and filling out the fields +in the appropriate provided template.

    +

    Bug fixes or "normal" code changes

    +

    For most PRs, no special procedures are needed. You can just open a PR, and it +will be reviewed, approved, and merged. This includes most bug fixes, +refactorings, and other user-invisible changes. The next few sections talk +about exceptions to this rule.

    +

    Also, note that it is perfectly acceptable to open WIP PRs or GitHub Draft PRs. +Some people prefer to do this so they can get feedback along the +way or share their code with a collaborator. Others do this so they can utilize +the CI to build and test their PR (e.g. when developing on a slow machine).

    +

    New features

    +

    Rust has strong backwards-compatibility guarantees. Thus, new features can't +just be implemented directly in stable Rust. Instead, we have 3 release +channels: stable, beta, and nightly.

    +
      +
    • Stable: this is the latest stable release for general usage.
    • +
    • Beta: this is the next release (will be stable within 6 weeks).
    • +
    • Nightly: follows the master branch of the repo. This is the only +channel where unstable, incomplete, or experimental features are usable with +feature gates.
    • +
    +

    See this chapter on implementing new features for more +information.

    +

    Breaking changes

    +

    Breaking changes have a dedicated section in the dev-guide.

    +

    Major changes

    +

    The compiler team has a special process for large changes, whether or not they +cause breakage. This process is called a Major Change Proposal (MCP). MCP is a +relatively lightweight mechanism for getting feedback on large changes to the +compiler (as opposed to a full RFC or a design meeting with the team).

    +

    Example of things that might require MCPs include major refactorings, changes +to important types, or important changes to how the compiler does something, or +smaller user-facing changes.

    +

    When in doubt, ask on zulip. It would be a shame to put a lot of work +into a PR that ends up not getting merged! See this document for +more info on MCPs.

    +

    Performance

    +

    Compiler performance is important. We have put a lot of effort over the last +few years into gradually improving it.

    +

    If you suspect that your change may cause a performance regression (or +improvement), you can request a "perf run" (and your reviewer may also request one +before approving). This is yet another bot that will compile a collection of +benchmarks on a compiler with your changes. The numbers are reported +here, and you can see a comparison of your changes against the latest +master.

    +
    +

    For an introduction to the performance of Rust code in general +which would also be useful in rustc development, see The Rust Performance Book.

    +
    +

    Pull requests

    +

    Pull requests (or PRs for short) are the primary mechanism we use to change Rust. +GitHub itself has some great documentation on using the +Pull Request feature. We use the "fork and pull" model described here, +where contributors push changes to their personal fork and create pull requests to +bring those changes into the source repository. We have more info about how to use git +when contributing to Rust under the git section.

    +
    +

    Advice for potentially large, complex, cross-cutting and/or very domain-specific changes

    +

    The compiler reviewers on rotation usually each have areas of the compiler that they know well, +but also have areas that they are not very familiar with. If your PR contains changes that are +large, complex, cross-cutting and/or highly domain-specific, it becomes very difficult to find a +suitable reviewer who is comfortable in reviewing all of the changes in such a PR. This is also +true if the changes are not only compiler-specific but also contains changes which fall under the +purview of reviewers from other teams, like the standard library team. There's a bot +which notifies the relevant teams and pings people who have setup specific alerts based on the +files modified.

    +

    Before making such changes, you are strongly encouraged to discuss your proposed changes with +the compiler team beforehand (and with other teams that the changes would require approval +from), and work with the compiler team to see if we can help you break down a large potentially +unreviewable PR into a series of smaller more individually reviewable PRs.

    +

    You can communicate with the compiler team by creating a #t-compiler thread on zulip +to discuss your proposed changes.

    +

    Communicating with the compiler team beforehand helps in several ways:

    +
      +
    1. It increases the likelihood of your PRs being reviewed in a timely manner. +
        +
      • We can help you identify suitable reviewers before you open actual PRs, or help find +advisors and liaisons to help you navigate the change procedures, or help with running +try-jobs, perf runs and crater runs as suitable.
      • +
      +
    2. +
    3. It helps the compiler team track your changes.
    4. +
    5. The compiler team can perform vibe checks on your changes early and often, to see if the +direction of the changes align with what the compiler team prefers to see.
    6. +
    7. Helps to avoid situations where you may have invested significant time and effort into large +changes that the compiler team might not be willing to accept, or finding out very late that the +changes are in a direction that the compiler team disagrees with.
    8. +
    +
    +

    Keeping your branch up-to-date

    +

    The CI in rust-lang/rust applies your patches directly against the current master, +not against the commit your branch is based on. This can lead to unexpected failures +if your branch is outdated, even when there are no explicit merge conflicts.

    +

    Before submitting or updating a PR, make sure to update your branch +as mentioned here if it's significantly +behind the master branch (e.g., more than 100 commits behind). +This fetches the latest master branch and rebases your changes on top of it, +ensuring your PR is tested against the latest code.

    +

    After rebasing, it's recommended to run the relevant tests locally to catch any issues before CI runs.

    +

    r?

    +

    All pull requests are reviewed by another person. We have a bot, +@rustbot, that will automatically assign a random person +to review your request based on which files you changed.

    +

    If you want to request that a specific person reviews your pull request, you +can add an r? to the pull request description or in a comment. For example, +if you want to ask a review to @awesome-reviewer, add

    +
    r? @awesome-reviewer
    +
    +

    to the end of the pull request description, and @rustbot will assign +them instead of a random person. This is entirely optional.

    +

    You can also assign a random reviewer from a specific team by writing r? rust-lang/groupname. +As an example, +if you were making a diagnostics change, +then you could get a reviewer from the diagnostics team by adding:

    +
    r? rust-lang/diagnostics
    +
    +

    For a full list of possible groupnames, +check the adhoc_groups section at the triagebot.toml config file, +or the list of teams in the rust-lang teams database.

    +

    Waiting for reviews

    +
    +

    NOTE

    +

    Pull request reviewers are often working at capacity, +and many of them are contributing on a volunteer basis. +In order to minimize review delays, +pull request authors and assigned reviewers should ensure that the review label +(S-waiting-on-review and S-waiting-on-author) stays updated, +invoking these commands when appropriate:

    +
      +
    • +

      @rustbot author: +the review is finished, +and PR author should check the comments and take action accordingly.

      +
    • +
    • +

      @rustbot review: +the author is ready for a review, +and this PR will be queued again in the reviewer's queue.

      +
    • +
    +
    +

    Please note that the reviewers are humans, who for the most part work on rustc +in their free time. This means that they can take some time to respond and review +your PR. It also means that reviewers can miss some PRs that are assigned to them.

    +

    To try to move PRs forward, the Triage WG regularly goes through all PRs that +are waiting for review and haven't been discussed for at least 2 weeks. If you +don't get a review within 2 weeks, feel free to ask the Triage WG on +Zulip (#t-release/triage). They have knowledge of when to ping, who might be +on vacation, etc.

    +

    The reviewer may request some changes using the GitHub code review interface. +They may also request special procedures for some PRs. +See Crater and Breaking Changes chapters for some examples of such procedures.

    +

    CI

    +

    In addition to being reviewed by a human, pull requests are automatically tested, +thanks to continuous integration (CI). Basically, every time you open and update +a pull request, CI builds the compiler and tests it against the +compiler test suite, and also performs other tests such as checking that +your pull request is in compliance with Rust's style guidelines.

    +

    Running continuous integration tests allows PR authors to catch mistakes early +without going through a first review cycle, and also helps reviewers stay aware +of the status of a particular pull request.

    +

    Rust has plenty of CI capacity, and you should never have to worry about wasting +computational resources each time you push a change. It is also perfectly fine +(and even encouraged!) to use the CI to test your changes if it can help your +productivity. In particular, we don't recommend running the full ./x test suite locally, +since it takes a very long time to execute.

    +

    r+

    +

    After someone has reviewed your pull request, they will leave an annotation +on the pull request with an r+. It will look something like this:

    +
    @bors r+
    +
    +

    This tells @bors, our lovable integration bot, that your pull request has +been approved. The PR then enters the merge queue, where @bors +will run all the tests on every platform we support. If it all works out, +@bors will merge your code into master and close the pull request.

    +

    Depending on the scale of the change, you may see a slightly different form of r+:

    +
    @bors r+ rollup
    +
    +

    The additional rollup tells @bors that this change should always be "rolled up". +Changes that are rolled up are tested and merged alongside other PRs, to +speed the process up. Typically only small changes that are expected not to conflict +with one another are marked as "always roll up".

    +

    Be patient; this can take a while and the queue can sometimes be long. PRs are never merged by hand.

    +

    Opening a PR

    +

    You are now ready to file a pull request? Great! Here are a few points you +should be aware of.

    +

    All pull requests should be filed against the master branch, +unless you know for sure that you should target a different branch.

    +

    Make sure your pull request is in compliance with Rust's style guidelines by running

    +
    $ ./x test tidy --bless
    +
    +

    We recommend to make this check before every pull request (and every new commit +in a pull request); you can add git hooks +before every push to make sure you never forget to make this check. +The CI will also run tidy and will fail if tidy fails.

    +

    Rust follows a no merge-commit policy, meaning, when you encounter merge +conflicts you are expected to always rebase instead of merging. E.g. always use +rebase when bringing the latest changes from the master branch to your feature +branch. If your PR contains merge commits, it will get marked as has-merge-commits. +Once you have removed the merge commits, e.g., through an interactive rebase, you +should remove the label again:

    +
    @rustbot label -has-merge-commits
    +
    +

    See this chapter for more details.

    +

    If you encounter merge conflicts or when a reviewer asks you to perform some +changes, your PR will get marked as S-waiting-on-author. When you resolve +them, you should use @rustbot to mark it as S-waiting-on-review:

    +
    @rustbot ready
    +
    +

    GitHub allows closing issues using keywords. This feature +should be used to keep the issue tracker tidy. However, it is generally preferred +to put the "closes #123" text in the PR description rather than the issue commit; +particularly during rebasing, citing the issue number in the commit can "spam" +the issue in question.

    +

    However, if your PR fixes a stable-to-beta or stable-to-stable regression and has +been accepted for a beta and/or stable backport (i.e., it is marked beta-accepted +and/or stable-accepted), please do not use any such keywords since we don't +want the corresponding issue to get auto-closed once the fix lands on master. +Please update the PR description while still mentioning the issue somewhere. +For example, you could write Fixes (after beta backport) #NNN..

    +

    As for further actions, please keep a sharp look-out for a PR whose title begins with +[beta] or [stable] and which backports the PR in question. When that one gets +merged, the relevant issue can be closed. The closing comment should mention all +PRs that were involved. If you don't have the permissions to close the issue, please +leave a comment on the original PR asking the reviewer to close it for you.

    +

    Reverting a PR

    +

    When a PR leads to miscompile, significant performance regressions, or other critical issues, we may +want to revert that PR with a regression test case. You can also check out the revert policy on +Forge docs (which is mainly targeted for reviewers, but contains useful info for PR authors too).

    +

    If the PR contains huge changes, it can be challenging to revert, making it harder to review +incremental fixes in subsequent updates. Or if certain code in that PR is heavily depended upon by +subsequent PRs, reverting it can become difficult.

    +

    In such cases, we can identify the problematic code and disable it for some input, as shown in #128271.

    +

    For MIR optimizations, we can also use the -Zunsound-mir-opt option to gate the mir-opt, as shown +in #132356.

    +

    External dependencies

    +

    This section has moved to "Using External Repositories".

    +

    Writing documentation

    +

    Documentation improvements are very welcome. The source of doc.rust-lang.org +is located in src/doc in the tree, and standard API documentation is generated +from the source code itself (e.g. library/std/src/lib.rs). Documentation pull requests +function in the same way as other pull requests.

    +

    To find documentation-related issues, use the A-docs label.

    +

    You can find documentation style guidelines in RFC 1574.

    +

    To build the standard library documentation, use x doc --stage 0 library --open. +To build the documentation for a book (e.g. the unstable book), use x doc src/doc/unstable-book. +Results should appear in build/host/doc, as well as automatically open in your default browser. +See Building Documentation for more +information.

    +

    You can also use rustdoc directly to check small fixes. For example, +rustdoc src/doc/reference.md will render reference to doc/reference.html. +The CSS might be messed up, but you can verify that the HTML is right.

    +

    Contributing to rustc-dev-guide

    +

    Contributions to the rustc-dev-guide are always welcome, and can be made directly at +the rust-lang/rustc-dev-guide repo. +The issue tracker in that repo is also a great way to find things that need doing. +There are issues for beginners and advanced compiler devs alike!

    +

    Just a few things to keep in mind:

    +
      +
    • +

      Please try to avoid overly long lines and use semantic line breaks (where you break the line after each sentence). +There is no strict limit on line lengths; let the sentence or part of the sentence flow to its proper end on the same line.

      +
    • +
    • +

      When contributing text to the guide, please contextualize the information with some time period +and/or a reason so that the reader knows how much to trust the information. +Aim to provide a reasonable amount of context, possibly including but not limited to:

      +
        +
      • +

        A reason for why the data may be out of date other than "change", +as change is a constant across the project.

        +
      • +
      • +

        The date the comment was added, e.g. instead of writing "Currently, ..." +or "As of now, ...", +consider adding the date, in one of the following formats:

        +
          +
        • Jan 2021
        • +
        • January 2021
        • +
        • jan 2021
        • +
        • january 2021
        • +
        +

        There is a CI action (in .github/workflows/date-check.yml) +that generates a monthly report showing those that are over 6 months old +(example).

        +

        For the action to pick the date, +add a special annotation before specifying the date:

        +
        <!-- date-check --> Apr 2025
        +
        +

        Example:

        +
        As of <!-- date-check --> Apr 2025, the foo did the bar.
        +
        +

        For cases where the date should not be part of the visible rendered output, +use the following instead:

        +
        <!-- date-check: Apr 2025 -->
        +
        +
      • +
      • +

        A link to a relevant WG, tracking issue, rustc rustdoc page, or similar, that may provide +further explanation for the change process or a way to verify that the information is not +outdated.

        +
      • +
      +
    • +
    • +

      If a text grows rather long (more than a few page scrolls) or complicated (more than four +subsections), +it might benefit from having a Table of Contents at the beginning, +which you can auto-generate by including the <!-- toc --> marker at the top.

      +
    • +
    +

    Issue triage

    +

    Please see https://forge.rust-lang.org/release/issue-triaging.html.

    +

    Rfcbot labels

    +

    rfcbot uses its own labels for tracking the process of coordinating +asynchronous decisions, such as approving or rejecting a change. +This is used for RFCs, issues, and pull requests.

    +
    + + + + + + + + + +
    LabelsColorDescription
    proposed-final-comment-period GrayCurrently awaiting signoff of all team members in order to enter the final comment period.
    disposition-merge GreenIndicates the intent is to merge the change.
    disposition-close RedIndicates the intent is to not accept the change and close it.
    disposition-postpone GrayIndicates the intent is to not accept the change at this time and postpone it to a later date.
    final-comment-period BlueCurrently soliciting final comments before merging or closing.
    finished-final-comment-period Light YellowThe final comment period has concluded, and the issue will be merged or closed.
    postponed YellowThe issue has been postponed.
    closed RedThe issue has been rejected.
    to-announce GrayIssues that have finished their final-comment-period and should be publicly announced. Note: the rust-lang/rust repository uses this label differently, to announce issues at the triage meetings.
    +
    + +

    This section has moved to the "About this guide" chapter.

    +

    About the compiler team

    +

    rustc is maintained by the Rust compiler team. The people who belong to +this team collectively work to track regressions and implement new features. +Members of the Rust compiler team are people who have made significant +contributions to rustc and its design.

    +

    Discussion

    +

    Currently the compiler team chats in Zulip:

    +
      +
    • Team chat occurs in the t-compiler stream on the Zulip instance
    • +
    • There are also a number of other associated Zulip streams, +such as t-compiler/help, where people can ask for help +with rustc development, or t-compiler/meetings, +where the team holds their weekly triage and steering meetings.
    • +
    +

    Reviewers

    +

    If you're interested in figuring out who can answer questions about a +particular part of the compiler, or you'd just like to know who works on what, +check out triagebot.toml's assign section. +It contains a listing of the various parts of the compiler and a list of people +who are reviewers of each part.

    +

    Rust compiler meeting

    +

    The compiler team has a weekly meeting where we do triage and try to +generally stay on top of new bugs, regressions, and discuss important +things in general. +They are held on Zulip. It works roughly as follows:

    +
      +
    • Announcements, MCPs/FCPs, and WG-check-ins: We share some +announcements with the rest of the team about important things we want +everyone to be aware of. We also share the status of MCPs and FCPs and we +use the opportunity to have a couple of WGs giving us an update about +their work.
    • +
    • Check for beta and stable nominations: These are nominations of things to +backport to beta and stable respectively. +We then look for new cases where the compiler broke previously working +code in the wild. Regressions are important issues to fix, so it's +likely that they are tagged as P-critical or P-high; the major +exception would be bug fixes (though even there we often aim to give +warnings first).
    • +
    • Review P-critical and P-high bugs: P-critical and P-high bugs are +those that are sufficiently important for us to actively track +progress. P-critical and P-high bugs should ideally always have an +assignee.
    • +
    • Check S-waiting-on-team and I-nominated issues: These are issues where feedback from +the team is desired.
    • +
    • Look over the performance triage report: We check for PRs that made the +performance worse and try to decide if it's worth reverting the performance regression or if +the regression can be addressed in a future PR.
    • +
    +

    The meeting currently takes place on Thursdays at 10am Boston time +(UTC-4 typically, but daylight savings time sometimes makes things +complicated).

    +

    Team membership

    +

    Membership in the Rust team is typically offered when someone has been +making significant contributions to the compiler for some +time. Membership is both a recognition but also an obligation: +compiler team members are generally expected to help with upkeep as +well as doing reviews and other work.

    +

    If you are interested in becoming a compiler team member, the first +thing to do is to start fixing some bugs, or get involved in a working +group. One good way to find bugs is to look for +open issues tagged with E-easy +or +E-mentor.

    +

    You can also dig through the graveyard of PRs that were +closed due to inactivity, +some of them may contain work that is still useful - refer to the +associated issues, if any - and only needs some finishing touches +for which the original author didn't have time.

    +

    r+ rights

    +

    Once you have made a number of individual PRs to rustc, we will often +offer r+ privileges. This means that you have the right to instruct +"bors" (the robot that manages which PRs get landed into rustc) to +merge a PR +(here are some instructions for how to talk to bors).

    +

    The guidelines for reviewers are as follows:

    +
      +
    • You are always welcome to review any PR, regardless of who it is +assigned to. However, do not r+ PRs unless: +
        +
      • You are confident in that part of the code.
      • +
      • You are confident that nobody else wants to review it first. +
          +
        • For example, sometimes people will express a desire to review a +PR before it lands, perhaps because it touches a particularly +sensitive part of the code.
        • +
        +
      • +
      +
    • +
    • Always be polite when reviewing: you are a representative of the +Rust project, so it is expected that you will go above and beyond +when it comes to the Code of Conduct.
    • +
    +

    Reviewer rotation

    +

    Once you have r+ rights, you can also be added to the reviewer rotation. +triagebot is the bot that automatically assigns incoming PRs to reviewers. +If you are added, you will be randomly selected to review +PRs. If you find you are assigned a PR that you don't feel comfortable +reviewing, you can also leave a comment like r? @so-and-so to assign +to someone else — if you don't know who to request, just write r? @nikomatsakis for reassignment and @nikomatsakis will pick someone +for you.

    +

    Getting on the reviewer rotation is much appreciated as it lowers the +review burden for all of us! However, if you don't have time to give +people timely feedback on their PRs, it may be better that you don't +get on the list.

    +

    Full team membership

    +

    Full team membership is typically extended once someone made many +contributions to the Rust compiler over time, ideally (but not +necessarily) to multiple areas. Sometimes this might be implementing a +new feature, but it is also important — perhaps more important! — to +have time and willingness to help out with general upkeep such as +bugfixes, tracking regressions, and other less glamorous work.

    +

    Using Git

    + +

    The Rust project uses Git to manage its source code. In order to +contribute, you'll need some familiarity with its features so that your changes +can be incorporated into the compiler.

    +

    The goal of this page is to cover some of the more common questions and +problems new contributors face. Although some Git basics will be covered here, +if you find that this is still a little too fast for you, it might make sense +to first read some introductions to Git, such as the Beginner and Getting +started sections of this tutorial from Atlassian. GitHub also +provides documentation and guides for beginners, or you can consult the +more in depth book from Git.

    +

    This guide is incomplete. If you run into trouble with git that this page doesn't help with, +please open an issue so we can document how to fix it.

    +

    Prerequisites

    +

    We'll assume that you've installed Git, forked rust-lang/rust, and cloned the +forked repo to your PC. We'll use the command line interface to interact +with Git; there are also a number of GUIs and IDE integrations that can +generally do the same things.

    +

    If you've cloned your fork, then you will be able to reference it with origin +in your local repo. It may be helpful to also set up a remote for the official +rust-lang/rust repo via

    +
    git remote add upstream https://github.com/rust-lang/rust.git
    +
    +

    if you're using HTTPS, or

    +
    git remote add upstream git@github.com:rust-lang/rust.git
    +
    +

    if you're using SSH.

    +

    NOTE: This page is dedicated to workflows for rust-lang/rust, but will likely be +useful when contributing to other repositories in the Rust project.

    +

    Standard Process

    +

    Below is the normal procedure that you're likely to use for most minor changes +and PRs:

    +
      +
    1. Ensure that you're making your changes on top of master: +git checkout master.
    2. +
    3. Get the latest changes from the Rust repo: git pull upstream master --ff-only. +(see No-Merge Policy for more info about this).
    4. +
    5. Make a new branch for your change: git checkout -b issue-12345-fix.
    6. +
    7. Make some changes to the repo and test them.
    8. +
    9. Stage your changes via git add src/changed/file.rs src/another/change.rs +and then commit them with git commit. Of course, making intermediate commits +may be a good idea as well. Avoid git add ., as it makes it too easy to +unintentionally commit changes that should not be committed, such as submodule +updates. You can use git status to check if there are any files you forgot +to stage.
    10. +
    11. Push your changes to your fork: git push --set-upstream origin issue-12345-fix +(After adding commits, you can use git push and after rebasing or +pulling-and-rebasing, you can use git push --force-with-lease).
    12. +
    13. Open a PR from your fork to rust-lang/rust's master branch.
    14. +
    +

    If you end up needing to rebase and are hitting conflicts, see Rebasing. +If you want to track upstream while working on long-running feature/issue, see +Keeping things up to date.

    +

    If your reviewer requests changes, the procedure for those changes looks much +the same, with some steps skipped:

    +
      +
    1. Ensure that you're making changes to the most recent version of your code: +git checkout issue-12345-fix.
    2. +
    3. Make, stage, and commit your additional changes just like before.
    4. +
    5. Push those changes to your fork: git push.
    6. +
    +

    Troubleshooting git issues

    +

    You don't need to clone rust-lang/rust from scratch if it's out of date! +Even if you think you've messed it up beyond repair, there are ways to fix +the git state that don't require downloading the whole repository again. +Here are some common issues you might run into:

    +

    I made a merge commit by accident.

    +

    Git has two ways to update your branch with the newest changes: merging and rebasing. +Rust uses rebasing. If you make a merge commit, it's not too hard to fix: +git rebase -i upstream/master.

    +

    See Rebasing for more about rebasing.

    +

    I deleted my fork on GitHub!

    +

    This is not a problem from git's perspective. If you run git remote -v, +it will say something like this:

    +
    $ git remote -v
    +origin  git@github.com:jyn514/rust.git (fetch)
    +origin  git@github.com:jyn514/rust.git (push)
    +upstream        https://github.com/rust-lang/rust (fetch)
    +upstream        https://github.com/rust-lang/rust (fetch)
    +
    +

    If you renamed your fork, you can change the URL like this:

    +
    git remote set-url origin <URL>
    +
    +

    where the <URL> is your new fork.

    +

    I changed a submodule by accident

    +

    Usually people notice this when rustbot posts a comment on github that cargo has been modified:

    +

    rustbot submodule comment

    +

    You might also notice conflicts in the web UI:

    +

    conflict in src/tools/cargo

    +

    The most common cause is that you rebased after a change and ran git add . without first running +x to update the submodules. Alternatively, you might have run cargo fmt instead of x fmt +and modified files in a submodule, then committed the changes.

    +

    To fix it, do the following things (if you changed a submodule other than cargo, +replace src/tools/cargo with the path to that submodule):

    +
      +
    1. See which commit has the accidental changes: git log --stat -n1 src/tools/cargo
    2. +
    3. Revert the changes to that commit: git checkout <my-commit>~ src/tools/cargo. Type ~ +literally but replace <my-commit> with the output from step 1.
    4. +
    5. Tell git to commit the changes: git commit --fixup <my-commit>
    6. +
    7. Repeat steps 1-3 for all the submodules you modified. +
        +
      • If you modified the submodule in several different commits, you will need to repeat steps 1-3 +for each commit you modified. You'll know when to stop when the git log command shows a commit +that's not authored by you.
      • +
      +
    8. +
    9. Squash your changes into the existing commits: git rebase --autosquash -i upstream/master
    10. +
    11. Push your changes.
    12. +
    +

    I see "error: cannot rebase" when I try to rebase

    +

    These are two common errors to see when rebasing:

    +
    error: cannot rebase: Your index contains uncommitted changes.
    +error: Please commit or stash them.
    +
    +
    error: cannot rebase: You have unstaged changes.
    +error: Please commit or stash them.
    +
    +

    (See https://git-scm.com/book/en/v2/Getting-Started-What-is-Git%3F#_the_three_states for the difference between the two.)

    +

    This means you have made changes since the last time you made a commit. To be able to rebase, either +commit your changes, or make a temporary commit called a "stash" to have them still not be committed +when you finish rebasing. You may want to configure git to make this "stash" automatically, which +will prevent the "cannot rebase" error in nearly all cases:

    +
    git config --global rebase.autostash true
    +
    +

    See https://git-scm.com/book/en/v2/Git-Tools-Stashing-and-Cleaning for more info about stashing.

    +

    I see 'Untracked Files: src/stdarch'?

    +

    This is left over from the move to the library/ directory. +Unfortunately, git rebase does not follow renames for submodules, so you +have to delete the directory yourself:

    +
    rm -r src/stdarch
    +
    +

    I see <<< HEAD?

    +

    You were probably in the middle of a rebase or merge conflict. See +Conflicts for how to fix the conflict. If you don't care about the changes +and just want to get a clean copy of the repository back, you can use git reset:

    +
    # WARNING: this throws out any local changes you've made! Consider resolving the conflicts instead.
    +git reset --hard master
    +
    +

    failed to push some refs

    +

    git push will not work properly and say something like this:

    +
     ! [rejected]        issue-xxxxx -> issue-xxxxx (non-fast-forward)
    +error: failed to push some refs to 'https://github.com/username/rust.git'
    +hint: Updates were rejected because the tip of your current branch is behind
    +hint: its remote counterpart. Integrate the remote changes (e.g.
    +hint: 'git pull ...') before pushing again.
    +hint: See the 'Note about fast-forwards' in 'git push --help' for details.
    +
    +

    The advice this gives is incorrect! Because of Rust's +"no-merge" policy the merge commit created by git pull +will not be allowed in the final PR, in addition to defeating the point of the +rebase! Use git push --force-with-lease instead.

    +

    Git is trying to rebase commits I didn't write?

    +

    If you see many commits in your rebase list, or merge commits, or commits by other people that you +didn't write, it likely means you're trying to rebase over the wrong branch. For example, you may +have a rust-lang/rust remote upstream, but ran git rebase origin/master instead of git rebase upstream/master. The fix is to abort the rebase and use the correct branch instead:

    +
    git rebase --abort
    +git rebase -i upstream/master
    +
    +
    Click here to see an example of rebasing over the wrong branch +

    Interactive rebase over the wrong branch

    +
    +

    Quick note about submodules

    +

    When updating your local repository with git pull, you may notice that sometimes +Git says you have modified some files that you have never edited. For example, +running git status gives you something like (note the new commits mention):

    +
    On branch master
    +Your branch is up to date with 'origin/master'.
    +
    +Changes not staged for commit:
    +  (use "git add <file>..." to update what will be committed)
    +  (use "git restore <file>..." to discard changes in working directory)
    +	modified:   src/llvm-project (new commits)
    +	modified:   src/tools/cargo (new commits)
    +
    +no changes added to commit (use "git add" and/or "git commit -a")
    +
    +

    These changes are not changes to files: they are changes to submodules (more on this later). +To get rid of those:

    +
    git submodule update
    +
    +

    Some submodules are not actually needed; for example, src/llvm-project doesn't need to be checked +out if you're using download-ci-llvm. To avoid having to keep fetching its history, you can use +git submodule deinit -f src/llvm-project, which will also avoid it showing as modified again.

    +

    Rebasing and Conflicts

    +

    When you edit your code locally, you are making changes to the version of +rust-lang/rust that existed when you created your feature branch. As such, when +you submit your PR it is possible that some of the changes that have been made +to rust-lang/rust since then are in conflict with the changes you've made. +When this happens, you need to resolve the conflicts before your changes can be +merged. To do that, you need to rebase your work on top of rust-lang/rust.

    +

    Rebasing

    +

    To rebase your feature branch on top of the newest version of the master branch +of rust-lang/rust, checkout your branch, and then run this command:

    +
    git pull --rebase https://github.com/rust-lang/rust.git master
    +
    +
    +

    If you are met with the following error:

    +
    error: cannot pull with rebase: Your index contains uncommitted changes.
    +error: please commit or stash them.
    +
    +

    it means that you have some uncommitted work in your working tree. In that +case, run git stash before rebasing, and then git stash pop after you +have rebased and fixed all conflicts.

    +
    +

    When you rebase a branch on master, all the changes on your branch are +reapplied to the most recent version of master. In other words, Git tries to +pretend that the changes you made to the old version of master were instead +made to the new version of master. During this process, you should expect to +encounter at least one "rebase conflict." This happens when Git's attempt to +reapply the changes fails because your changes conflicted with other changes +that have been made. You can tell that this happened because you'll see +lines in the output that look like

    +
    CONFLICT (content): Merge conflict in file.rs
    +
    +

    When you open these files, you'll see sections of the form

    +
    <<<<<<< HEAD
    +Original code
    +=======
    +Your code
    +>>>>>>> 8fbf656... Commit fixes 12345
    +
    +

    This represents the lines in the file that Git could not figure out how to +rebase. The section between <<<<<<< HEAD and ======= has the code from +master, while the other side has your version of the code. You'll need to +decide how to deal with the conflict. You may want to keep your changes, +keep the changes on master, or combine the two.

    +

    Generally, resolving the conflict consists of two steps: First, fix the +particular conflict. Edit the file to make the changes you want and remove the +<<<<<<<, ======= and >>>>>>> lines in the process. Second, check the +surrounding code. If there was a conflict, its likely there are some logical +errors lying around too! It's a good idea to run x check here to make sure +there are no glaring errors.

    +

    Once you're all done fixing the conflicts, you need to stage the files that had +conflicts in them via git add. Afterwards, run git rebase --continue to let +Git know that you've resolved the conflicts and it should finish the rebase.

    +

    Once the rebase has succeeded, you'll want to update the associated branch on +your fork with git push --force-with-lease.

    +

    Keeping things up to date

    +

    The above section on Rebasing is a specific +guide on rebasing work and dealing with merge conflicts. +Here is some general advice about how to keep your local repo +up-to-date with upstream changes:

    +

    Using git pull upstream master while on your local master branch regularly +will keep it up-to-date. You will also want to rebase your feature branches +up-to-date as well. After pulling, you can checkout the feature branches +and rebase them:

    +
    git checkout master
    +git pull upstream master --ff-only # to make certain there are no merge commits
    +git rebase master feature_branch
    +git push --force-with-lease # (set origin to be the same as local)
    +
    +

    To avoid merges as per the No-Merge Policy, you may want to use +git config pull.ff only (this will apply the config only to the local repo) +to ensure that Git doesn't create merge commits when git pulling, without +needing to pass --ff-only or --rebase every time.

    +

    You can also git push --force-with-lease from master to double-check that your +feature branches are in sync with their state on the Github side.

    +

    Advanced Rebasing

    +

    Squash your commits

    +

    "Squashing" commits into each other causes them to be merged into a single +commit. Both the upside and downside of this is that it simplifies the history. +On the one hand, you lose track of the steps in which changes were made, but +the history becomes easier to work with.

    +

    If there are no conflicts and you are just squashing to clean up the history, +use git rebase --interactive --keep-base master. This keeps the fork point +of your PR the same, making it easier to review the diff of what happened +across your rebases.

    +

    Squashing can also be useful as part of conflict resolution. +If your branch contains multiple consecutive rewrites of the same code, or if +the rebase conflicts are extremely severe, you can use +git rebase --interactive master to gain more control over the process. This +allows you to choose to skip commits, edit the commits that you do not skip, +change the order in which they are applied, or "squash" them into each other.

    +

    Alternatively, you can sacrifice the commit history like this:

    +
    # squash all the changes into one commit so you only have to worry about conflicts once
    +git rebase -i --keep-base master  # and squash all changes along the way
    +git rebase master
    +# fix all merge conflicts
    +git rebase --continue
    +
    +

    You also may want to squash just the last few commits together, possibly +because they only represent "fixups" and not real changes. For example, +git rebase --interactive HEAD~2 will allow you to edit the two commits only.

    +

    git range-diff

    +

    After completing a rebase, and before pushing up your changes, you may want to +review the changes between your old branch and your new one. You can do that +with git range-diff master @{upstream} HEAD.

    +

    The first argument to range-diff, master in this case, is the base revision +that you're comparing your old and new branch against. The second argument is +the old version of your branch; in this case, @upstream means the version that +you've pushed to GitHub, which is the same as what people will see in your pull +request. Finally, the third argument to range-diff is the new version of +your branch; in this case, it is HEAD, which is the commit that is currently +checked-out in your local repo.

    +

    Note that you can also use the equivalent, abbreviated form git range-diff master @{u} HEAD.

    +

    Unlike in regular Git diffs, you'll see a - or + next to another - or + +in the range-diff output. The marker on the left indicates a change between the +old branch and the new branch, and the marker on the right indicates a change +you've committed. So, you can think of a range-diff as a "diff of diffs" since +it shows you the differences between your old diff and your new diff.

    +

    Here's an example of git range-diff output (taken from Git's +docs):

    +
    -:  ------- > 1:  0ddba11 Prepare for the inevitable!
    +1:  c0debee = 2:  cab005e Add a helpful message at the start
    +2:  f00dbal ! 3:  decafe1 Describe a bug
    +    @@ -1,3 +1,3 @@
    +     Author: A U Thor <author@example.com>
    +
    +    -TODO: Describe a bug
    +    +Describe a bug
    +    @@ -324,5 +324,6
    +      This is expected.
    +
    +    -+What is unexpected is that it will also crash.
    +    ++Unexpectedly, it also crashes. This is a bug, and the jury is
    +    ++still out there how to fix it best. See ticket #314 for details.
    +
    +      Contact
    +3:  bedead < -:  ------- TO-UNDO
    +
    +

    (Note that git range-diff output in your terminal will probably be easier to +read than in this example because it will have colors.)

    +

    Another feature of git range-diff is that, unlike git diff, it will also +diff commit messages. This feature can be useful when amending several commit +messages so you can make sure you changed the right parts.

    +

    git range-diff is a very useful command, but note that it can take some time +to get used to its output format. You may also find Git's documentation on the +command useful, especially their "Examples" section.

    +

    No-Merge Policy

    +

    The rust-lang/rust repo uses what is known as a "rebase workflow." This means +that merge commits in PRs are not accepted. As a result, if you are running +git merge locally, chances are good that you should be rebasing instead. Of +course, this is not always true; if your merge will just be a fast-forward, +like the merges that git pull usually performs, then no merge commit is +created and you have nothing to worry about. Running git config merge.ff only +(this will apply the config to the local repo) +once will ensure that all the merges you perform are of this type, so that you +cannot make a mistake.

    +

    There are a number of reasons for this decision and like all others, it is a +tradeoff. The main advantage is the generally linear commit history. This +greatly simplifies bisecting and makes the history and commit log much easier +to follow and understand.

    +

    Tips for reviewing

    +

    NOTE: This section is for reviewing PRs, not authoring them.

    +

    Hiding whitespace

    +

    Github has a button for disabling whitespace changes that may be useful. +You can also use git diff -w origin/master to view changes locally.

    +

    hide whitespace

    +

    Fetching PRs

    +

    To checkout PRs locally, you can use git fetch upstream pull/NNNNN/head && git checkout FETCH_HEAD.

    +

    You can also use github's cli tool. Github shows a button on PRs where you can copy-paste the +command to check it out locally. See https://cli.github.com/ for more info.

    +

    gh suggestion

    +

    Moving large sections of code

    +

    Git and Github's default diff view for large moves within a file is quite poor; it will show each +line as deleted and each line as added, forcing you to compare each line yourself. Git has an option +to show moved lines in a different color:

    +
    git log -p --color-moved=dimmed-zebra --color-moved-ws=allow-indentation-change
    +
    +

    See the docs for --color-moved for more info.

    +

    range-diff

    +

    See the relevant section for PR authors. This can be useful for comparing code +that was force-pushed to make sure there are no unexpected changes.

    +

    Ignoring changes to specific files

    +

    Many large files in the repo are autogenerated. To view a diff that ignores changes to those files, +you can use the following syntax (e.g. Cargo.lock):

    +
    git log -p ':!Cargo.lock'
    +
    +

    Arbitrary patterns are supported (e.g. :!compiler/*). Patterns use the same syntax as +.gitignore, with : prepended to indicate a pattern.

    +

    Git submodules

    +

    NOTE: submodules are a nice thing to know about, but it isn't an absolute +prerequisite to contribute to rustc. If you are using Git for the first time, +you might want to get used to the main concepts of Git before reading this section.

    +

    The rust-lang/rust repository uses Git submodules as a way to use other +Rust projects from within the rust repo. Examples include Rust's fork of +llvm-project, cargo and libraries like stdarch and backtrace.

    +

    Those projects are developed and maintained in an separate Git (and GitHub) +repository, and they have their own Git history/commits, issue tracker and PRs. +Submodules allow us to create some sort of embedded sub-repository inside the +rust repository and use them like they were directories in the rust repository.

    +

    Take llvm-project for example. llvm-project is maintained in the rust-lang/llvm-project +repository, but it is used in rust-lang/rust by the compiler for code generation and +optimization. We bring it in rust as a submodule, in the src/llvm-project folder.

    +

    The contents of submodules are ignored by Git: submodules are in some sense isolated +from the rest of the repository. However, if you try to cd src/llvm-project and then +run git status:

    +
    HEAD detached at 9567f08afc943
    +nothing to commit, working tree clean
    +
    +

    As far as git is concerned, you are no longer in the rust repo, but in the llvm-project repo. +You will notice that we are in "detached HEAD" state, i.e. not on a branch but on a +particular commit.

    +

    This is because, like any dependency, we want to be able to control which version to use. +Submodules allow us to do just that: every submodule is "pinned" to a certain +commit, which doesn't change unless modified manually. If you use git checkout <commit> +in the llvm-project directory and go back to the rust directory, you can stage this +change like any other, e.g. by running git add src/llvm-project. (Note that if +you don't stage the change to commit, then you run the risk that running +x will just undo your change by switching back to the previous commit when +it automatically "updates" the submodules.)

    +

    This version selection is usually done by the maintainers of the project, and +looks like this.

    +

    Git submodules take some time to get used to, so don't worry if it isn't perfectly +clear yet. You will rarely have to use them directly and, again, you don't need +to know everything about submodules to contribute to Rust. Just know that they +exist and that they correspond to some sort of embedded subrepository dependency +that Git can nicely and fairly conveniently handle for us.

    +

    Hard-resetting submodules

    +

    Sometimes you might run into (when you run git status)

    +
    Changes not staged for commit:
    +  (use "git add <file>..." to update what will be committed)
    +  (use "git restore <file>..." to discard changes in working directory)
    +  (commit or discard the untracked or modified content in submodules)
    +        modified:   src/llvm-project (new commits, modified content)
    +
    +

    and when you try to run git submodule update it breaks horribly with errors like

    +
    error: RPC failed; curl 92 HTTP/2 stream 7 was not closed cleanly: CANCEL (err 8)
    +error: 2782 bytes of body are still expected
    +fetch-pack: unexpected disconnect while reading sideband packet
    +fatal: early EOF
    +fatal: fetch-pack: invalid index-pack output
    +fatal: Fetched in submodule path 'src/llvm-project', but it did not contain 5a5152f653959d14d68613a3a8a033fb65eec021. Direct fetching of that commit failed.
    +
    +

    If you see (new commits, modified content) you can run

    +
    git submodule foreach git reset --hard
    +
    +

    and then try git submodule update again.

    +

    Deinit git submodules

    +

    If that doesn't work, you can try to deinit all git submodules...

    +
    git submodule deinit -f --all
    +
    +

    Unfortunately sometimes your local git submodules configuration can become +completely messed up for some reason.

    +

    Overcoming fatal: not a git repository: <submodule>/../../.git/modules/<submodule>

    +

    Sometimes, for some forsaken reason, you might run into

    +
    fatal: not a git repository: src/gcc/../../.git/modules/src/gcc
    +
    +

    In this situation, for the given submodule path, i.e. <submodule_path> = src/gcc in this example, you need to:

    +
      +
    1. rm -rf <submodule_path>/.git
    2. +
    3. rm -rf .git/modules/<submodule_path>/config
    4. +
    5. rm -rf .gitconfig.lock if somehow the .gitconfig lock is orphaned.
    6. +
    +

    Then do something like ./x fmt to have bootstrap manage the submodule +checkouts for you.

    +

    Ignoring commits during git blame

    +

    Some commits contain large reformatting changes that don't otherwise change functionality. They can +be instructed to be ignored by git blame through +.git-blame-ignore-revs:

    +
      +
    1. Configure git blame to use .git-blame-ignore-revs as the list of commits to ignore: git config blame.ignorerevsfile .git-blame-ignore-revs
    2. +
    3. Add suitable commits that you wish to be ignored by git blame.
    4. +
    +

    Please include a comment for the commit that you add to .git-blame-ignore-revs so people can +easily figure out why a commit is ignored.

    +

    Mastering @rustbot

    +

    @rustbot (also known as triagebot) is a utility robot that is mostly used to +allow any contributor to achieve certain tasks that would normally require GitHub +membership to the rust-lang organization. Its most interesting features for +contributors to rustc are issue claiming and relabeling.

    +

    Issue claiming

    +

    @rustbot exposes a command that allows anyone to assign an issue to themselves. +If you see an issue you want to work on, you can send the following message as a +comment on the issue at hand:

    +
    @rustbot claim
    +
    +

    This will tell @rustbot to assign the issue to you if it has no assignee yet. +Note that because of some GitHub restrictions, you may be assigned indirectly, +i.e. @rustbot will assign itself as a placeholder and edit the top comment to +reflect the fact that the issue is now assigned to you.

    +

    If you want to unassign from an issue, @rustbot has a different command:

    +
    @rustbot release-assignment
    +
    +

    Issue relabeling

    +

    Changing labels for an issue or PR is also normally reserved for members of the +organization. However, @rustbot allows you to relabel an issue yourself, only +with a few restrictions. This is mostly useful in two cases:

    +

    Helping with issue triage: Rust's issue tracker has more than 5,000 open +issues at the time of this writing, so labels are the most powerful tool that we +have to keep it as tidy as possible. You don't need to spend hours in the issue tracker +to triage issues, but if you open an issue, you should feel free to label it if +you are comfortable with doing it yourself.

    +

    Updating the status of a PR: We use "status labels" to reflect the status of +PRs. For example, if your PR has merge conflicts, it will automatically be assigned +the S-waiting-on-author, and reviewers might not review it until you rebase your +PR. Once you do rebase your branch, you should change the labels yourself to remove +the S-waiting-on-author label and add back S-waiting-on-review. In this case, +the @rustbot command will look like this:

    +
    @rustbot label -S-waiting-on-author +S-waiting-on-review
    +
    +

    The syntax for this command is pretty loose, so there are other variants of this +command invocation. There are also some shortcuts to update labels, +for instance @rustbot ready will do the same thing with above command. +For more details, see the docs page about labeling and shortcuts.

    +

    Other commands

    +

    If you are interested in seeing what @rustbot is capable of, check out its documentation, +which is meant as a reference for the bot and should be kept up to date every time the +bot gets an upgrade.

    +

    @rustbot is maintained by the Release team. If you have any feedback regarding +existing commands or suggestions for new commands, feel free to reach out +on Zulip or file an issue in the triagebot repository

    +

    Walkthrough: a typical contribution

    + +

    There are a lot of ways to contribute to the Rust compiler, including fixing +bugs, improving performance, helping design features, providing feedback on +existing features, etc. This chapter does not claim to scratch the surface. +Instead, it walks through the design and implementation of a new feature. Not +all of the steps and processes described here are needed for every +contribution, and I will try to point those out as they arise.

    +

    In general, if you are interested in making a contribution and aren't sure +where to start, please feel free to ask!

    +

    Overview

    +

    The feature I will discuss in this chapter is the ? Kleene operator for +macros. Basically, we want to be able to write something like this:

    +
    macro_rules! foo {
    +    ($arg:ident $(, $optional_arg:ident)?) => {
    +        println!("{}", $arg);
    +
    +        $(
    +            println!("{}", $optional_arg);
    +        )?
    +    }
    +}
    +
    +fn main() {
    +    let x = 0;
    +    foo!(x); // ok! prints "0"
    +    foo!(x, x); // ok! prints "0 0"
    +}
    +

    So basically, the $(pat)? matcher in the macro means "this pattern can occur +0 or 1 times", similar to other regex syntaxes.

    +

    There were a number of steps to go from an idea to stable Rust feature. Here is +a quick list. We will go through each of these in order below. As I mentioned +before, not all of these are needed for every type of contribution.

    +
      +
    • Idea discussion/Pre-RFC A Pre-RFC is an early draft or design discussion +of a feature. This stage is intended to flesh out the design space a bit and +get a grasp on the different merits and problems with an idea. It's a great +way to get early feedback on your idea before presenting it to the wider +audience. You can find the original discussion here.
    • +
    • RFC This is when you formally present your idea to the community for +consideration. You can find the RFC here.
    • +
    • Implementation Implement your idea unstably in the compiler. You can +find the original implementation here.
    • +
    • Possibly iterate/refine As the community gets experience with your +feature on the nightly compiler and in std, there may be additional +feedback about design choice that might be adjusted. This particular feature +went through a number of iterations.
    • +
    • Stabilization When your feature has baked enough, a Rust team member may +propose to stabilize it. If there is consensus, this is done.
    • +
    • Relax Your feature is now a stable Rust feature!
    • +
    +

    Pre-RFC and RFC

    +
    +

    NOTE: In general, if you are not proposing a new feature or substantial +change to Rust or the ecosystem, you don't need to follow the RFC process. +Instead, you can just jump to implementation.

    +

    You can find the official guidelines for when to open an RFC here.

    +
    +

    An RFC is a document that describes the feature or change you are proposing in +detail. Anyone can write an RFC; the process is the same for everyone, +including Rust team members.

    +

    To open an RFC, open a PR on the +rust-lang/rfcs repo on GitHub. You can +find detailed instructions in the +README.

    +

    Before opening an RFC, you should do the research to "flesh out" your idea. +Hastily-proposed RFCs tend not to be accepted. You should generally have a good +description of the motivation, impact, disadvantages, and potential +interactions with other features.

    +

    If that sounds like a lot of work, it's because it is. But no fear! Even if +you're not a compiler hacker, you can get great feedback by doing a pre-RFC. +This is an informal discussion of the idea. The best place to do this is +internals.rust-lang.org. Your post doesn't have to follow any particular +structure. It doesn't even need to be a cohesive idea. Generally, you will get +tons of feedback that you can integrate back to produce a good RFC.

    +

    (Another pro-tip: try searching the RFCs repo and internals for prior related +ideas. A lot of times an idea has already been considered and was either +rejected or postponed to be tried again later. This can save you and everybody +else some time)

    +

    In the case of our example, a participant in the pre-RFC thread pointed out a +syntax ambiguity and a potential resolution. Also, the overall feedback seemed +positive. In this case, the discussion converged pretty quickly, but for some +ideas, a lot more discussion can happen (e.g. see this RFC which +received a whopping 684 comments!). If that happens, don't be discouraged; it +means the community is interested in your idea, but it perhaps needs some +adjustments.

    +

    The RFC for our ? macro feature did receive some discussion on the RFC thread +too. As with most RFCs, there were a few questions that we couldn't answer by +discussion: we needed experience using the feature to decide. Such questions +are listed in the "Unresolved Questions" section of the RFC. Also, over the +course of the RFC discussion, you will probably want to update the RFC document +itself to reflect the course of the discussion (e.g. new alternatives or prior +work may be added or you may decide to change parts of the proposal itself).

    +

    In the end, when the discussion seems to reach a consensus and die down a bit, +a Rust team member may propose to move to "final comment period" (FCP) with one +of three possible dispositions. This means that they want the other members of +the appropriate teams to review and comment on the RFC. More discussion may +ensue, which may result in more changes or unresolved questions being added. At +some point, when everyone is satisfied, the RFC enters the FCP, which is the +last chance for people to bring up objections. When the FCP is over, the +disposition is adopted. Here are the three possible dispositions:

    +
      +
    • Merge: accept the feature. Here is the proposal to merge for our ? macro +feature.
    • +
    • Close: this feature in its current form is not a good fit for rust. Don't +be discouraged if this happens to your RFC, and don't take it personally. +This is not a reflection on you, but rather a community decision that rust +will go a different direction.
    • +
    • Postpone: there is interest in going this direction but not at the moment. +This happens most often because the appropriate Rust team doesn't have the +bandwidth to shepherd the feature through the process to stabilization. Often +this is the case when the feature doesn't fit into the team's roadmap. +Postponed ideas may be revisited later.
    • +
    +

    When an RFC is merged, the PR is merged into the RFCs repo. A new tracking +issue is created in the rust-lang/rust repo to track progress on the feature +and discuss unresolved questions, implementation progress and blockers, etc. +Here is the tracking issue on for our ? macro feature.

    +

    +

    Implementation

    +

    To make a change to the compiler, open a PR against the rust-lang/rust repo.

    +

    Depending on the feature/change/bug fix/improvement, implementation may be +relatively-straightforward or it may be a major undertaking. You can always ask +for help or mentorship from more experienced compiler devs. Also, you don't +have to be the one to implement your feature; but keep in mind that if you +don't, it might be a while before someone else does.

    +

    For the ? macro feature, I needed to go understand the relevant parts of +macro expansion in the compiler. Personally, I find that improving the +comments in the code is a helpful way of making sure I understand +it, but you don't have to do that if you don't want to.

    +

    I then implemented the original feature, as described in the RFC. When +a new feature is implemented, it goes behind a feature gate, which means that +you have to use #![feature(my_feature_name)] to use the feature. The feature +gate is removed when the feature is stabilized.

    +

    Most bug fixes and improvements don't require a feature gate. You can just +make your changes/improvements.

    +

    When you open a PR on the rust-lang/rust, a bot will assign your PR to a +reviewer. If there is a particular Rust team member you are working with, you can +request that reviewer by leaving a comment on the thread with r? @reviewer-github-id (e.g. r? @eddyb). If you don't know who to request, +don't request anyone; the bot will assign someone automatically based on which files you changed.

    +

    The reviewer may request changes before they approve your PR, they may mark the PR with label +"S-waiting-on-author" after leaving comments, this means that the PR is blocked on you to make +some requested changes. When you finished iterating on the changes, you can mark the PR as +S-waiting-on-review again by leaving a comment with @rustbot ready, this will remove the +S-waiting-on-author label and add the S-waiting-on-review label.

    +

    Feel free to ask questions or discuss things you don't understand or disagree with. However, +recognize that the PR won't be merged unless someone on the Rust team approves +it. If a reviewer leave a comment like r=me after fixing ..., that means they approve the PR and +you can merge it with comment with @bors r=reviewer-github-id(e.g. @bors r=eddyb) to merge it +after fixing trivial issues. Note that r=someone requires permission and bors could say +something like "🔑 Insufficient privileges..." when commenting r=someone. In that case, +you have to ask the reviewer to revisit your PR.

    +

    When your reviewer approves the PR, it will go into a queue for yet another bot +called @bors. @bors manages the CI build/merge queue. When your PR reaches +the head of the @bors queue, @bors will test out the merge by running all +tests against your PR on GitHub Actions. This takes a lot of time to +finish. If all tests pass, the PR is merged and becomes part of the next +nightly compiler!

    +

    There are a couple of things that may happen for some PRs during the review process

    +
      +
    • If the change is substantial enough, the reviewer may request an FCP on +the PR. This gives all members of the appropriate team a chance to review the +changes.
    • +
    • If the change may cause breakage, the reviewer may request a crater run. +This compiles the compiler with your changes and then attempts to compile all +crates on crates.io with your modified compiler. This is a great smoke test +to check if you introduced a change to compiler behavior that affects a large +portion of the ecosystem.
    • +
    • If the diff of your PR is large or the reviewer is busy, your PR may have +some merge conflicts with other PRs that happen to get merged first. You +should fix these merge conflicts using the normal git procedures.
    • +
    +

    If you are not doing a new feature or something like that (e.g. if you are +fixing a bug), then that's it! Thanks for your contribution :)

    +

    Refining your implementation

    +

    As people get experience with your new feature on nightly, slight changes may +be proposed and unresolved questions may become resolved. Updates/changes go +through the same process for implementing any other changes, as described +above (i.e. submit a PR, go through review, wait for @bors, etc).

    +

    Some changes may be major enough to require an FCP and some review by Rust team +members.

    +

    For the ? macro feature, we went through a few different iterations after the +original implementation: 1, 2, 3.

    +

    Along the way, we decided that ? should not take a separator, which was +previously an unresolved question listed in the RFC. We also changed the +disambiguation strategy: we decided to remove the ability to use ? as a +separator token for other repetition operators (e.g. + or *). However, +since this was a breaking change, we decided to do it over an edition boundary. +Thus, the new feature can be enabled only in edition 2018. These deviations +from the original RFC required another +FCP.

    +

    Stabilization

    +

    Finally, after the feature had baked for a while on nightly, a language team member +moved to stabilize it.

    +

    A stabilization report needs to be written that includes

    +
      +
    • brief description of the behavior and any deviations from the RFC
    • +
    • which edition(s) are affected and how
    • +
    • links to a few tests to show the interesting aspects
    • +
    +

    The stabilization report for our feature is here.

    +

    After this, a PR is made to remove the feature gate, enabling the feature by +default (on the 2018 edition). A note is added to the Release notes +about the feature.

    +

    Steps to stabilize the feature can be found at Stabilizing Features.

    +

    Implementing new language features

    + +

    When you want to implement a new significant feature in the compiler, +you need to go through this process to make sure everything goes +smoothly.

    +

    NOTE: this section is for language features, not library features, +which use a different process.

    +

    See also the Rust Language Design Team's procedures for +proposing changes to the language.

    +

    The @rfcbot FCP process

    +

    When the change is small and uncontroversial, then it can be done +with just writing a PR and getting an r+ from someone who knows that +part of the code. However, if the change is potentially controversial, +it would be a bad idea to push it without consensus from the rest +of the team (both in the "distributed system" sense to make sure +you don't break anything you don't know about, and in the social +sense to avoid PR fights).

    +

    If such a change seems to be too small to require a full formal RFC process +(e.g., a small standard library addition, a big refactoring of the code, a +"technically-breaking" change, or a "big bugfix" that basically amounts to a +small feature) but is still too controversial or big to get by with a single r+, +you can propose a final comment period (FCP). Or, if you're not on the relevant +team (and thus don't have @rfcbot permissions), ask someone who is to start one; +unless they have a concern themselves, they should.

    +

    Again, the FCP process is only needed if you need consensus – if you +don't think anyone would have a problem with your change, it's OK to +get by with only an r+. For example, it is OK to add or modify +unstable command-line flags or attributes without an FCP for +compiler development or standard library use, as long as you don't +expect them to be in wide use in the nightly ecosystem. +Some teams have lighter weight processes that they use in scenarios +like this; for example, the compiler team recommends +filing a Major Change Proposal (MCP) as a lightweight way to +garner support and feedback without requiring full consensus.

    +

    You don't need to have the implementation fully ready for r+ to propose an FCP, +but it is generally a good idea to have at least a proof +of concept so that people can see what you are talking about.

    +

    When an FCP is proposed, it requires all members of the team to sign off the +FCP. After they all do so, there's a 10-day-long "final comment period" (hence +the name) where everybody can comment, and if no concerns are raised, the +PR/issue gets FCP approval.

    +

    The logistics of writing features

    +

    There are a few "logistic" hoops you might need to go through in +order to implement a feature in a working way.

    +

    Warning Cycles

    +

    In some cases, a feature or bugfix might break some existing programs +in some edge cases. In that case, you might want to do a crater run +to assess the impact and possibly add a future-compatibility lint, +similar to those used for +edition-gated lints.

    +

    Stability

    +

    We value the stability of Rust. Code that works and runs on stable +should (mostly) not break. Because of that, we don't want to release +a feature to the world with only team consensus and code review - +we want to gain real-world experience on using that feature on nightly, +and we might want to change the feature based on that experience.

    +

    To allow for that, we must make sure users don't accidentally depend +on that new feature - otherwise, especially if experimentation takes +time or is delayed and the feature takes the trains to stable, +it would end up de facto stable and we'll not be able to make changes +in it without breaking people's code.

    +

    The way we do that is that we make sure all new features are feature +gated - they can't be used without enabling a feature gate +(#[feature(foo)]), which can't be done in a stable/beta compiler. +See the stability in code section for the technical details.

    +

    Eventually, after we gain enough experience using the feature, +make the necessary changes, and are satisfied, we expose it to +the world using the stabilization process described here. +Until then, the feature is not set in stone: every part of the +feature can be changed, or the feature might be completely +rewritten or removed. Features are not supposed to gain tenure +by being unstable and unchanged for a year.

    +

    Tracking Issues

    +

    To keep track of the status of an unstable feature, the +experience we get while using it on nightly, and of the +concerns that block its stabilization, every feature-gate +needs a tracking issue. General discussions about the feature should be done on the tracking issue.

    +

    For features that have an RFC, you should use the RFC's +tracking issue for the feature.

    +

    For other features, you'll have to make a tracking issue +for that feature. The issue title should be "Tracking issue +for YOUR FEATURE". Use the "Tracking Issue" issue template.

    +

    Stability in code

    +

    The below steps needs to be followed in order to implement +a new unstable feature:

    +
      +
    1. +

      Open a tracking issue - +if you have an RFC, you can use the tracking issue for the RFC.

      +

      The tracking issue should be labeled with at least C-tracking-issue. +For a language feature, a label F-feature_name should be added as well.

      +
    2. +
    3. +

      Pick a name for the feature gate (for RFCs, use the name +in the RFC).

      +
    4. +
    5. +

      Add the feature name to rustc_span/src/symbol.rs in the Symbols {...} block.

      +

      Note that this block must be in alphabetical order.

      +
    6. +
    7. +

      Add a feature gate declaration to rustc_feature/src/unstable.rs in the unstable +declare_features block.

      +
      /// description of feature
      +(unstable, $feature_name, "CURRENT_RUSTC_VERSION", Some($tracking_issue_number))
      +

      If you haven't yet +opened a tracking issue (e.g. because you want initial feedback on whether the feature is likely +to be accepted), you can temporarily use None - but make sure to update it before the PR is +merged!

      +

      For example:

      +
      /// Allows defining identifiers beyond ASCII.
      +(unstable, non_ascii_idents, "CURRENT_RUSTC_VERSION", Some(55467), None),
      +

      Features can be marked as incomplete, and trigger the warn-by-default incomplete_features +lint +by setting their type to incomplete:

      +
      /// Allows unsized rvalues at arguments and parameters.
      +(incomplete, unsized_locals, "CURRENT_RUSTC_VERSION", Some(48055), None),
      +

      To avoid semantic merge conflicts, please use CURRENT_RUSTC_VERSION instead of 1.70 or +another explicit version number.

      +
    8. +
    9. +

      Prevent usage of the new feature unless the feature gate is set. +You can check it in most places in the compiler using the +expression tcx.features().$feature_name()

      +

      If the feature gate is not set, you should either maintain +the pre-feature behavior or raise an error, depending on +what makes sense. Errors should generally use rustc_session::parse::feature_err. +For an example of adding an error, see #81015.

      +

      For features introducing new syntax, pre-expansion gating should be used instead. +During parsing, when the new syntax is parsed, the symbol must be inserted to the +current crate's GatedSpans via self.sess.gated_span.gate(sym::my_feature, span).

      +

      After being inserted to the gated spans, the span must be checked in the +rustc_ast_passes::feature_gate::check_crate function, which actually denies +features. Exactly how it is gated depends on the exact type of feature, but most +likely will use the gate_all!() macro.

      +
    10. +
    11. +

      Add a test to ensure the feature cannot be used without +a feature gate, by creating tests/ui/feature-gates/feature-gate-$feature_name.rs. +You can generate the corresponding .stderr file by running ./x test tests/ui/feature-gates/ --bless.

      +
    12. +
    13. +

      Add a section to the unstable book, in +src/doc/unstable-book/src/language-features/$feature_name.md.

      +
    14. +
    15. +

      Write a lot of tests for the new feature, preferably in tests/ui/$feature_name/. +PRs without tests will not be accepted!

      +
    16. +
    17. +

      Get your PR reviewed and land it. You have now successfully +implemented a feature in Rust!

      +
    18. +
    +

    Stability attributes

    +

    This section is about the stability attributes and schemes that allow stable +APIs to use unstable APIs internally in the rustc standard library.

    +

    NOTE: this section is for library features, not language features. For instructions on +stabilizing a language feature see Stabilizing Features.

    + +

    unstable

    +

    The #[unstable(feature = "foo", issue = "1234", reason = "lorem ipsum")] +attribute explicitly marks an item as unstable. Items that are marked as +"unstable" cannot be used without a corresponding #![feature] attribute on +the crate, even on a nightly compiler. This restriction only applies across +crate boundaries, unstable items may be used within the crate that defines +them.

    +

    The issue field specifies the associated GitHub issue number. This field is +required and all unstable features should have an associated tracking issue. In +rare cases where there is no sensible value issue = "none" is used.

    +

    The unstable attribute infects all sub-items, where the attribute doesn't +have to be reapplied. So if you apply this to a module, all items in the module +will be unstable.

    +

    You can make specific sub-items stable by using the #[stable] attribute on +them. The stability scheme works similarly to how pub works. You can have +public functions of nonpublic modules and you can have stable functions in +unstable modules or vice versa.

    +

    Previously, due to a rustc bug, stable items inside unstable modules were +available to stable code in that location. +As of September 2024, items with accidentally stabilized +paths are marked with the #[rustc_allowed_through_unstable_modules] attribute +to prevent code dependent on those paths from breaking. Do not add this attribute +to any more items unless that is needed to avoid breaking changes.

    +

    The unstable attribute may also have the soft value, which makes it a +future-incompatible deny-by-default lint instead of a hard error. This is used +by the bench attribute which was accidentally accepted in the past. This +prevents breaking dependencies by leveraging Cargo's lint capping.

    +

    stable

    +

    The #[stable(feature = "foo", since = "1.420.69")] attribute explicitly +marks an item as stabilized. Note that stable functions may use unstable things in their body.

    +

    rustc_const_unstable

    +

    The #[rustc_const_unstable(feature = "foo", issue = "1234", reason = "lorem ipsum")] has the same interface as the unstable attribute. It is used to mark +const fn as having their constness be unstable. This is only needed in rare cases:

    +
      +
    • If a const fn makes use of unstable language features or intrinsics. +(The compiler will tell you to add the attribute if you run into this.)
    • +
    • If a const fn is #[stable] but not yet intended to be const-stable.
    • +
    • To change the feature gate that is required to call a const-unstable intrinsic.
    • +
    +

    Const-stability differs from regular stability in that it is recursive: a +#[rustc_const_unstable(...)] function cannot even be indirectly called from stable code. This is +to avoid accidentally leaking unstable compiler implementation artifacts to stable code or locking +us into the accidental quirks of an incomplete implementation. See the rustc_const_stable_indirect +and rustc_allow_const_fn_unstable attributes below for how to fine-tune this check.

    +

    rustc_const_stable

    +

    The #[rustc_const_stable(feature = "foo", since = "1.420.69")] attribute explicitly marks +a const fn as having its constness be stable.

    +

    rustc_const_stable_indirect

    +

    The #[rustc_const_stable_indirect] attribute can be added to a #[rustc_const_unstable(...)] +function to make it callable from #[rustc_const_stable(...)] functions. This indicates that the +function is ready for stable in terms of its implementation (i.e., it doesn't use any unstable +compiler features); the only reason it is not const-stable yet are API concerns.

    +

    This should also be added to lang items for which const-calls are synthesized in the compiler, to +ensure those calls do not bypass recursive const stability rules.

    +

    rustc_intrinsic_const_stable_indirect

    +

    On an intrinsic, this attribute marks the intrinsic as "ready to be used by public stable functions". +If the intrinsic has a rustc_const_unstable attribute, it should be removed. +Adding this attribute to an intrinsic requires t-lang and wg-const-eval approval!

    +

    rustc_default_body_unstable

    +

    The #[rustc_default_body_unstable(feature = "foo", issue = "1234", reason = "lorem ipsum")] attribute has the same interface as the unstable attribute. +It is used to mark the default implementation for an item within a trait as +unstable. +A trait with a default-body-unstable item can be implemented stably by providing +an explicit body for any such item, or the default body can be used by enabling +its corresponding #![feature].

    +

    Stabilizing a library feature

    +

    To stabilize a feature, follow these steps:

    +
      +
    1. Ask a @T-libs-api member to start an FCP on the tracking issue and wait for +the FCP to complete (with disposition-merge).
    2. +
    3. Change #[unstable(...)] to #[stable(since = "CURRENT_RUSTC_VERSION")].
    4. +
    5. Remove #![feature(...)] from any test or doc-test for this API. If the feature is used in the +compiler or tools, remove it from there as well.
    6. +
    7. If this is a const fn, add #[rustc_const_stable(since = "CURRENT_RUSTC_VERSION")]. +Alternatively, if this is not supposed to be const-stabilized yet, +add #[rustc_const_unstable(...)] for some new feature gate (with a new tracking issue).
    8. +
    9. Open a PR against rust-lang/rust. +
        +
      • Add the appropriate labels: @rustbot modify labels: +T-libs-api.
      • +
      • Link to the tracking issue and say "Closes #XXXXX".
      • +
      +
    10. +
    +

    You can see an example of stabilizing a feature with +tracking issue #81656 with FCP +and the associated +implementation PR #84642.

    +

    allow_internal_unstable

    +

    Macros and compiler desugarings expose their bodies to the call +site. To work around not being able to use unstable things in the standard +library's macros, there's the #[allow_internal_unstable(feature1, feature2)] +attribute that allows the given features to be used in stable macros.

    +

    Note that if a macro is used in const context and generates a call to a +#[rustc_const_unstable(...)] function, that will still be rejected even with +allow_internal_unstable. Add #[rustc_const_stable_indirect] to the function to ensure the macro +cannot accidentally bypass the recursive const stability checks.

    +

    rustc_allow_const_fn_unstable

    +

    As explained above, no unstable const features are allowed inside stable const fn, not even +indirectly.

    +

    However, sometimes we do know that a feature will get stabilized, just not when, or there is a +stable (but e.g. runtime-slow) workaround, so we could always fall back to some stable version if we +scrapped the unstable feature. In those cases, the [rustc_allow_const_fn_unstable(feature1, feature2)] attribute can be used to allow some unstable features in the body of a stable (or +indirectly stable) const fn.

    +

    You also need to take care to uphold the const fn invariant that calling it at runtime and +compile-time needs to behave the same (see also this blog post). This means that you +may not create a const fn that e.g. transmutes a memory address to an integer, +because the addresses of things are nondeterministic and often unknown at +compile-time.

    +

    Always ping @rust-lang/wg-const-eval if you are adding more +rustc_allow_const_fn_unstable attributes to any const fn.

    +

    staged_api

    +

    Any crate that uses the stable or unstable attributes must include the +#![feature(staged_api)] attribute on the crate.

    +

    deprecated

    +

    Deprecations in the standard library are nearly identical to deprecations in +user code. When #[deprecated] is used on an item, it must also have a stable +or unstable attribute.

    +

    deprecated has the following form:

    +
    #[deprecated(
    +    since = "1.38.0",
    +    note = "explanation for deprecation",
    +    suggestion = "other_function"
    +)]
    +

    The suggestion field is optional. If given, it should be a string that can be +used as a machine-applicable suggestion to correct the warning. This is +typically used when the identifier is renamed, but no other significant changes +are necessary. When the suggestion field is used, you need to have +#![feature(deprecated_suggestion)] at the crate root.

    +

    Another difference from user code is that the since field is actually checked +against the current version of rustc. If since is in a future version, then +the deprecated_in_future lint is triggered which is default allow, but most +of the standard library raises it to a warning with +#![warn(deprecated_in_future)].

    +

    Request for stabilization

    +

    NOTE: this page is about stabilizing language features. +For stabilizing library features, see Stabilizing a library feature.

    +

    Once an unstable feature has been well-tested with no outstanding +concern, anyone may push for its stabilization. It involves the +following steps:

    + +

    Documentation PRs

    +

    +

    If any documentation for this feature exists, it should be +in the Unstable Book, located at src/doc/unstable-book. +If it exists, the page for the feature gate should be removed.

    +

    If there was documentation there, integrating it into the +existing documentation is needed.

    +

    If there wasn't documentation there, it needs to be added.

    +

    Places that may need updated documentation:

    +
      +
    • The Reference: This must be updated, in full detail.
    • +
    • The Book: This may or may not need updating, depends. +If you're not sure, please open an issue on this repository +and it can be discussed.
    • +
    • standard library documentation: As needed. Language features +often don't need this, but if it's a feature that changes +how good examples are written, such as when ? was added +to the language, updating examples is important.
    • +
    • Rust by Example: As needed.
    • +
    +

    Prepare PRs to update documentation involving this new feature +for repositories mentioned above. Maintainers of these repositories +will keep these PRs open until the whole stabilization process +has completed. Meanwhile, we can proceed to the next step.

    +

    Write a stabilization report

    +

    Find the tracking issue of the feature, and create a short +stabilization report. Essentially this would be a brief summary +of the feature plus some links to test cases showing it works +as expected, along with a list of edge cases that came up +and were considered. This is a minimal "due diligence" that +we do before stabilizing.

    +

    The report should contain:

    +
      +
    • A summary, showing examples (e.g. code snippets) what is +enabled by this feature.
    • +
    • Links to test cases in our test suite regarding this feature +and describe the feature's behavior on encountering edge cases.
    • +
    • Links to the documentations (the PRs we have made in the +previous steps).
    • +
    • Any other relevant information.
    • +
    • The resolutions of any unresolved questions if the stabilization +is for an RFC.
    • +
    +

    Examples of stabilization reports can be found in +rust-lang/rust#44494 and rust-lang/rust#28237 (these links +will bring you directly to the comment containing the stabilization report).

    +

    FCP

    +

    If any member of the team responsible for tracking this +feature agrees with stabilizing this feature, they will +start the FCP (final-comment-period) process by commenting

    +
    @rfcbot fcp merge
    +
    +

    The rest of the team members will review the proposal. If the final +decision is to stabilize, we proceed to do the actual code modification.

    +

    Stabilization PR

    +

    This is for stabilizing language features. If you are stabilizing a library +feature, see the stabilization chapter of the std dev guide instead.

    +

    Once we have decided to stabilize a feature, we need to have +a PR that actually makes that stabilization happen. These kinds +of PRs are a great way to get involved in Rust, as they take +you on a little tour through the source code.

    +

    Here is a general guide to how to stabilize a feature -- +every feature is different, of course, so some features may +require steps beyond what this guide talks about.

    +

    Note: Before we stabilize any feature, it's the rule that it +should appear in the documentation.

    +

    Updating the feature-gate listing

    +

    There is a central listing of unstable feature-gates in +compiler/rustc_feature/src/unstable.rs. Search for the declare_features! +macro. There should be an entry for the feature you are aiming +to stabilize, something like (this example is taken from +rust-lang/rust#32409:

    +
    // pub(restricted) visibilities (RFC 1422)
    +(unstable, pub_restricted, "CURRENT_RUSTC_VERSION", Some(32409)),
    +

    The above line should be moved to compiler/rustc_feature/src/accepted.rs. +Entries in the declare_features! call are sorted, so find the correct place. +When it is done, it should look like:

    +
    // pub(restricted) visibilities (RFC 1422)
    +(accepted, pub_restricted, "CURRENT_RUSTC_VERSION", Some(32409)),
    +// note that we changed this
    +

    (Even though you will encounter version numbers in the file of past changes, +you should not put the rustc version you expect your stabilization to happen in, +but instead CURRENT_RUSTC_VERSION)

    +

    Removing existing uses of the feature-gate

    +

    Next search for the feature string (in this case, pub_restricted) +in the codebase to find where it appears. Change uses of +#![feature(XXX)] from the std and any rustc crates (this includes test folders +under library/ and compiler/ but not the toplevel tests/ one) to be +#![cfg_attr(bootstrap, feature(XXX))]. This includes the feature-gate +only for stage0, which is built using the current beta (this is +needed because the feature is still unstable in the current beta).

    +

    Also, remove those strings from any tests (e.g. under tests/). If there are tests +specifically targeting the feature-gate (i.e., testing that the +feature-gate is required to use the feature, but nothing else), +simply remove the test.

    +

    Do not require the feature-gate to use the feature

    +

    Most importantly, remove the code which flags an error if the +feature-gate is not present (since the feature is now considered +stable). If the feature can be detected because it employs some +new syntax, then a common place for that code to be is in the +same compiler/rustc_ast_passes/src/feature_gate.rs. +For example, you might see code like this:

    +
    gate_feature_post!(&self, pub_restricted, span,
    + "`pub(restricted)` syntax is experimental");
    +

    This gate_feature_post! macro prints an error if the +pub_restricted feature is not enabled. It is not needed +now that #[pub_restricted] is stable.

    +

    For more subtle features, you may find code like this:

    +
    if self.tcx.sess.features.borrow().pub_restricted { /* XXX */ }
    +

    This pub_restricted field (obviously named after the feature) +would ordinarily be false if the feature flag is not present +and true if it is. So transform the code to assume that the field +is true. In this case, that would mean removing the if and +leaving just the /* XXX */.

    +
    if self.tcx.sess.features.borrow().pub_restricted { /* XXX */ }
    +becomes
    +/* XXX */
    +
    +if self.tcx.sess.features.borrow().pub_restricted && something { /* XXX */ }
    + becomes
    +if something { /* XXX */ }
    +

    Feature gates

    +

    This chapter is intended to provide basic help for adding, removing, and +modifying feature gates.

    +

    Note that this is specific to language feature gates; library feature gates use a different +mechanism.

    +

    Adding a feature gate

    +

    See "Stability in code" in the "Implementing new features" section for instructions.

    +

    Removing a feature gate

    +

    To remove a feature gate, follow these steps:

    +
      +
    1. +

      Remove the feature gate declaration in rustc_feature/src/unstable.rs. +It will look like this:

      +
      /// description of feature
      +(unstable, $feature_name, "$version", Some($tracking_issue_number))
      +
    2. +
    3. +

      Add a modified version of the feature gate declaration that you just +removed to rustc_feature/src/removed.rs:

      +
      /// description of feature
      +(removed, $old_feature_name, "$version", Some($tracking_issue_number),
      + Some("$why_it_was_removed"))
      +
    4. +
    +

    Renaming a feature gate

    +

    To rename a feature gate, follow these steps (the first two are the same steps +to follow when removing a feature gate):

    +
      +
    1. +

      Remove the old feature gate declaration in rustc_feature/src/unstable.rs. +It will look like this:

      +
      /// description of feature
      +(unstable, $old_feature_name, "$version", Some($tracking_issue_number))
      +
    2. +
    3. +

      Add a modified version of the old feature gate declaration that you just +removed to rustc_feature/src/removed.rs:

      +
      /// description of feature
      +/// Renamed to `$new_feature_name`
      +(removed, $old_feature_name, "$version", Some($tracking_issue_number),
      + Some("renamed to `$new_feature_name`"))
      +
    4. +
    5. +

      Add a feature gate declaration with the new name to +rustc_feature/src/unstable.rs. It should look very similar to the old +declaration:

      +
      /// description of feature
      +(unstable, $new_feature_name, "$version", Some($tracking_issue_number))
      +
    6. +
    +

    Stabilizing a feature

    +

    See "Updating the feature-gate listing" in the "Stabilizing Features" chapter +for instructions. There are additional steps you will need to take beyond just +updating the declaration!

    +

    Coding conventions

    +

    This file offers some tips on the coding conventions for rustc. This +chapter covers formatting, coding for correctness, +using crates from crates.io, and some tips on +structuring your PR for easy review.

    +

    +

    Formatting and the tidy script

    +

    rustc is moving towards the Rust standard coding style.

    +

    However, for now we don't use stable rustfmt; we use a pinned version with a +special config, so this may result in different style from normal rustfmt. +Therefore, formatting this repository using cargo fmt is not recommended.

    +

    Instead, formatting should be done using ./x fmt. It's a good habit to run +./x fmt before every commit, as this reduces conflicts later.

    +

    Formatting is checked by the tidy script. It runs automatically when you do +./x test and can be run in isolation with ./x fmt --check.

    +

    If you want to use format-on-save in your editor, the pinned version of +rustfmt is built under build/<target>/stage0/bin/rustfmt.

    +

    Formatting C++ code

    +

    The compiler contains some C++ code for interfacing with parts of LLVM that +don't have a stable C API. +When modifying that code, use this command to format it:

    +
    ./x test tidy --extra-checks cpp:fmt --bless
    +
    +

    This uses a pinned version of clang-format, to avoid relying on the local +environment.

    +

    Formatting and linting Python code

    +

    The Rust repository contains quite a lot of Python code. We try to keep +it both linted and formatted by the ruff tool.

    +

    When modifying Python code, use this command to format it:

    +
    ./x test tidy --extra-checks py:fmt --bless
    +
    +

    And, the following command to run lints:

    +
    ./x test tidy --extra-checks py:lint
    +
    +

    These use a pinned version of ruff, to avoid relying on the local environment.

    +

    + + + + +

    In the past, files began with a copyright and license notice. Please omit +this notice for new files licensed under the standard terms (dual +MIT/Apache-2.0).

    +

    All of the copyright notices should be gone by now, but if you come across one +in the rust-lang/rust repo, feel free to open a PR to remove it.

    +

    Line length

    +

    Lines should be at most 100 characters. It's even better if you can +keep things to 80.

    +

    Sometimes, and particularly for tests, it can be necessary to exempt yourself from this limit. +In that case, you can add a comment towards the top of the file like so:

    +
    #![allow(unused)]
    +fn main() {
    +// ignore-tidy-linelength
    +}
    +

    Tabs vs spaces

    +

    Prefer 4-space indents.

    +

    +

    Coding for correctness

    +

    Beyond formatting, there are a few other tips that are worth +following.

    +

    Prefer exhaustive matches

    +

    Using _ in a match is convenient, but it means that when new +variants are added to the enum, they may not get handled correctly. +Ask yourself: if a new variant were added to this enum, what's the +chance that it would want to use the _ code, versus having some +other treatment? Unless the answer is "low", then prefer an +exhaustive match.

    +

    The same advice applies to if let and while let, +which are effectively tests for a single variant.

    +

    Use "TODO" comments for things you don't want to forget

    +

    As a useful tool to yourself, you can insert a // TODO comment +for something that you want to get back to before you land your PR:

    +
    fn do_something() {
    +    if something_else {
    +        unimplemented!(); // TODO write this
    +    }
    +}
    +

    The tidy script will report an error for a // TODO comment, so this +code would not be able to land until the TODO is fixed (or removed).

    +

    This can also be useful in a PR as a way to signal from one commit that you are +leaving a bug that a later commit will fix:

    +
    if foo {
    +    return true; // TODO wrong, but will be fixed in a later commit
    +}
    +

    +

    Using crates from crates.io

    +

    See the crates.io dependencies section.

    +

    +

    How to structure your PR

    +

    How you prepare the commits in your PR can make a big difference for the +reviewer. Here are some tips.

    +

    Isolate "pure refactorings" into their own commit. For example, if +you rename a method, then put that rename into its own commit, along +with the renames of all the uses.

    +

    More commits is usually better. If you are doing a large change, +it's almost always better to break it up into smaller steps that can +be independently understood. The one thing to be aware of is that if +you introduce some code following one strategy, then change it +dramatically (versus adding to it) in a later commit, that +'back-and-forth' can be confusing.

    +

    Format liberally. While only the final commit of a PR must be correctly +formatted, it is both easier to review and less noisy to format each commit +individually using ./x fmt.

    +

    No merges. We do not allow merge commits into our history, other +than those by bors. If you get a merge conflict, rebase instead via a +command like git rebase -i rust-lang/master (presuming you use the +name rust-lang for your remote).

    +

    Individual commits do not have to build (but it's nice). We do not +require that every intermediate commit successfully builds – we only +expect to be able to bisect at a PR level. However, if you can make +individual commits build, that is always helpful.

    +

    Naming conventions

    +

    Apart from normal Rust style/naming conventions, there are also some specific +to the compiler.

    +
      +
    • +

      cx tends to be short for "context" and is often used as a suffix. For +example, tcx is a common name for the Typing Context.

      +
    • +
    • +

      'tcx is used as the lifetime name for the Typing Context.

      +
    • +
    • +

      Because crate is a keyword, if you need a variable to represent something +crate-related, often the spelling is changed to krate.

      +
    • +
    +

    Procedures for breaking changes

    + +

    This page defines the best practices procedure for making bug fixes or soundness +corrections in the compiler that can cause existing code to stop compiling. This +text is based on +RFC 1589.

    +

    Motivation

    +

    From time to time, we encounter the need to make a bug fix, soundness +correction, or other change in the compiler which will cause existing code to +stop compiling. When this happens, it is important that we handle the change in +a way that gives users of Rust a smooth transition. What we want to avoid is +that existing programs suddenly stop compiling with opaque error messages: we +would prefer to have a gradual period of warnings, with clear guidance as to +what the problem is, how to fix it, and why the change was made. This RFC +describes the procedure that we have been developing for handling breaking +changes that aims to achieve that kind of smooth transition.

    +

    One of the key points of this policy is that (a) warnings should be issued +initially rather than hard errors if at all possible and (b) every change that +causes existing code to stop compiling will have an associated tracking issue. +This issue provides a point to collect feedback on the results of that change. +Sometimes changes have unexpectedly large consequences or there may be a way to +avoid the change that was not considered. In those cases, we may decide to +change course and roll back the change, or find another solution (if warnings +are being used, this is particularly easy to do).

    +

    What qualifies as a bug fix?

    +

    Note that this RFC does not try to define when a breaking change is permitted. +That is already covered under RFC 1122. This document assumes that the +change being made is in accordance with those policies. Here is a summary of the +conditions from RFC 1122:

    +
      +
    • Soundness changes: Fixes to holes uncovered in the type system.
    • +
    • Compiler bugs: Places where the compiler is not implementing the specified +semantics found in an RFC or lang-team decision.
    • +
    • Underspecified language semantics: Clarifications to grey areas where the +compiler behaves inconsistently and no formal behavior had been previously +decided.
    • +
    +

    Please see the RFC for full details!

    +

    Detailed design

    +

    The procedure for making a breaking change is as follows (each of these steps is +described in more detail below):

    +
      +
    1. Do a crater run to assess the impact of the change.
    2. +
    3. Make a special tracking issue dedicated to the change.
    4. +
    5. Do not report an error right away. Instead, issue forwards-compatibility +lint warnings. +
        +
      • Sometimes this is not straightforward. See the text below for suggestions +on different techniques we have employed in the past.
      • +
      • For cases where warnings are infeasible: +
          +
        • Report errors, but make every effort to give a targeted error message +that directs users to the tracking issue
        • +
        • Submit PRs to all known affected crates that fix the issue +
            +
          • or, at minimum, alert the owners of those crates to the problem and +direct them to the tracking issue
          • +
          +
        • +
        +
      • +
      +
    6. +
    7. Once the change has been in the wild for at least one cycle, we can +stabilize the change, converting those warnings into errors.
    8. +
    +

    Finally, for changes to rustc_ast that will affect plugins, the general policy +is to batch these changes. That is discussed below in more detail.

    +

    Tracking issue

    +

    Every breaking change should be accompanied by a dedicated tracking issue +for that change. The main text of this issue should describe the change being +made, with a focus on what users must do to fix their code. The issue should be +approachable and practical; it may make sense to direct users to an RFC or some +other issue for the full details. The issue also serves as a place where users +can comment with questions or other concerns.

    +

    A template for these breaking-change tracking issues can be found +here. An example of how such an issue should look can be found +here.

    +

    Issuing future compatibility warnings

    +

    The best way to handle a breaking change is to begin by issuing +future-compatibility warnings. These are a special category of lint warning. +Adding a new future-compatibility warning can be done as follows.

    +
    #![allow(unused)]
    +fn main() {
    +// 1. Define the lint in `compiler/rustc_middle/src/lint/builtin.rs`:
    +declare_lint! {
    +    pub YOUR_ERROR_HERE,
    +    Warn,
    +    "illegal use of foo bar baz"
    +}
    +
    +// 2. Add to the list of HardwiredLints in the same file:
    +impl LintPass for HardwiredLints {
    +    fn get_lints(&self) -> LintArray {
    +        lint_array!(
    +            ..,
    +            YOUR_ERROR_HERE
    +        )
    +    }
    +}
    +
    +// 3. Register the lint in `compiler/rustc_lint/src/lib.rs`:
    +store.register_future_incompatible(sess, vec![
    +    ...,
    +    FutureIncompatibleInfo {
    +        id: LintId::of(YOUR_ERROR_HERE),
    +        reference: "issue #1234", // your tracking issue here!
    +    },
    +]);
    +
    +// 4. Report the lint:
    +tcx.lint_node(
    +    lint::builtin::YOUR_ERROR_HERE,
    +    path_id,
    +    binding.span,
    +    format!("some helper message here"));
    +}
    +

    Helpful techniques

    +

    It can often be challenging to filter out new warnings from older, pre-existing +errors. One technique that has been used in the past is to run the older code +unchanged and collect the errors it would have reported. You can then issue +warnings for any errors you would give which do not appear in that original set. +Another option is to abort compilation after the original code completes if +errors are reported: then you know that your new code will only execute when +there were no errors before.

    +

    Crater and crates.io

    +

    Crater is a bot that will compile all crates.io crates and many +public github repos with the compiler with your changes. A report will then be +generated with crates that ceased to compile with or began to compile with your +changes. Crater runs can take a few days to complete.

    +

    We should always do a crater run to assess impact. It is polite and considerate +to at least notify the authors of affected crates the breaking change. If we can +submit PRs to fix the problem, so much the better.

    +

    Is it ever acceptable to go directly to issuing errors?

    +

    Changes that are believed to have negligible impact can go directly to issuing +an error. One rule of thumb would be to check against crates.io: if fewer than +10 total affected projects are found (not root errors), we can move +straight to an error. In such cases, we should still make the "breaking change" +page as before, and we should ensure that the error directs users to this page. +In other words, everything should be the same except that users are getting an +error, and not a warning. Moreover, we should submit PRs to the affected +projects (ideally before the PR implementing the change lands in rustc).

    +

    If the impact is not believed to be negligible (e.g., more than 10 crates are +affected), then warnings are required (unless the compiler team agrees to grant +a special exemption in some particular case). If implementing warnings is not +feasible, then we should make an aggressive strategy of migrating crates before +we land the change so as to lower the number of affected crates. Here are some +techniques for approaching this scenario:

    +
      +
    1. Issue warnings for subparts of the problem, and reserve the new errors for +the smallest set of cases you can.
    2. +
    3. Try to give a very precise error message that suggests how to fix the problem +and directs users to the tracking issue.
    4. +
    5. It may also make sense to layer the fix: +
        +
      • First, add warnings where possible and let those land before proceeding to +issue errors.
      • +
      • Work with authors of affected crates to ensure that corrected versions are +available before the fix lands, so that downstream users can use them.
      • +
      +
    6. +
    +

    Stabilization

    +

    After a change is made, we will stabilize the change using the same process +that we use for unstable features:

    +
      +
    • +

      After a new release is made, we will go through the outstanding tracking +issues corresponding to breaking changes and nominate some of them for final +comment period (FCP).

      +
    • +
    • +

      The FCP for such issues lasts for one cycle. In the final week or two of the +cycle, we will review comments and make a final determination:

      +
        +
      • Convert to error: the change should be made into a hard error.
      • +
      • Revert: we should remove the warning and continue to allow the older code to +compile.
      • +
      • Defer: can't decide yet, wait longer, or try other strategies.
      • +
      +
    • +
    +

    Ideally, breaking changes should have landed on the stable branch of the +compiler before they are finalized.

    +

    +

    Removing a lint

    +

    Once we have decided to make a "future warning" into a hard error, we need a PR +that removes the custom lint. As an example, here are the steps required to +remove the overlapping_inherent_impls compatibility lint. First, convert the +name of the lint to uppercase (OVERLAPPING_INHERENT_IMPLS) ripgrep through the +source for that string. We will basically by converting each place where this +lint name is mentioned (in the compiler, we use the upper-case name, and a macro +automatically generates the lower-case string; so searching for +overlapping_inherent_impls would not find much).

    +
    +

    NOTE: these exact files don't exist anymore, but the procedure is still the same.

    +
    +

    Remove the lint.

    +

    The first reference you will likely find is the lint definition in +rustc_session/src/lint/builtin.rs that resembles this:

    +
    #![allow(unused)]
    +fn main() {
    +declare_lint! {
    +    pub OVERLAPPING_INHERENT_IMPLS,
    +    Deny, // this may also say Warning
    +    "two overlapping inherent impls define an item with the same name were erroneously allowed"
    +}
    +}
    +

    This declare_lint! macro creates the relevant data structures. Remove it. You +will also find that there is a mention of OVERLAPPING_INHERENT_IMPLS later in +the file as part of a lint_array!; remove it too.

    +

    Next, you see a reference to OVERLAPPING_INHERENT_IMPLS in +rustc_lint/src/lib.rs. This is defining the lint as a "future +compatibility lint":

    +
    #![allow(unused)]
    +fn main() {
    +FutureIncompatibleInfo {
    +    id: LintId::of(OVERLAPPING_INHERENT_IMPLS),
    +    reference: "issue #36889 <https://github.com/rust-lang/rust/issues/36889>",
    +},
    +}
    +

    Remove this too.

    +

    Add the lint to the list of removed lints.

    +

    In compiler/rustc_lint/src/lib.rs there is a list of "renamed and removed lints". +You can add this lint to the list:

    +
    #![allow(unused)]
    +fn main() {
    +store.register_removed("overlapping_inherent_impls", "converted into hard error, see #36889");
    +}
    +

    where #36889 is the tracking issue for your lint.

    +

    Update the places that issue the lint

    +

    Finally, the last class of references you will see are the places that actually +trigger the lint itself (i.e., what causes the warnings to appear). These +you do not want to delete. Instead, you want to convert them into errors. In +this case, the add_lint call looks like this:

    +
    #![allow(unused)]
    +fn main() {
    +self.tcx.sess.add_lint(lint::builtin::OVERLAPPING_INHERENT_IMPLS,
    +                       node_id,
    +                       self.tcx.span_of_impl(item1).unwrap(),
    +                       msg);
    +}
    +

    We want to convert this into an error. In some cases, there may be an +existing error for this scenario. In others, we will need to allocate a +fresh diagnostic code. Instructions for allocating a fresh diagnostic +code can be found here. You may want +to mention in the extended description that the compiler behavior +changed on this point, and include a reference to the tracking issue for +the change.

    +

    Let's say that we've adopted E0592 as our code. Then we can change the +add_lint() call above to something like:

    +
    #![allow(unused)]
    +fn main() {
    +struct_span_code_err!(self.dcx(), self.tcx.span_of_impl(item1).unwrap(), E0592, msg)
    +    .emit();
    +}
    +

    Update tests

    +

    Finally, run the test suite. These should be some tests that used to reference +the overlapping_inherent_impls lint, those will need to be updated. In +general, if the test used to have #[deny(overlapping_inherent_impls)], that +can just be removed.

    +
    ./x test
    +
    +

    All done!

    +

    Open a PR. =)

    + +

    Using External Repositories

    +

    The rust-lang/rust git repository depends on several other repos in the rust-lang organization. +There are three main ways we use dependencies:

    +
      +
    1. As a Cargo dependency through crates.io (e.g. rustc-rayon)
    2. +
    3. As a git (e.g. clippy) or a josh (e.g. miri) subtree
    4. +
    5. As a git submodule (e.g. cargo)
    6. +
    +

    As a general rule:

    +
      +
    • Use crates.io for libraries that could be useful for others in the ecosystem
    • +
    • Use subtrees for tools that depend on compiler internals and need to be updated if there are breaking +changes
    • +
    • Use submodules for tools that are independent of the compiler
    • +
    +

    External Dependencies (subtrees)

    +

    The following external projects are managed using some form of a subtree:

    + +

    In contrast to submodule dependencies +(see below for those), the subtree dependencies are just regular files and directories which can +be updated in tree. However, if possible, enhancements, bug fixes, etc. specific +to these tools should be filed against the tools directly in their respective +upstream repositories. The exception is that when rustc changes are required to +implement a new tool feature or test, that should happen in one collective rustc PR.

    +

    subtree dependencies are currently managed by two distinct approaches:

    + +

    The josh tool is an alternative to git subtrees, which manages git history in a different way and scales better to larger repositories. Specific tooling is required to work with josh, you can check out the miri or rust-analyzer scripts linked above for inspiration. If you want to migrate a repository dependency from git subtree or git submodule to josh, you can check out this guide.

    +

    Below you can find a guide on how to perform push and pull synchronization with the main rustc repo using git subtree, although these instructions might differ repo from repo.

    +

    Synchronizing a subtree

    +

    Periodically the changes made to subtree based dependencies need to be synchronized between this +repository and the upstream tool repositories.

    +

    Subtree synchronizations are typically handled by the respective tool maintainers. Other users +are welcome to submit synchronization PRs, however, in order to do so you will need to modify +your local git installation and follow a very precise set of instructions. +These instructions are documented, along with several useful tips and tricks, in the +syncing subtree changes section in Clippy's Contributing guide. +The instructions are applicable for use with any subtree based tool, just be sure to +use the correct corresponding subtree directory and remote repository.

    +

    The synchronization process goes in two directions: subtree push and subtree pull.

    +

    A subtree push takes all the changes that happened to the copy in this repo and creates commits +on the remote repo that match the local changes. Every local +commit that touched the subtree causes a commit on the remote repo, but +is modified to move the files from the specified directory to the tool repo root.

    +

    A subtree pull takes all changes since the last subtree pull +from the tool repo and adds these commits to the rustc repo along with a merge commit that moves +the tool changes into the specified directory in the Rust repository.

    +

    It is recommended that you always do a push first and get that merged to the tool master branch. +Then, when you do a pull, the merge works without conflicts. +While it's definitely possible to resolve conflicts during a pull, you may have to redo the conflict +resolution if your PR doesn't get merged fast enough and there are new conflicts. Do not try to +rebase the result of a git subtree pull, rebasing merge commits is a bad idea in general.

    +

    You always need to specify the -P prefix to the subtree directory and the corresponding remote +repository. If you specify the wrong directory or repository +you'll get very fun merges that try to push the wrong directory to the wrong remote repository. +Luckily you can just abort this without any consequences by throwing away either the pulled commits +in rustc or the pushed branch on the remote and try again. It is usually fairly obvious +that this is happening because you suddenly get thousands of commits that want to be synchronized.

    +

    Creating a new subtree dependency

    +

    If you want to create a new subtree dependency from an existing repository, call (from this +repository's root directory!)

    +
    git subtree add -P src/tools/clippy https://github.com/rust-lang/rust-clippy.git master
    +
    +

    This will create a new commit, which you may not rebase under any circumstances! Delete the commit +and redo the operation if you need to rebase.

    +

    Now you're done, the src/tools/clippy directory behaves as if Clippy were +part of the rustc monorepo, so no one but you (or others that synchronize +subtrees) actually needs to use git subtree.

    +

    External Dependencies (submodules)

    +

    Building Rust will also use external git repositories tracked using git +submodules. The complete list may be found in the .gitmodules file. Some +of these projects are required (like stdarch for the standard library) and +some of them are optional (like src/doc/book).

    +

    Usage of submodules is discussed more in the Using Git chapter.

    +

    Some of the submodules are allowed to be in a "broken" state where they +either don't build or their tests don't pass, e.g. the documentation books +like The Rust Reference. Maintainers of these projects will be notified +when the project is in a broken state, and they should fix them as soon +as possible. The current status is tracked on the toolstate website. +More information may be found on the Forge Toolstate chapter. +In practice, it is very rare for documentation to have broken toolstate.

    +

    Breakage is not allowed in the beta and stable channels, and must be addressed +before the PR is merged. They are also not allowed to be broken on master in +the week leading up to the beta cut.

    +

    Fuzzing

    + +

    For the purposes of this guide, fuzzing is any testing methodology that +involves compiling a wide variety of programs in an attempt to uncover bugs in +rustc. Fuzzing is often used to find internal compiler errors (ICEs). Fuzzing +can be beneficial, because it can find bugs before users run into them and +provide small, self-contained programs that make the bug easier to track down. +However, some common mistakes can reduce the helpfulness of fuzzing and end up +making contributors' lives harder. To maximize your positive impact on the Rust +project, please read this guide before reporting fuzzer-generated bugs!

    +

    Guidelines

    +

    In a nutshell

    +

    Please do:

    +
      +
    • Ensure the bug is still present on the latest nightly rustc
    • +
    • Include a reasonably minimal, standalone example along with any bug report
    • +
    • Include all of the information requested in the bug report template
    • +
    • Search for existing reports with the same message and query stack
    • +
    • Format the test case with rustfmt, if it maintains the bug
    • +
    • Indicate that the bug was found by fuzzing
    • +
    +

    Please don't:

    +
      +
    • Don't report lots of bugs that use internal features, including but not +limited to custom_mir, lang_items, no_core, and rustc_attrs.
    • +
    • Don't seed your fuzzer with inputs that are known to crash rustc (details +below).
    • +
    +

    Discussion

    +

    If you're not sure whether or not an ICE is a duplicate of one that's already +been reported, please go ahead and report it and link to issues you think might +be related. In general, ICEs on the same line but with different query stacks +are usually distinct bugs. For example, #109020 and #109129 +had similar error messages:

    +
    error: internal compiler error: compiler/rustc_middle/src/ty/normalize_erasing_regions.rs:195:90: Failed to normalize <[closure@src/main.rs:36:25: 36:28] as std::ops::FnOnce<(Emplacable<()>,)>>::Output, maybe try to call `try_normalize_erasing_regions` instead
    +
    +
    error: internal compiler error: compiler/rustc_middle/src/ty/normalize_erasing_regions.rs:195:90: Failed to normalize <() as Project>::Assoc, maybe try to call `try_normalize_erasing_regions` instead
    +
    +

    but different query stacks:

    +
    query stack during panic:
    +#0 [fn_abi_of_instance] computing call ABI of `<[closure@src/main.rs:36:25: 36:28] as core::ops::function::FnOnce<(Emplacable<()>,)>>::call_once - shim(vtable)`
    +end of query stack
    +
    +
    query stack during panic:
    +#0 [check_mod_attrs] checking attributes in top-level module
    +#1 [analysis] running analysis passes on this crate
    +end of query stack
    +
    +

    Building a corpus

    +

    When building a corpus, be sure to avoid collecting tests that are already +known to crash rustc. A fuzzer that is seeded with such tests is more likely to +generate bugs with the same root cause, wasting everyone's time. The simplest +way to avoid this is to loop over each file in the corpus, see if it causes an +ICE, and remove it if so.

    +

    To build a corpus, you may want to use:

    +
      +
    • The rustc/rust-analyzer/clippy test suites (or even source code) --- though avoid +tests that are already known to cause failures, which often begin with comments +like //@ failure-status: 101 or //@ known-bug: #NNN.
    • +
    • The already-fixed ICEs in the archived Glacier repository --- though +avoid the unfixed ones in ices/!
    • +
    +

    Extra credit

    +

    Here are a few things you can do to help the Rust project after filing an ICE.

    +
      +
    • Bisect the bug to figure out when it was introduced. +If you find the regressing PR / commit, you can mark the issue with the label +S-has-bisection. If not, consider applying E-needs-bisection instead.
    • +
    • Fix "distractions": problems with the test case that don't contribute to +triggering the ICE, such as syntax errors or borrow-checking errors
    • +
    • Minimize the test case (see below). If successful, you can label the +issue with S-has-mcve. Otherwise, you can apply E-needs-mcve.
    • +
    • Add the minimal test case to the rust-lang/rust repo as a crashes test. +While you're at it, consider including other "untracked" crashes in your PR. +Please don't forget to mark your issue with S-bug-has-test afterwards.
    • +
    +

    See also applying and removing labels.

    +

    Minimization

    +

    It is helpful to carefully minimize the fuzzer-generated input. When +minimizing, be careful to preserve the original error, and avoid introducing +distracting problems such as syntax, type-checking, or borrow-checking errors.

    +

    There are some tools that can help with minimization. If you're not sure how +to avoid introducing syntax, type-, and borrow-checking errors while using +these tools, post both the complete and minimized test cases. Generally, +syntax-aware tools give the best results in the least amount of time. +treereduce-rust and picireny are syntax-aware. +halfempty is not, but is generally a high-quality tool.

    +

    Effective fuzzing

    +

    When fuzzing rustc, you may want to avoid generating machine code, since this +is mostly done by LLVM. Try --emit=mir instead.

    +

    A variety of compiler flags can uncover different issues. -Zmir-opt-level=4 +will turn on MIR optimization passes that are not run by default, potentially +uncovering interesting bugs. -Zvalidate-mir can help uncover such bugs.

    +

    If you're fuzzing a compiler you built, you may want to build it with -C target-cpu=native or even PGO/BOLT to squeeze out a few more executions per +second. Of course, it's best to try multiple build configurations and see +what actually results in superior throughput.

    +

    You may want to build rustc from source with debug assertions to find +additional bugs, though this is a trade-off: it can slow down fuzzing by +requiring extra work for every execution. To enable debug assertions, add this +to bootstrap.toml when compiling rustc:

    +
    [rust]
    +debug-assertions = true
    +
    +

    ICEs that require debug assertions to reproduce should be tagged +requires-debug-assertions.

    +

    Existing projects

    +
      +
    • fuzz-rustc demonstrates how to fuzz rustc with libfuzzer
    • +
    • icemaker runs rustc and other tools on a large number of source +files with a variety of flags to catch ICEs
    • +
    • tree-splicer generates new source files by combining existing +ones while maintaining correct syntax
    • +
    +

    Notification groups

    +

    The notification groups are an easy way to help out with rustc in a +"piece-meal" fashion, without committing to a larger project. +Notification groups are easy to join (just submit a PR!) +and joining does not entail any particular commitment.

    +

    Once you join a notification group, you will be added to +a list that receives pings on github whenever a new issue is found +that fits the notification group's criteria. If you are interested, you +can then claim the issue and start working on it.

    +

    Of course, you don't have to wait for new issues to be tagged! If you +prefer, you can use the Github label for a notification group to +search for existing issues that haven't been claimed yet.

    +

    List of notification groups

    +

    Here's the list of the notification groups:

    + +

    What issues are a good fit for notification groups?

    +

    Notification groups tend to get pinged on isolated bugs, +particularly those of middle priority:

    +
      +
    • By isolated, we mean that we do not expect large-scale refactoring +to be required to fix the bug.
    • +
    • By middle priority, we mean that we'd like to see the bug fixed, +but it's not such a burning problem that we are dropping everything +else to fix it. The danger with such bugs, of course, is that they +can accumulate over time, and the role of the notification group is +to try and stop that from happening!
    • +
    +

    +

    Joining a notification group

    +

    To join a notification group, you just have to open a PR adding your +Github username to the appropriate file in the Rust team repository. +See the "example PRs" below to get a precise idea and to identify the +file to edit.

    +

    Also, if you are not already a member of a Rust team then -- in addition +to adding your name to the file -- you have to checkout the repository and +run the following command:

    +
    cargo run add-person $your_user_name
    +
    +

    Example PRs:

    + +

    Tagging an issue for a notification group

    +

    To tag an issue as appropriate for a notification group, you give +rustbot a ping command with the name of the notification +group. For example:

    +
    @rustbot ping apple
    +@rustbot ping arm
    +@rustbot ping emscripten
    +@rustbot ping risc-v
    +@rustbot ping wasi
    +@rustbot ping wasm
    +@rustbot ping windows
    +
    +

    To make some commands shorter and easier to remember, there are aliases, +defined in the triagebot.toml file. For example, all of these commands +are equivalent and will ping the Apple group:

    +
    @rustbot ping apple
    +@rustbot ping macos
    +@rustbot ping ios
    +
    +

    Keep in mind that these aliases are meant to make humans' life easier. +They might be subject to change. If you need to ensure that a command +will always be valid, prefer the full invocations over the aliases.

    +

    Note though that this should only be done by compiler team members +or contributors, and is typically done as part of compiler team +triage.

    +

    Apple notification group

    +

    Github Labels: O-macos, O-ios, O-tvos, O-watchos and O-visionos
    +Ping command: @rustbot ping apple

    +

    This list will be used to ask for help both in diagnosing and testing +Apple-related issues as well as suggestions on how to resolve interesting +questions regarding our macOS/iOS/tvOS/watchOS/visionOS support.

    +

    To get a better idea for what the group will do, here are some examples of the +kinds of questions where we would have reached out to the group for advice in +determining the best course of action:

    +
      +
    • Raising the minimum supported versions (e.g. #104385)
    • +
    • Additional Apple targets (e.g. #121419)
    • +
    • Obscure Xcode linker details (e.g. #121430)
    • +
    +

    Deployment targets

    +

    Apple platforms have a concept of "deployment target", controlled with the +*_DEPLOYMENT_TARGET environment variables, and specifies the minimum OS +version that a binary runs on.

    +

    Using an API from a newer OS version in the standard library than the default +that rustc uses will result in either a static or a dynamic linker error. +For this reason, try to suggest that people document on extern "C" APIs +which OS version they were introduced with, and if that's newer than the +current default used by rustc, suggest to use weak linking.

    +

    The App Store and private APIs

    +

    Apple are very protective about using undocumented APIs, so it's important +that whenever a change uses a new function, that they are verified to actually +be public API, as even just mentioning undocumented APIs in the binary +(without calling it) can lead to rejections from the App Store.

    +

    For example, Darwin / the XNU kernel actually has futex syscalls, but we can't +use them in std because they are not public API.

    +

    In general, for an API to be considered public by Apple, it has to:

    +
      +
    • Appear in a public header (i.e. one distributed with Xcode, and found for +the specific platform under xcrun --show-sdk-path --sdk $SDK).
    • +
    • Have an availability attribute on it (like __API_AVAILABLE, +API_AVAILABLE or similar).
    • +
    +

    ARM notification group

    +

    Github Label: O-ARM
    +Ping command: @rustbot ping arm

    +

    This list will be used to ask for help both in diagnosing and testing +ARM-related issues as well as suggestions on how to resolve +interesting questions regarding our ARM support.

    +

    The group also has an associated Zulip stream (#t-compiler/arm) +where people can go to pose questions and discuss ARM-specific +topics.

    +

    So, if you are interested in participating, please sign up for the +ARM group! To do so, open a PR against the rust-lang/team +repository. Just follow this example, but change the username to +your own!

    +

    Emscripten notification group

    +

    Github Label: O-emscripten
    +Ping command: @rustbot ping emscripten

    +

    This list will be used to ask for help both in diagnosing and testing +Emscripten-related issues as well as suggestions on how to resolve +interesting questions regarding our Emscripten support.

    +

    The group also has an associated Zulip stream (#t-compiler/wasm) +where people can go to pose questions and discuss Emscripten-specific +topics.

    +

    So, if you are interested in participating, please sign up for the +Emscripten group! To do so, open a PR against the rust-lang/team +repository. Just follow this example, but change the username to +your own!

    +

    Fuchsia notification group

    +

    Github Label: O-fuchsia
    +Ping command: @rustbot ping fuchsia

    +

    This list will be used to notify Fuchsia maintainers +when the compiler or the standard library changes in a way that would +break the Fuchsia integration.

    +

    RISC-V notification group

    +

    Github Label: O-riscv
    +Ping command: @rustbot ping risc-v

    +

    This list will be used to ask for help both in diagnosing and testing +RISC-V-related issues as well as suggestions on how to resolve +interesting questions regarding our RISC-V support.

    +

    The group also has an associated Zulip stream (#t-compiler/risc-v) +where people can go to pose questions and discuss RISC-V-specific +topics.

    +

    So, if you are interested in participating, please sign up for the +RISC-V group! To do so, open a PR against the rust-lang/team +repository. Just follow this example, but change the username to +your own!

    +

    Rust for Linux notification group

    +

    Github Label: A-rust-for-linux
    +Ping command: @rustbot ping rfl

    +

    This list will be used to notify Rust for Linux (RfL) maintainers +when the compiler or the standard library changes in a way that would +break Rust for Linux, since it depends on several unstable flags +and features. The RfL maintainers should then ideally provide support +for resolving the breakage or decide to temporarily accept the breakage +and unblock CI by temporarily removing the RfL CI jobs.

    +

    The group also has an associated Zulip stream (#rust-for-linux) +where people can go to ask questions and discuss topics related to Rust +for Linux.

    +

    If you are interested in participating, please sign up for the +Rust for Linux group on Zulip!

    +

    WASI notification group

    +

    Github Label: O-wasi
    +Ping command: @rustbot ping wasi

    +

    This list will be used to ask for help both in diagnosing and testing +WASI-related issues as well as suggestions on how to resolve +interesting questions regarding our WASI support.

    +

    The group also has an associated Zulip stream (#t-compiler/wasm) +where people can go to pose questions and discuss WASI-specific +topics.

    +

    So, if you are interested in participating, please sign up for the +WASI group! To do so, open a PR against the rust-lang/team +repository. Just follow this example, but change the username to +your own!

    +

    WebAssembly (WASM) notification group

    +

    Github Label: O-wasm
    +Ping command: @rustbot ping wasm

    +

    This list will be used to ask for help both in diagnosing and testing +WebAssembly-related issues as well as suggestions on how to resolve +interesting questions regarding our WASM support.

    +

    The group also has an associated Zulip stream (#t-compiler/wasm) +where people can go to pose questions and discuss WASM-specific +topics.

    +

    So, if you are interested in participating, please sign up for the +WASM group! To do so, open a PR against the rust-lang/team +repository. Just follow this example, but change the username to +your own!

    +

    Windows notification group

    +

    Github Label: O-Windows
    +Ping command: @rustbot ping windows

    +

    This list will be used to ask for help both in diagnosing and testing +Windows-related issues as well as suggestions on how to resolve +interesting questions regarding our Windows support.

    +

    The group also has an associated Zulip stream (#t-compiler/windows) +where people can go to pose questions and discuss Windows-specific +topics.

    +

    To get a better idea for what the group will do, here are some +examples of the kinds of questions where we would have reached out to +the group for advice in determining the best course of action:

    +
      +
    • Which versions of MinGW should we support?
    • +
    • Should we remove the legacy InnoSetup GUI installer? #72569
    • +
    • What names should we use for static libraries on Windows? #29520
    • +
    +

    So, if you are interested in participating, please sign up for the +Windows group! To do so, open a PR against the rust-lang/team +repository. Just follow this example, but change the username to +your own!

    +

    rust-lang/rust Licenses

    +

    The rustc compiler source and standard library are dual licensed under the Apache License v2.0 and the MIT License unless otherwise specified.

    +

    Detailed licensing information is available in the COPYRIGHT document of the rust-lang/rust repository.

    +

    Guidelines for reviewers

    +

    In general, reviewers need to be looking not only for the code quality of contributions but also +that they are properly licensed. +We have some tips below for things to look out for when reviewing, but if you ever feel uncertain +as to whether some code might be properly licensed, err on the safe side — reach out to the Council +or Compiler Team Leads for feedback!

    +

    Things to watch out for:

    +
      +
    • The PR author states that they copied, ported, or adapted the code from some other source.
    • +
    • There is a comment in the code pointing to a webpage or describing where the algorithm was taken +from.
    • +
    • The algorithm or code pattern seems like it was likely copied from somewhere else.
    • +
    • When adding new dependencies, double check the dependency's license.
    • +
    +

    In all of these cases, we will want to check that source to make sure it is licensed in a way +that is compatible with Rust’s license.

    +

    Examples

    +
      +
    • Porting C code from a GPL project, like GNU binutils, is not allowed. That would require Rust +itself to be licensed under the GPL.
    • +
    • Copying code from an algorithms text book may be allowed, but some algorithms are patented.
    • +
    +

    Porting

    +

    Contributions to rustc, especially around platform and compiler intrinsics, often include porting +over work from other projects, mainly LLVM and GCC.

    +

    Some general rules apply:

    +
      +
    • Copying work needs to adhere to the original license +
        +
      • This applies to direct copy & paste
      • +
      • This also applies to code you looked at and ported
      • +
      +
    • +
    +

    In general, taking inspiration from other codebases is fine, but please exercise caution when +porting code.

    +

    Ports of full libraries (e.g. C libraries shipped with LLVM) must keep the license of the original +library.

    +

    Editions

    + +

    This chapter gives an overview of how Edition support works in rustc. +This assumes that you are familiar with what Editions are (see the Edition Guide).

    +

    Edition definition

    +

    The --edition CLI flag specifies the edition to use for a crate. +This can be accessed from Session::edition. +There are convenience functions like Session::at_least_rust_2021 for checking the crate's +edition, though you should be careful about whether you check the global session or the span, see +Edition hygiene below.

    +

    As an alternative to the at_least_rust_20xx convenience methods, the Edition type also +supports comparisons for doing range checks, such as span.edition() >= Edition::Edition2021.

    +

    Adding a new edition

    +

    Adding a new edition mainly involves adding a variant to the Edition enum and then fixing +everything that is broken. See #94461 for an +example.

    +

    Features and Edition stability

    +

    The Edition enum defines whether or not an edition is stable. +If it is not stable, then the -Zunstable-options CLI option must be passed to enable it.

    +

    When adding a new feature, there are two options you can choose for how to handle stability with a +future edition:

    +
      +
    • Just check the edition of the span like span.at_least_rust_20xx() (see Edition hygiene) or the +Session::edition. This will implicitly depend on the stability of the edition itself to +indicate that your feature is available.
    • +
    • Place your new behavior behind a feature gate.
    • +
    +

    It may be sufficient to only check the current edition for relatively simple changes. +However, for larger language changes, you should consider creating a feature gate. +There are several benefits to using a feature gate:

    +
      +
    • A feature gate makes it easier to work on and experiment with a new feature.
    • +
    • It makes the intent clear when the #![feature(…)] attribute is used that your new feature is +being enabled.
    • +
    • It makes testing of editions easier so that features that are not yet complete do not interfere +with testing of edition-specific features that are complete and ready.
    • +
    • It decouples the feature from an edition, which makes it easier for the team to make a deliberate +decision of whether or not a feature should be added to the next edition when the feature is +ready.
    • +
    +

    When a feature is complete and ready, the feature gate can be removed (and the code should just +check the span or Session edition to determine if it is enabled).

    +

    There are a few different options for doing feature checks:

    +
      +
    • +

      For highly experimental features, that may or may not be involved in an edition, they can +implement regular feature gates like tcx.features().my_feature, and ignore editions for the time +being.

      +
    • +
    • +

      For experimental features that might be involved in an edition, they should implement gates with +tcx.features().my_feature && span.at_least_rust_20xx(). +This requires the user to still specify #![feature(my_feature)], to avoid disrupting testing of +other edition features which are ready and have been accepted within the edition.

      +
    • +
    • +

      For experimental features that have graduated to definitely be part of an edition, +they should implement gates with tcx.features().my_feature || span.at_least_rust_20xx(), +or just remove the feature check altogether and just check span.at_least_rust_20xx().

      +
    • +
    +

    If you need to do the feature gating in multiple places, consider placing the check in a single +function so that there will only be a single place to update. For example:

    +
    // An example from Edition 2021 disjoint closure captures.
    +
    +fn enable_precise_capture(tcx: TyCtxt<'_>, span: Span) -> bool {
    +    tcx.features().capture_disjoint_fields || span.rust_2021()
    +}
    +

    See Lints and stability below for more information about how lints handle +stability.

    +

    Edition parsing

    +

    For the most part, the lexer is edition-agnostic. +Within Lexer, tokens can be modified based on edition-specific behavior. +For example, C-String literals like c"foo" are split into multiple tokens in editions before 2021. +This is also where things like reserved prefixes are handled for the 2021 edition.

    +

    Edition-specific parsing is relatively rare. One example is async fn which checks the span of the +token to determine if it is the 2015 edition, and emits an error in that case. +This can only be done if the syntax was already invalid.

    +

    If you need to do edition checking in the parser, you will normally want to look at the edition of +the token, see Edition hygiene. +In some rare cases you may instead need to check the global edition from ParseSess::edition.

    +

    Most edition-specific parsing behavior is handled with migration lints instead of in the parser. +This is appropriate when there is a change in syntax (as opposed to new syntax). +This allows the old syntax to continue to work on previous editions. +The lint then checks for the change in behavior. +On older editions, the lint pass should emit the migration lint to help with migrating to new +editions. +On newer editions, your code should emit a hard error with emit_err instead. +For example, the deprecated start...end pattern syntax emits the +ellipsis_inclusive_range_patterns lint on editions before 2021, and in 2021 is an hard error via +the emit_err method.

    +

    Keywords

    +

    New keywords can be introduced across an edition boundary. +This is implemented by functions like Symbol::is_used_keyword_conditional, which rely on the +ordering of how the keywords are defined.

    +

    When new keywords are introduced, the keyword_idents lint should be updated so that automatic +migrations can transition code that might be using the keyword as an identifier (see +KeywordIdents). +An alternative to consider is to implement the keyword as a weak keyword if the position it is used +is sufficient to distinguish it.

    +

    An additional option to consider is the k# prefix which was introduced in RFC 3101. +This allows the use of a keyword in editions before the edition where the keyword is introduced. +This is currently not implemented.

    +

    Edition hygiene

    +

    Spans are marked with the edition of the crate that the span came from. +See Macro hygiene in the Edition Guide for a user-centric description of what this means.

    +

    You should normally use the edition from the token span instead of looking at the global Session +edition. +For example, use span.edition().at_least_rust_2021() instead of sess.at_least_rust_2021(). +This helps ensure that macros behave correctly when used across crates.

    +

    Lints

    +

    Lints support a few different options for interacting with editions. +Lints can be future incompatible edition migration lints, which are used to support +migrations to newer editions. +Alternatively, lints can be edition-specific, where they change their +default level starting in a specific edition.

    +

    Migration lints

    +

    Migration lints are used to migrate projects from one edition to the next. +They are implemented with a MachineApplicable suggestion which +will rewrite code so that it will successfully compile in both the previous and the next +edition. +For example, the keyword_idents lint will take identifiers that conflict with a new keyword to +use the raw identifier syntax to avoid the conflict (for example changing async to r#async).

    +

    Migration lints must be declared with the FutureIncompatibilityReason::EditionError or +FutureIncompatibilityReason::EditionSemanticsChange future-incompatible +option in the lint declaration:

    +
    declare_lint! {
    +    pub KEYWORD_IDENTS,
    +    Allow,
    +    "detects edition keywords being used as an identifier",
    +    @future_incompatible = FutureIncompatibleInfo {
    +        reason: FutureIncompatibilityReason::EditionError(Edition::Edition2018),
    +        reference: "issue #49716 <https://github.com/rust-lang/rust/issues/49716>",
    +    };
    +}
    +

    When declared like this, the lint is automatically added to the appropriate +rust-20xx-compatibility lint group. +When a user runs cargo fix --edition, cargo will pass the --force-warn rust-20xx-compatibility +flag to force all of these lints to appear during the edition migration. +Cargo also passes --cap-lints=allow so that no other lints interfere with the edition migration.

    +

    Make sure that the example code sets the correct edition. The example should illustrate the previous edition, and show what the migration warning would look like. For example, this lint for a 2024 migration shows an example in 2021:

    +
    declare_lint! {
    +    /// The `keyword_idents_2024` lint detects ...
    +    ///
    +    /// ### Example
    +    ///
    +    /// ```rust,edition2021
    +    /// #![warn(keyword_idents_2024)]
    +    /// fn gen() {}
    +    /// ```
    +    ///
    +    /// {{produces}}
    +}
    +

    Migration lints can be either Allow or Warn by default. +If it is Allow, users usually won't see this warning unless they are doing an edition migration +manually or there is a problem during the migration. +Most migration lints are Allow.

    +

    If it is Warn by default, users on all editions will see this warning. +Only use Warn if you think it is important for everyone to be aware of the change, and to +encourage people to update their code on all editions. +Beware that new warn-by-default lint that hit many projects can be very disruptive and frustrating +for users. +You may consider switching an Allow to Warn several years after the edition stabilizes. +This will only show up for the relatively small number of stragglers who have not updated to the new +edition.

    +

    Edition-specific lints

    +

    Lints can be marked so that they have a different level starting in a specific edition. +In the lint declaration, use the @edition marker:

    +
    declare_lint! {
    +    pub SOME_LINT_NAME,
    +    Allow,
    +    "my lint description",
    +    @edition Edition2024 => Warn;
    +}
    +

    Here, SOME_LINT_NAME defaults to Allow on all editions before 2024, and then becomes Warn +afterwards.

    +

    This should generally be used sparingly, as there are other options:

    +
      +
    • +

      Small impact stylistic changes unrelated to an edition can just make the lint Warn on all +editions. If you want people to adopt a different way to write things, then go ahead and commit to +having it show up for all projects.

      +

      Beware that if a new warn-by-default lint hits many projects, it can be very disruptive and +frustrating for users.

      +
    • +
    • +

      Change the new style to be a hard error in the new edition, and use a migration lint to +automatically convert projects to the new style. For example, +ellipsis_inclusive_range_patterns is a hard error in 2021, and warns in all previous editions.

      +

      Beware that these cannot be added after the edition stabilizes.

      +
    • +
    • +

      Migration lints can also change over time. +For example, the migration lint can start out as Allow by default. +For people performing the migration, they will automatically get updated to the new code. +Then, after some years, the lint can be made to Warn in previous editions.

      +

      For example anonymous_parameters was a 2018 Edition migration lint (and a hard-error in 2018) +that was Allow by default in previous editions. +Then, three years later, it was changed to Warn for all previous editions, so that all users got +a warning that the style was being phased out. +If this was a warning from the start, it would have impacted many projects and be very disruptive. +By making it part of the edition, most users eventually updated to the new edition and were +handled by the migration. +Switching to Warn only impacted a few stragglers who did not update.

      +
    • +
    +

    Lints and stability

    +

    Lints can be marked as being unstable, which can be helpful when developing a new edition feature, +and you want to test out a migration lint. +The feature gate can be specified in the lint's declaration like this:

    +
    declare_lint! {
    +    pub SOME_LINT_NAME,
    +    Allow,
    +    "my cool lint",
    +    @feature_gate = sym::my_feature_name;
    +}
    +

    Then, the lint will only fire if the user has the appropriate #![feature(my_feature_name)]. +Just beware that when it comes time to do crater runs testing the migration that the feature gate +will need to be removed.

    +

    Alternatively, you can implement an allow-by-default migration lint for an upcoming unstable +edition without a feature gate. +Although users may technically be able to enable the lint before the edition is stabilized, most +will not notice the new lint exists, and it should not disrupt anything or cause any breakage.

    +

    Idiom lints

    +

    In the 2018 edition, there was a concept of "idiom lints" under the rust-2018-idioms lint group. +The concept was to have new idiomatic styles under a different lint group separate from the forced +migrations under the rust-2018-compatibility lint group, giving some flexibility as to how people +opt-in to certain edition changes.

    +

    Overall this approach did not seem to work very well, +and it is unlikely that we will use the idiom groups in the future.

    +

    Standard library changes

    +

    Preludes

    +

    Each edition comes with a specific prelude of the standard library. +These are implemented as regular modules in core::prelude and std::prelude. +New items can be added to the prelude, just beware that this can conflict with user's pre-existing +code. +Usually a migration lint should be used to migrate existing code to avoid the conflict. +For example, rust_2021_prelude_collisions is used to handle the collisions with the new traits +in 2021.

    +

    Customized language behavior

    +

    Usually it is not possible to make breaking changes to the standard library. +In some rare cases, the teams may decide that the behavior change is important enough to break this +rule. +The downside is that this requires special handling in the compiler to be able to distinguish when +the old and new signatures or behaviors should be used.

    +

    One example is the change in method resolution for into_iter() of arrays. +This was implemented with the #[rustc_skip_array_during_method_dispatch] attribute on the +IntoIterator trait which then tells the compiler to consider an alternate trait resolution choice +based on the edition.

    +

    Another example is the panic! macro changes. +This required defining multiple panic macros, and having the built-in panic macro implementation +determine the appropriate way to expand it. +This also included the non_fmt_panics migration lint to adjust old code to the new form, which +required the rustc_diagnostic_item attribute to detect the usage of the panic macro.

    +

    In general it is recommended to avoid these special cases except for very high value situations.

    +

    Migrating the standard library edition

    +

    Updating the edition of the standard library itself roughly involves the following process:

    +
      +
    • Wait until the newly stabilized edition has reached beta and the bootstrap compiler has been updated.
    • +
    • Apply migration lints. This can be an involved process since some code is in external submodules1, and the standard library makes heavy use of conditional compilation. Also, running cargo fix --edition can be impractical on the standard library itself. One approach is to individually add #![warn(...)] at the top of each crate for each lint, run ./x check library, apply the migrations, remove the #![warn(...)] and commit each migration separately. You'll likely need to run ./x check with --target for many different targets to get full coverage (otherwise you'll likely spend days or weeks getting CI to pass)2. See also the advanced migration guide for more tips. +
        +
      • Apply migrations to backtrace-rs. Example for 2024. Note that this doesn't update the edition of the crate itself because that is published independently on crates.io, and that would otherwise restrict the minimum Rust version. Consider adding some #![deny()] attributes to avoid regressions until its edition gets updated.
      • +
      • Apply migrations to stdarch, and update its edition, and formatting. Example for 2024.
      • +
      • Post PRs to update the backtrace and stdarch submodules, and wait for those to land.
      • +
      • Apply migration lints to the standard library crates, and update their edition. I recommend working one crate at a time starting with core. Example for 2024.
      • +
      +
    • +
    +

    Stabilizing an edition

    +

    After the edition team has given the go-ahead, the process for stabilizing an edition is roughly:

    +
      +
    • Update LATEST_STABLE_EDITION.
    • +
    • Update Edition::is_stable.
    • +
    • Hunt and find any document that refers to edition by number, and update it: + +
    • +
    • Clean up any tests that use the //@ edition header to remove the -Zunstable-options flag to ensure they are indeed stable. Note: Ideally this should be automated, see #133582.
    • +
    • Bless any tests that change.
    • +
    • Update lint-docs to default to the new edition.
    • +
    +

    See example for 2024.

    +
    +
    1. +

      This will hopefully change in the future to pull these submodules into rust-lang/rust.

      +
    2. +
    3. +

      You'll also likely need to do a lot of testing for different targets, and this is where docker testing comes in handy.

      +
    4. +

    Bootstrapping the compiler

    +

    Bootstrapping is the process of using a compiler to compile itself. +More accurately, it means using an older compiler to compile a newer version +of the same compiler.

    +

    This raises a chicken-and-egg paradox: where did the first compiler come from? +It must have been written in a different language. In Rust's case it was +written in OCaml. However, it was abandoned long ago, and the +only way to build a modern version of rustc is with a slightly less modern +version.

    +

    This is exactly how x.py works: it downloads the current beta release of +rustc, then uses it to compile the new compiler.

    +

    In this section, we give a high-level overview of +what Bootstrap does, followed by a high-level +introduction to how Bootstrap does it.

    +

    Additionally, see debugging bootstrap to learn +about debugging methods.

    +

    What Bootstrapping does

    + +

    Bootstrapping is the process of using a compiler to compile itself. +More accurately, it means using an older compiler to compile a newer version of +the same compiler.

    +

    This raises a chicken-and-egg paradox: where did the first compiler come from? +It must have been written in a different language. In Rust's case it was +written in OCaml. However, it was abandoned long ago, and the +only way to build a modern version of rustc is with a slightly less modern version.

    +

    This is exactly how ./x.py works: it downloads the current beta release of +rustc, then uses it to compile the new compiler.

    +

    Note that this documentation mostly covers user-facing information. See +bootstrap/README.md to read about bootstrap internals.

    +

    Stages of bootstrapping

    +

    Overview

    +
      +
    • Stage 0: the pre-compiled compiler
    • +
    • Stage 1: from current code, by an earlier compiler
    • +
    • Stage 2: the truly current compiler
    • +
    • Stage 3: the same-result test
    • +
    +

    Compiling rustc is done in stages. Here's a diagram, adapted from Jynn +Nelson's talk on bootstrapping at RustConf 2022, with +detailed explanations below.

    +

    The A, B, C, and D show the ordering of the stages of bootstrapping. +Blue nodes are +downloaded, yellow +nodes are built with the stage0 compiler, and green nodes are built with the stage1 +compiler.

    +
    graph TD
    +    s0c["stage0 compiler (1.86.0-beta.1)"]:::downloaded -->|A| s0l("stage0 std (1.86.0-beta.1)"):::downloaded;
    +    s0c & s0l --- stepb[ ]:::empty;
    +    stepb -->|B| s0ca["stage0 compiler artifacts (1.87.0-dev)"]:::with-s0c;
    +    s0ca -->|copy| s1c["stage1 compiler (1.87.0-dev)"]:::with-s0c;
    +    s1c -->|C| s1l("stage1 std (1.87.0-dev)"):::with-s1c;
    +    s1c & s1l --- stepd[ ]:::empty;
    +    stepd -->|D| s1ca["stage1 compiler artifacts (1.87.0-dev)"]:::with-s1c;
    +    s1ca -->|copy| s2c["stage2 compiler"]:::with-s1c;
    +
    +    classDef empty width:0px,height:0px;
    +    classDef downloaded fill: lightblue;
    +    classDef with-s0c fill: yellow;
    +    classDef with-s1c fill: lightgreen;
    +
    +

    Stage 0: the pre-compiled compiler

    +

    The stage0 compiler is by default the very recent beta rustc compiler and its +associated dynamic libraries, which ./x.py will download for you. (You can +also configure ./x.py to change stage0 to something else.)

    +

    The precompiled stage0 compiler is then used only to compile src/bootstrap and compiler/rustc +with precompiled stage0 std.

    +

    Note that to build the stage1 compiler we use the precompiled stage0 compiler and std. +Therefore, to use a compiler with a std that is freshly built from the tree, you need to +build the stage2 compiler.

    +

    There are two concepts at play here: a compiler (with its set of dependencies) and its +'target' or 'object' libraries (std and rustc). Both are staged, but in a staggered manner.

    +

    Stage 1: from current code, by an earlier compiler

    +

    The rustc source code is then compiled with the stage0 compiler to produce the +stage1 compiler.

    +

    Stage 2: the truly current compiler

    +

    We then rebuild the compiler using stage1 compiler with in-tree std to produce the stage2 +compiler.

    +

    The stage1 compiler itself was built by precompiled stage0 compiler and std +and hence not by the source in your working directory. This means that the ABI +generated by the stage0 compiler may not match the ABI that would have been made +by the stage1 compiler, which can cause problems for dynamic libraries, tests +and tools using rustc_private.

    +

    Note that the proc_macro crate avoids this issue with a C FFI layer called +proc_macro::bridge, allowing it to be used with stage1.

    +

    The stage2 compiler is the one distributed with rustup and all other install +methods. However, it takes a very long time to build because one must first +build the new compiler with an older compiler and then use that to build the new +compiler with itself.

    +

    For development, you usually only want to use --stage 1 flag to build things. +See Building the compiler.

    +

    Stage 3: the same-result test

    +

    Stage 3 is optional. To sanity check our new compiler we can build the libraries +with the stage2 compiler. The result ought to be identical to before, unless +something has broken.

    +

    Building the stages

    +

    The script ./x tries to be helpful and pick the stage you most likely meant +for each subcommand. Here are some x commands with their default stages:

    +
      +
    • check: --stage 1
    • +
    • clippy: --stage 1
    • +
    • doc: --stage 1
    • +
    • build: --stage 1
    • +
    • test: --stage 1
    • +
    • dist: --stage 2
    • +
    • install: --stage 2
    • +
    • bench: --stage 2
    • +
    +

    You can always override the stage by passing --stage N explicitly.

    +

    For more information about stages, see +below.

    +

    Complications of bootstrapping

    +

    Since the build system uses the current beta compiler to build a stage1 +bootstrapping compiler, the compiler source code can't use some features until +they reach beta (because otherwise the beta compiler doesn't support them). On +the other hand, for compiler intrinsics and internal features, the +features have to be used. Additionally, the compiler makes heavy use of +nightly features (#![feature(...)]). How can we resolve this problem?

    +

    There are two methods used:

    +
      +
    1. The build system sets --cfg bootstrap when building with stage0, so we +can use cfg(not(bootstrap)) to only use features when built with stage1. +Setting --cfg bootstrap in this way is used for features that were just +stabilized, which require #![feature(...)] when built with stage0, but +not for stage1.
    2. +
    3. The build system sets RUSTC_BOOTSTRAP=1. This special variable means to +break the stability guarantees of Rust: allowing use of #![feature(...)] +with a compiler that's not nightly. Setting RUSTC_BOOTSTRAP=1 should +never be used except when bootstrapping the compiler.
    4. +
    +

    Understanding stages of bootstrap

    +

    Overview

    +

    This is a detailed look into the separate bootstrap stages.

    +

    The convention ./x uses is that:

    +
      +
    • A --stage N flag means to run the stage N compiler (stageN/rustc).
    • +
    • A "stage N artifact" is a build artifact that is produced by the stage N +compiler.
    • +
    • The stage N+1 compiler is assembled from stage N artifacts. This process is +called uplifting.
    • +
    +

    Build artifacts

    +

    Anything you can build with ./x is a build artifact. Build artifacts +include, but are not limited to:

    +
      +
    • binaries, like stage0-rustc/rustc-main
    • +
    • shared objects, like stage0-sysroot/rustlib/libstd-6fae108520cf72fe.so
    • +
    • rlib files, like stage0-sysroot/rustlib/libstd-6fae108520cf72fe.rlib
    • +
    • HTML files generated by rustdoc, like doc/std
    • +
    +

    Examples

    +
      +
    • ./x test tests/ui means to build the stage1 compiler and run compiletest +on it. If you're working on the compiler, this is normally the test command +you want.
    • +
    • ./x test --stage 0 library/std means to run tests on the standard library +without building rustc from source ('build with stage0, then test the +artifacts'). If you're working on the standard library, this is normally the +test command you want.
    • +
    • ./x build --stage 0 means to build with the stage0 rustc.
    • +
    • ./x doc --stage 0 means to document using the stage0 rustdoc.
    • +
    +

    Examples of what not to do

    +
      +
    • ./x test --stage 0 tests/ui is not useful: it runs tests on the beta +compiler and doesn't build rustc from source. Use test tests/ui instead, +which builds stage1 from source.
    • +
    • ./x test --stage 0 compiler/rustc builds the compiler but runs no tests: +it's running cargo test -p rustc, but cargo doesn't understand Rust's +tests. You shouldn't need to use this, use test instead (without arguments).
    • +
    • ./x build --stage 0 compiler/rustc builds the compiler, but does not build +libstd or even libcore. Most of the time, you'll want ./x build library +instead, which allows compiling programs without needing to define lang items.
    • +
    +

    Building vs. running

    +

    In short, stage 0 uses the stage0 compiler to create stage0 artifacts which +will later be uplifted to be the stage1 compiler.

    +

    In each stage, two major steps are performed:

    +
      +
    1. std is compiled by the stage N compiler.
    2. +
    3. That std is linked to programs built by the stage N compiler, including the +stage N artifacts (stage N+1 compiler).
    4. +
    +

    This is somewhat intuitive if one thinks of the stage N artifacts as "just" +another program we are building with the stage N compiler: build --stage N compiler/rustc is linking the stage N artifacts to the std built by the stage +N compiler.

    +

    Stages and std

    +

    Note that there are two std libraries in play here:

    +
      +
    1. The library linked to stageN/rustc, which was built by stage N-1 (stage +N-1 std)
    2. +
    3. The library used to compile programs with stageN/rustc, which was built +by stage N (stage N std).
    4. +
    +

    Stage N std is pretty much necessary for any useful work with the stage N +compiler. Without it, you can only compile programs with #![no_core] -- not +terribly useful!

    +

    The reason these need to be different is because they aren't necessarily +ABI-compatible: there could be new layout optimizations, changes to MIR, or +other changes to Rust metadata on nightly that aren't present in beta.

    +

    This is also where --keep-stage 1 library/std comes into play. Since most +changes to the compiler don't actually change the ABI, once you've produced a +std in stage1, you can probably just reuse it with a different compiler. If +the ABI hasn't changed, you're good to go, no need to spend time recompiling +that std. The flag --keep-stage simply instructs the build script to assumes +the previous compile is fine and copies those artifacts into the appropriate +place, skipping the cargo invocation.

    +

    Cross-compiling rustc

    +

    Cross-compiling is the process of compiling code that will run on another +architecture. For instance, you might want to build an ARM version of rustc +using an x86 machine. Building stage2 std is different when you are +cross-compiling.

    +

    This is because ./x uses the following logic: if HOST and TARGET are the +same, it will reuse stage1 std for stage2! This is sound because stage1 +std was compiled with the stage1 compiler, i.e. a compiler using the source +code you currently have checked out. So it should be identical (and therefore +ABI-compatible) to the std that stage2/rustc would compile.

    +

    However, when cross-compiling, stage1 std will only run on the host. So the +stage2 compiler has to recompile std for the target.

    +

    (See in the table how stage2 only builds non-host std targets).

    +

    What is a 'sysroot'?

    +

    When you build a project with cargo, the build artifacts for dependencies are +normally stored in target/debug/deps. This only contains dependencies cargo +knows about; in particular, it doesn't have the standard library. Where do std +or proc_macro come from? They come from the sysroot, the root of a number +of directories where the compiler loads build artifacts at runtime. The +sysroot doesn't just store the standard library, though - it includes anything +that needs to be loaded at runtime. That includes (but is not limited to):

    +
      +
    • Libraries libstd/libtest/libproc_macro.
    • +
    • Compiler crates themselves, when using rustc_private. In-tree these are +always present; out of tree, you need to install rustc-dev with rustup.
    • +
    • Shared object file libLLVM.so for the LLVM project. In-tree this is either +built from source or downloaded from CI; out-of-tree, you need to install +llvm-tools-preview with rustup.
    • +
    +

    All the artifacts listed so far are compiler runtime dependencies. You can see +them with rustc --print sysroot:

    +
    $ ls $(rustc --print sysroot)/lib
    +libchalk_derive-0685d79833dc9b2b.so  libstd-25c6acf8063a3802.so
    +libLLVM-11-rust-1.50.0-nightly.so    libtest-57470d2aa8f7aa83.so
    +librustc_driver-4f0cc9f50e53f0ba.so  libtracing_attributes-e4be92c35ab2a33b.so
    +librustc_macros-5f0ec4a119c6ac86.so  rustlib
    +
    +

    There are also runtime dependencies for the standard library! These are in +lib/rustlib/, not lib/ directly.

    +
    $ ls $(rustc --print sysroot)/lib/rustlib/x86_64-unknown-linux-gnu/lib | head -n 5
    +libaddr2line-6c8e02b8fedc1e5f.rlib
    +libadler-9ef2480568df55af.rlib
    +liballoc-9c4002b5f79ba0e1.rlib
    +libcfg_if-512eb53291f6de7e.rlib
    +libcompiler_builtins-ef2408da76957905.rlib
    +
    +

    Directory lib/rustlib/ includes libraries like hashbrown and cfg_if, which +are not part of the public API of the standard library, but are used to +implement it. Also lib/rustlib/ is part of the search path for linkers, but +lib will never be part of the search path.

    +

    -Z force-unstable-if-unmarked

    +

    Since lib/rustlib/ is part of the search path we have to be careful about +which crates are included in it. In particular, all crates except for the +standard library are built with the flag -Z force-unstable-if-unmarked, which +means that you have to use #![feature(rustc_private)] in order to load it (as +opposed to the standard library, which is always available).

    +

    The -Z force-unstable-if-unmarked flag has a variety of purposes to help +enforce that the correct crates are marked as unstable. It was introduced +primarily to allow rustc and the standard library to link to arbitrary crates on +crates.io which do not themselves use staged_api. rustc also relies on this +flag to mark all of its crates as unstable with the rustc_private feature so +that each crate does not need to be carefully marked with unstable.

    +

    This flag is automatically applied to all of rustc and the standard library by +the bootstrap scripts. This is needed because the compiler and all of its +dependencies are shipped in sysroot to all users.

    +

    This flag has the following effects:

    +
      +
    • Marks the crate as "unstable" with the rustc_private feature if it is not +itself marked as stable or unstable.
    • +
    • Allows these crates to access other forced-unstable crates without any need +for attributes. Normally a crate would need a #![feature(rustc_private)] +attribute to use other unstable crates. However, that would make it +impossible for a crate from crates.io to access its own dependencies since +that crate won't have a feature(rustc_private) attribute, but everything +is compiled with -Z force-unstable-if-unmarked.
    • +
    +

    Code which does not use -Z force-unstable-if-unmarked should include the +#![feature(rustc_private)] crate attribute to access these forced-unstable +crates. This is needed for things which link rustc its self, such as MIRI or +clippy.

    +

    You can find more discussion about sysroots in:

    + +

    Passing flags to commands invoked by bootstrap

    +

    Conveniently ./x allows you to pass stage-specific flags to rustc and +cargo when bootstrapping. The RUSTFLAGS_BOOTSTRAP environment variable is +passed as RUSTFLAGS to the bootstrap stage (stage0), and +RUSTFLAGS_NOT_BOOTSTRAP is passed when building artifacts for later stages. +RUSTFLAGS will work, but also affects the build of bootstrap itself, so it +will be rare to want to use it. Finally, MAGIC_EXTRA_RUSTFLAGS bypasses the +cargo cache to pass flags to rustc without recompiling all dependencies.

    +
      +
    • RUSTDOCFLAGS, RUSTDOCFLAGS_BOOTSTRAP and RUSTDOCFLAGS_NOT_BOOTSTRAP are +analogous to RUSTFLAGS, but for rustdoc.
    • +
    • CARGOFLAGS will pass arguments to cargo itself (e.g. --timings). +CARGOFLAGS_BOOTSTRAP and CARGOFLAGS_NOT_BOOTSTRAP work analogously to +RUSTFLAGS_BOOTSTRAP.
    • +
    • --test-args will pass arguments through to the test runner. For tests/ui, +this is compiletest. For unit tests and doc tests this is the libtest +runner.
    • +
    +

    Most test runners accept --help, +which you can use to find out the options accepted by the runner.

    +

    Environment Variables

    +

    During bootstrapping, there are a bunch of compiler-internal environment +variables that are used. If you are trying to run an intermediate version of +rustc, sometimes you may need to set some of these environment variables +manually. Otherwise, you get an error like the following:

    +
    thread 'main' panicked at 'RUSTC_STAGE was not set: NotPresent', library/core/src/result.rs:1165:5
    +
    +

    If ./stageN/bin/rustc gives an error about environment variables, that usually +means something is quite wrong -- such as you're trying to compile rustc or +std or something which depends on environment variables. In the unlikely case +that you actually need to invoke rustc in such a situation, you can tell the +bootstrap shim to print all env variables by adding -vvv to your x +command.

    +

    Finally, bootstrap makes use of the cc-rs crate which has its own +method of configuring C compilers and C flags via environment +variables.

    +

    Clarification of build command's stdout

    +

    In this part, we will investigate the build command's stdout in an action +(similar, but more detailed and complete documentation compare to topic above). +When you execute x build --dry-run command, the build output will be something +like the following:

    +
    Building stage0 library artifacts (x86_64-unknown-linux-gnu -> x86_64-unknown-linux-gnu)
    +Copying stage0 library from stage0 (x86_64-unknown-linux-gnu -> x86_64-unknown-linux-gnu / x86_64-unknown-linux-gnu)
    +Building stage0 compiler artifacts (x86_64-unknown-linux-gnu -> x86_64-unknown-linux-gnu)
    +Copying stage0 rustc from stage0 (x86_64-unknown-linux-gnu -> x86_64-unknown-linux-gnu / x86_64-unknown-linux-gnu)
    +Assembling stage1 compiler (x86_64-unknown-linux-gnu)
    +Building stage1 library artifacts (x86_64-unknown-linux-gnu -> x86_64-unknown-linux-gnu)
    +Copying stage1 library from stage1 (x86_64-unknown-linux-gnu -> x86_64-unknown-linux-gnu / x86_64-unknown-linux-gnu)
    +Building stage1 tool rust-analyzer-proc-macro-srv (x86_64-unknown-linux-gnu)
    +Building rustdoc for stage1 (x86_64-unknown-linux-gnu)
    +
    +

    Building stage0 {std,compiler} artifacts

    +

    These steps use the provided (downloaded, usually) compiler to compile the local +Rust source into libraries we can use.

    +

    Copying stage0 {std,rustc}

    +

    This copies the library and compiler artifacts from cargo into +stage0-sysroot/lib/rustlib/{target-triple}/lib

    +

    Assembling stage1 compiler

    +

    This copies the libraries we built in "building stage0 ... artifacts" into the +stage1 compiler's lib/ directory. These are the host libraries that the +compiler itself uses to run. These aren't actually used by artifacts the new +compiler generates. This step also copies the rustc and rustdoc binaries we +generated into build/$HOST/stage/bin.

    +

    The stage1/bin/rustc is a fully functional compiler built with stage0 (precompiled) compiler and std. +To use a compiler built entirely from source with the in-tree compiler and std, you need to build the +stage2 compiler, which is compiled using the stage1 (in-tree) compiler and std.

    +

    How Bootstrap does it

    +

    The core concept in Bootstrap is a build Step, which are chained together +by Builder::ensure. Builder::ensure takes a Step as input, and runs +the Step if and only if it has not already been run. Let's take a closer +look at Step.

    +

    Synopsis of Step

    +

    A Step represents a granular collection of actions involved in the process +of producing some artifact. It can be thought of like a rule in Makefiles. +The Step trait is defined as:

    +
    pub trait Step: 'static + Clone + Debug + PartialEq + Eq + Hash {
    +    type Output: Clone;
    +
    +    const DEFAULT: bool = false;
    +    const ONLY_HOSTS: bool = false;
    +
    +    // Required methods
    +    fn run(self, builder: &Builder<'_>) -> Self::Output;
    +    fn should_run(run: ShouldRun<'_>) -> ShouldRun<'_>;
    +
    +    // Provided method
    +    fn make_run(_run: RunConfig<'_>) { ... }
    +}
    +
    +
      +
    • run is the function that is responsible for doing the work. +Builder::ensure invokes run.
    • +
    • should_run is the command-line interface, which determines if an invocation +such as x build foo should run a given Step. In a "default" context +where no paths are provided, then make_run is called directly.
    • +
    • make_run is invoked only for things directly asked via the CLI and not +for steps which are dependencies of other steps.
    • +
    +

    The entry points

    +

    There's a couple of preliminary steps before core Bootstrap code is reached:

    +
      +
    1. Shell script or make: ./x or ./x.ps1 or make
    2. +
    3. Convenience wrapper script: x.py
    4. +
    5. src/bootstrap/bootstrap.py
    6. +
    7. src/bootstrap/src/bin/main.rs
    8. +
    +

    See src/bootstrap/README.md +for a more specific description of the implementation details.

    +

    Writing tools in Bootstrap

    +

    There are three types of tools you can write in bootstrap:

    +
      +
    • +

      Mode::ToolBootstrap +Use this for tools that don’t need anything from the in-tree compiler and can run with the stage0 rustc. +The output is placed in the "stage0-bootstrap-tools" directory. This mode is for general-purpose tools built +entirely with the stage0 compiler, including target libraries and only works for stage 0.

      +
    • +
    • +

      Mode::ToolStd +Use this for tools that rely on the locally built std. The output goes into the "stageN-tools" directory. +This mode is rarely used, mainly for compiletest which requires libtest.

      +
    • +
    • +

      Mode::ToolRustc +Use this for tools that depend on both the locally built rustc and the target std. This is more complex than +the other modes because the tool must be built with the same compiler used for rustc and placed in the "stageN-tools" +directory. When you choose Mode::ToolRustc, ToolBuild implementation takes care of this automatically. +If you need to use the builder’s compiler for something specific, you can get it from ToolBuildResult, which is +returned by the tool's Step.

      +
    • +
    +

    Regardless of the tool type you must return ToolBuildResult from the tool’s Step implementation and use ToolBuild inside it.

    +

    Debugging bootstrap

    +

    There are two main ways to debug bootstrap itself. The first is through println logging, and the second is through the tracing feature.

    +
    +

    FIXME: this section should be expanded

    +
    +

    println logging

    +

    Bootstrap has extensive unstructured logging. Most of it is gated behind the --verbose flag (pass -vv for even more detail).

    +

    If you want to know which Step ran a command, you could invoke bootstrap like so:

    +
    $ ./x dist rustc --dry-run -vv
    +learning about cargo
    +running: RUSTC_BOOTSTRAP="1" "/home/jyn/src/rust2/build/x86_64-unknown-linux-gnu/stage0/bin/cargo" "metadata" "--format-version" "1" "--no-deps" "--manifest-path" "/home/jyn/src/rust2/Cargo.toml" (failure_mode=Exit) (created at src/bootstrap/src/core/metadata.rs:81:25, executed at src/bootstrap/src/core/metadata.rs:92:50)
    +running: RUSTC_BOOTSTRAP="1" "/home/jyn/src/rust2/build/x86_64-unknown-linux-gnu/stage0/bin/cargo" "metadata" "--format-version" "1" "--no-deps" "--manifest-path" "/home/jyn/src/rust2/library/Cargo.toml" (failure_mode=Exit) (created at src/bootstrap/src/core/metadata.rs:81:25, executed at src/bootstrap/src/core/metadata.rs:92:50)
    +> Assemble { target_compiler: Compiler { stage: 1, host: x86_64-unknown-linux-gnu } }
    +  > Libdir { compiler: Compiler { stage: 1, host: x86_64-unknown-linux-gnu }, target: x86_64-unknown-linux-gnu }
    +    > Sysroot { compiler: Compiler { stage: 1, host: x86_64-unknown-linux-gnu }, force_recompile: false }
    +Removing sysroot /home/jyn/src/rust2/build/tmp-dry-run/x86_64-unknown-linux-gnu/stage1 to avoid caching bugs
    +    < Sysroot { compiler: Compiler { stage: 1, host: x86_64-unknown-linux-gnu }, force_recompile: false }
    +  < Libdir { compiler: Compiler { stage: 1, host: x86_64-unknown-linux-gnu }, target: x86_64-unknown-linux-gnu }
    +...
    +
    +

    This will go through all the recursive dependency calculations, where Steps internally call builder.ensure(), without actually running cargo or the compiler.

    +

    In some cases, even this may not be enough logging (if so, please add more!). In that case, you can omit --dry-run, which will show the normal output inline with the debug logging:

    +
          c Sysroot { compiler: Compiler { stage: 0, host: x86_64-unknown-linux-gnu }, force_recompile: false }
    +using sysroot /home/jyn/src/rust2/build/x86_64-unknown-linux-gnu/stage0-sysroot
    +Building stage0 library artifacts (x86_64-unknown-linux-gnu)
    +running: cd "/home/jyn/src/rust2" && env ... RUSTC_VERBOSE="2" RUSTC_WRAPPER="/home/jyn/src/rust2/build/bootstrap/debug/rustc" "/home/jyn/src/rust2/build/x86_64-unknown-linux-gnu/stage0/bin/cargo" "build" "--target" "x86_64-unknown-linux-gnu" "-Zbinary-dep-depinfo" "-Zroot-dir=/home/jyn/src/rust2" "-v" "-v" "--manifest-path" "/home/jyn/src/rust2/library/sysroot/Cargo.toml" "--message-format" "json-render-diagnostics"
    +   0.293440230s  INFO prepare_target{force=false package_id=sysroot v0.0.0 (/home/jyn/src/rust2/library/sysroot) target="sysroot"}: cargo::core::compiler::fingerprint: fingerprint error for sysroot v0.0.0 (/home/jyn/src/rust2/library/sysroot)/Build/TargetInner { name_inferred: true, ..: lib_target("sysroot", ["lib"], "/home/jyn/src/rust2/library/sysroot/src/lib.rs", Edition2021) }
    +...
    +
    +

    In most cases this should not be necessary.

    +

    TODO: we should convert all this to structured logging so it's easier to control precisely.

    +

    tracing in bootstrap

    +

    Bootstrap has conditional tracing setup to provide structured logging.

    +

    Enabling tracing output

    +

    Bootstrap will conditionally build tracing support and enable tracing output if the BOOTSTRAP_TRACING env var is set.

    +

    Basic usage

    +

    Example basic usage1:

    +
    $ BOOTSTRAP_TRACING=bootstrap=TRACE ./x build library --stage 1
    +
    +

    Example output2:

    +
    $ BOOTSTRAP_TRACING=bootstrap=TRACE ./x check src/bootstrap/
    +Building bootstrap
    +   Compiling bootstrap v0.0.0 (/home/joe/repos/rust/src/bootstrap)
    +    Finished `dev` profile [unoptimized] target(s) in 2.74s
    + DEBUG bootstrap parsing flags
    + bootstrap::core::config::flags::Flags::parse args=["check", "src/bootstrap/"]
    + DEBUG bootstrap parsing config based on flags
    + DEBUG bootstrap creating new build based on config
    + bootstrap::Build::build
    +  TRACE bootstrap setting up job management
    +  TRACE bootstrap downloading rustfmt early
    +   bootstrap::handling hardcoded subcommands (Format, Suggest, Perf)
    +    DEBUG bootstrap not a hardcoded subcommand; returning to normal handling, cmd=Check { all_targets: false }
    +  DEBUG bootstrap handling subcommand normally
    +   bootstrap::executing real run
    +     bootstrap::(1) executing dry-run sanity-check
    +     bootstrap::(2) executing actual run
    +Checking stage0 library artifacts (x86_64-unknown-linux-gnu)
    +    Finished `release` profile [optimized + debuginfo] target(s) in 0.04s
    +Checking stage0 compiler artifacts {rustc-main, rustc_abi, rustc_arena, rustc_ast, rustc_ast_ir, rustc_ast_lowering, rustc_ast_passes, rustc_ast_pretty, rustc_attr_data_structures, rustc_attr_parsing, rustc_baked_icu_data, rustc_borrowck, rustc_builtin_macros, rustc_codegen_llvm, rustc_codegen_ssa, rustc_const_eval, rustc_data_structures, rustc_driver, rustc_driver_impl, rustc_error_codes, rustc_error_messages, rustc_errors, rustc_expand, rustc_feature, rustc_fluent_macro, rustc_fs_util, rustc_graphviz, rustc_hir, rustc_hir_analysis, rustc_hir_pretty, rustc_hir_typeck, rustc_incremental, rustc_index, rustc_index_macros, rustc_infer, rustc_interface, rustc_lexer, rustc_lint, rustc_lint_defs, rustc_llvm, rustc_log, rustc_macros, rustc_metadata, rustc_middle, rustc_mir_build, rustc_mir_dataflow, rustc_mir_transform, rustc_monomorphize, rustc_next_trait_solver, rustc_parse, rustc_parse_format, rustc_passes, rustc_pattern_analysis, rustc_privacy, rustc_query_impl, rustc_query_system, rustc_resolve, rustc_sanitizers, rustc_serialize, rustc_session, rustc_smir, rustc_span, rustc_symbol_mangling, rustc_target, rustc_trait_selection, rustc_traits, rustc_transmute, rustc_ty_utils, rustc_type_ir, rustc_type_ir_macros, stable_mir} (x86_64-unknown-linux-gnu)
    +    Finished `release` profile [optimized + debuginfo] target(s) in 0.23s
    +Checking stage0 bootstrap artifacts (x86_64-unknown-linux-gnu)
    +    Checking bootstrap v0.0.0 (/home/joe/repos/rust/src/bootstrap)
    +    Finished `release` profile [optimized + debuginfo] target(s) in 0.64s
    +  DEBUG bootstrap checking for postponed test failures from `test  --no-fail-fast`
    +Build completed successfully in 0:00:08
    +
    +

    Controlling tracing output

    +

    The env var BOOTSTRAP_TRACING accepts a tracing env-filter.

    +

    There are two orthogonal ways to control which kind of tracing logs you want:

    +
      +
    1. You can specify the log level, e.g. DEBUG or TRACE.
    2. +
    3. You can also control the log target, e.g. bootstrap or bootstrap::core::config vs custom targets like CONFIG_HANDLING. +
        +
      • Custom targets are used to limit what is output when BOOTSTRAP_TRACING=bootstrap=TRACE is used, as they can be too verbose even for TRACE level by default. Currently used custom targets: +
          +
        • CONFIG_HANDLING
        • +
        +
      • +
      +
    4. +
    +

    The TRACE filter will enable all trace level or less verbose level tracing output.

    +

    You can of course combine them (custom target logs are typically gated behind TRACE log level additionally):

    +
    $ BOOTSTRAP_TRACING=CONFIG_HANDLING=TRACE ./x build library --stage 1
    +
    +
    FIXME(#96176): specific tracing for compiler() vs compiler_for()
    +

    The additional targets COMPILER and COMPILER_FOR are used to help trace what +builder.compiler() and builder.compiler_for() does. They should be removed +if #96176 is resolved.

    +

    Using tracing in bootstrap

    +

    Both tracing::* macros and the tracing::instrument proc-macro attribute need to be gated behind tracing feature. Examples:

    +
    #[cfg(feature = "tracing")]
    +use tracing::instrument;
    +
    +struct Foo;
    +
    +impl Step for Foo {
    +    type Output = ();
    +
    +    #[cfg_attr(feature = "tracing", instrument(level = "trace", name = "Foo::should_run", skip_all))]
    +    fn should_run(run: ShouldRun<'_>) -> ShouldRun<'_> {
    +        trace!(?run, "entered Foo::should_run");
    +
    +        todo!()
    +    }
    +
    +    #[cfg_attr(
    +        feature = "tracing",
    +        instrument(
    +            level = "trace",
    +            name = "Foo::run",
    +            skip_all,
    +            fields(compiler = ?builder.compiler),
    +        ),
    +    )]
    +    fn run(self, builder: &Builder<'_>) -> Self::Output {
    +        trace!(?run, "entered Foo::run");
    +
    +        todo!()
    +    }    
    +}
    +
    +

    For #[instrument], it's recommended to:

    +
      +
    • Gate it behind trace level for fine-granularity, possibly debug level for core functions.
    • +
    • Explicitly pick an instrumentation name via name = ".." to distinguish between e.g. run of different steps.
    • +
    • Take care to not cause diverging behavior via tracing, e.g. building extra things only when tracing infra is enabled.
    • +
    +

    Profiling bootstrap

    +

    You can use the COMMAND tracing target to trace execution of most commands spawned by bootstrap. If you also use the BOOTSTRAP_PROFILE=1 environment variable, bootstrap will generate a Chrome JSON trace file, which can be visualized in Chrome's chrome://tracing page or on https://ui.perfetto.dev.

    +
    $ BOOTSTRAP_TRACING=COMMAND=trace BOOTSTRAP_PROFILE=1 ./x build library
    +
    +

    rust-analyzer integration?

    +

    Unfortunately, because bootstrap is a rust-analyzer.linkedProjects, you can't ask r-a to check/build bootstrap itself with tracing feature enabled to get relevant completions, due to lack of support as described in https://github.com/rust-lang/rust-analyzer/issues/8521.

    +
    +
    1. +

      It is not recommended to use just BOOTSTRAP_TRACING=TRACE because that will dump everything at TRACE level, including logs intentionally gated behind custom targets as they are too verbose even for TRACE level by default.

      +
    2. +
    3. +

      This output is always subject to further changes.

      +
    4. +

    cfg(bootstrap) in compiler dependencies

    +

    The rust compiler uses some external crates that can run into cyclic dependencies with the compiler itself: the compiler needs an updated crate to build, but the crate needs an updated compiler. This page describes how #[cfg(bootstrap)] can be used to break this cycle.

    +

    Enabling #[cfg(bootstrap)]

    +

    Usually the use of #[cfg(bootstrap)] in an external crate causes a warning:

    +
    warning: unexpected `cfg` condition name: `bootstrap`
    + --> src/main.rs:1:7
    +  |
    +1 | #[cfg(bootstrap)]
    +  |       ^^^^^^^^^
    +  |
    +  = help: expected names are: `docsrs`, `feature`, and `test` and 31 more
    +  = help: consider using a Cargo feature instead
    +  = help: or consider adding in `Cargo.toml` the `check-cfg` lint config for the lint:
    +           [lints.rust]
    +           unexpected_cfgs = { level = "warn", check-cfg = ['cfg(bootstrap)'] }
    +  = help: or consider adding `println!("cargo::rustc-check-cfg=cfg(bootstrap)");` to the top of the `build.rs`
    +  = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
    +  = note: `#[warn(unexpected_cfgs)]` on by default
    +
    +

    This warning can be silenced by adding these lines to the project's Cargo.toml:

    +
    [lints.rust]
    +unexpected_cfgs = { level = "warn", check-cfg = ['cfg(bootstrap)'] }
    +
    +

    Now #[cfg(bootstrap)] can be used in the crate just like it can be in the compiler: when the bootstrap compiler is used, code annotated with #[cfg(bootstrap)] is compiled, otherwise code annotated with #[cfg(not(bootstrap))] is compiled.

    +

    The update dance

    +

    As a concrete example we'll use a change where the #[naked] attribute was made into an unsafe attribute, which caused a cyclic dependency with the compiler-builtins crate.

    +

    Step 1: accept the new behavior in the compiler (#139797)

    +

    In this example it is possible to accept both the old and new behavior at the same time by disabling an error.

    +

    Step 2: update the crate (#821)

    +

    Now in the crate, use #[cfg(bootstrap)] to use the old behavior, or #[cfg(not(bootstrap))] to use the new behavior.

    +

    Step 3: update the crate version used by the compiler (#139934)

    +

    For compiler-builtins this meant a version bump, in other cases it may be a git submodule update.

    +

    Step 4: remove the old behavior from the compiler (#139753)

    +

    The updated crate can now be used. In this example that meant that the old behavior could be removed.

    +

    High-Level Compiler Architecture

    +

    The remaining parts of this guide discuss how the compiler works. They go +through everything from high-level structure of the compiler to how each stage +of compilation works. They should be friendly to both readers interested in the +end-to-end process of compilation and readers interested in learning about a +specific system they wish to contribute to. If anything is unclear, feel free +to file an issue on the rustc-dev-guide +repo or contact the compiler +team, as detailed in this chapter from Part 1.

    +

    In this part, we will look at the high-level architecture of the compiler. In +particular, we will look at three overarching design choices that impact the +whole compiler: the query system, incremental compilation, and interning.

    +

    Overview of the compiler

    + +

    This chapter is about the overall process of compiling a program -- how +everything fits together.

    +

    The Rust compiler is special in two ways: it does things to your code that +other compilers don't do (e.g. borrow-checking) and it has a lot of +unconventional implementation choices (e.g. queries). We will talk about these +in turn in this chapter, and in the rest of the guide, we will look at the +individual pieces in more detail.

    +

    What the compiler does to your code

    +

    So first, let's look at what the compiler does to your code. For now, we will +avoid mentioning how the compiler implements these steps except as needed.

    +

    Invocation

    +

    Compilation begins when a user writes a Rust source program in text and invokes +the rustc compiler on it. The work that the compiler needs to perform is +defined by command-line options. For example, it is possible to enable nightly +features (-Z flags), perform check-only builds, or emit the LLVM +Intermediate Representation (LLVM-IR) rather than executable machine code. +The rustc executable call may be indirect through the use of cargo.

    +

    Command line argument parsing occurs in the rustc_driver. This crate +defines the compile configuration that is requested by the user and passes it +to the rest of the compilation process as a rustc_interface::Config.

    +

    Lexing and parsing

    +

    The raw Rust source text is analyzed by a low-level lexer located in +rustc_lexer. At this stage, the source text is turned into a stream of +atomic source code units known as tokens. The lexer supports the +Unicode character encoding.

    +

    The token stream passes through a higher-level lexer located in +rustc_parse to prepare for the next stage of the compile process. The +Lexer struct is used at this stage to perform a set of validations +and turn strings into interned symbols (interning is discussed later). +String interning is a way of storing only one immutable +copy of each distinct string value.

    +

    The lexer has a small interface and doesn't depend directly on the diagnostic +infrastructure in rustc. Instead it provides diagnostics as plain data which +are emitted in rustc_parse::lexer as real diagnostics. The lexer +preserves full fidelity information for both IDEs and procedural macros +(sometimes referred to as "proc-macros").

    +

    The parser translates the token stream from the lexer into an Abstract Syntax +Tree (AST). It uses a recursive descent (top-down) approach to syntax +analysis. The crate entry points for the parser are the +Parser::parse_crate_mod() and Parser::parse_mod() +methods found in rustc_parse::parser::Parser. The external module parsing +entry point is rustc_expand::module::parse_external_mod. +And the macro-parser entry point is Parser::parse_nonterminal().

    +

    Parsing is performed with a set of parser utility methods including bump, +check, eat, expect, look_ahead.

    +

    Parsing is organized by semantic construct. Separate +parse_* methods can be found in the rustc_parse +directory. The source file name follows the construct name. For example, the +following files are found in the parser:

    + +

    This naming scheme is used across many compiler stages. You will find either a +file or directory with the same name across the parsing, lowering, type +checking, Typed High-level Intermediate Representation (THIR) lowering, and +Mid-level Intermediate Representation (MIR) building sources.

    +

    Macro-expansion, AST-validation, name-resolution, and early linting also take +place during the lexing and parsing stage.

    +

    The rustc_ast::ast::{Crate, Expr, Pat, ...} AST nodes are +returned from the parser while the standard Diag API is used +for error handling. Generally Rust's compiler will try to recover from errors +by parsing a superset of Rust's grammar, while also emitting an error type.

    +

    AST lowering

    +

    Next the AST is converted into High-Level Intermediate Representation +(HIR), a more compiler-friendly representation of the AST. This process +is called "lowering" and involves a lot of desugaring (the expansion and +formalizing of shortened or abbreviated syntax constructs) of things like loops +and async fn.

    +

    We then use the HIR to do type inference (the process of automatic +detection of the type of an expression), trait solving (the process of +pairing up an impl with each reference to a trait), and type checking. Type +checking is the process of converting the types found in the HIR (hir::Ty), +which represent what the user wrote, into the internal representation used by +the compiler (Ty<'tcx>). It's called type checking because the information +is used to verify the type safety, correctness and coherence of the types used +in the program.

    +

    MIR lowering

    +

    The HIR is further lowered to MIR +(used for borrow checking) by constructing the THIR (an even more desugared HIR used for +pattern and exhaustiveness checking) to convert into MIR.

    +

    We do many optimizations on the MIR because it is generic and that +improves later code generation and compilation speed. It is easier to do some +optimizations at MIR level than at LLVM-IR level. For example LLVM doesn't seem +to be able to optimize the pattern the simplify_try MIR-opt looks for.

    +

    Rust code is also monomorphized during code generation, which means making +copies of all the generic code with the type parameters replaced by concrete +types. To do this, we need to collect a list of what concrete types to generate +code for. This is called monomorphization collection and it happens at the +MIR level.

    +

    Code generation

    +

    We then begin what is simply called code generation or codegen. The code +generation stage is when higher-level representations of source are +turned into an executable binary. Since rustc uses LLVM for code generation, +the first step is to convert the MIR to LLVM-IR. This is where the MIR is +actually monomorphized. The LLVM-IR is passed to LLVM, which does a lot more +optimizations on it, emitting machine code which is basically assembly code +with additional low-level types and annotations added (e.g. an ELF object or +WASM). The different libraries/binaries are then linked together to produce +the final binary.

    +

    How it does it

    +

    Now that we have a high-level view of what the compiler does to your code, +let's take a high-level view of how it does all that stuff. There are a lot +of constraints and conflicting goals that the compiler needs to +satisfy/optimize for. For example,

    +
      +
    • Compilation speed: how fast is it to compile a program? More/better +compile-time analyses often means compilation is slower. +
        +
      • Also, we want to support incremental compilation, so we need to take that +into account. How can we keep track of what work needs to be redone and +what can be reused if the user modifies their program? +
          +
        • Also we can't store too much stuff in the incremental cache because +it would take a long time to load from disk and it could take a lot +of space on the user's system...
        • +
        +
      • +
      +
    • +
    • Compiler memory usage: while compiling a program, we don't want to use more +memory than we need.
    • +
    • Program speed: how fast is your compiled program? More/better compile-time +analyses often means the compiler can do better optimizations.
    • +
    • Program size: how large is the compiled binary? Similar to the previous +point.
    • +
    • Compiler compilation speed: how long does it take to compile the compiler? +This impacts contributors and compiler maintenance.
    • +
    • Implementation complexity: building a compiler is one of the hardest +things a person/group can do, and Rust is not a very simple language, so how +do we make the compiler's code base manageable?
    • +
    • Compiler correctness: the binaries produced by the compiler should do what +the input programs says they do, and should continue to do so despite the +tremendous amount of change constantly going on.
    • +
    • Integration: a number of other tools need to use the compiler in +various ways (e.g. cargo, clippy, MIRI) that must be supported.
    • +
    • Compiler stability: the compiler should not crash or fail ungracefully on the +stable channel.
    • +
    • Rust stability: the compiler must respect Rust's stability guarantees by not +breaking programs that previously compiled despite the many changes that are +always going on to its implementation.
    • +
    • Limitations of other tools: rustc uses LLVM in its backend, and LLVM has some +strengths we leverage and some aspects we need to work around.
    • +
    +

    So, as you continue your journey through the rest of the guide, keep these +things in mind. They will often inform decisions that we make.

    +

    Intermediate representations

    +

    As with most compilers, rustc uses some intermediate representations (IRs) to +facilitate computations. In general, working directly with the source code is +extremely inconvenient and error-prone. Source code is designed to be human-friendly while at +the same time being unambiguous, but it's less convenient for doing something +like, say, type checking.

    +

    Instead most compilers, including rustc, build some sort of IR out of the +source code which is easier to analyze. rustc has a few IRs, each optimized +for different purposes:

    +
      +
    • Token stream: the lexer produces a stream of tokens directly from the source +code. This stream of tokens is easier for the parser to deal with than raw +text.
    • +
    • Abstract Syntax Tree (AST): the abstract syntax tree is built from the stream +of tokens produced by the lexer. It represents +pretty much exactly what the user wrote. It helps to do some syntactic sanity +checking (e.g. checking that a type is expected where the user wrote one).
    • +
    • High-level IR (HIR): This is a sort of desugared AST. It's still close +to what the user wrote syntactically, but it includes some implicit things +such as some elided lifetimes, etc. This IR is amenable to type checking.
    • +
    • Typed HIR (THIR) formerly High-level Abstract IR (HAIR): This is an +intermediate between HIR and MIR. It is like the HIR but it is fully typed +and a bit more desugared (e.g. method calls and implicit dereferences are +made fully explicit). As a result, it is easier to lower to MIR from THIR than +from HIR.
    • +
    • Middle-level IR (MIR): This IR is basically a Control-Flow Graph (CFG). A CFG +is a type of diagram that shows the basic blocks of a program and how control +flow can go between them. Likewise, MIR also has a bunch of basic blocks with +simple typed statements inside them (e.g. assignment, simple computations, +etc) and control flow edges to other basic blocks (e.g., calls, dropping +values). MIR is used for borrow checking and other +important dataflow-based checks, such as checking for uninitialized values. +It is also used for a series of optimizations and for constant evaluation (via +MIRI). Because MIR is still generic, we can do a lot of analyses here more +efficiently than after monomorphization.
    • +
    • LLVM-IR: This is the standard form of all input to the LLVM compiler. LLVM-IR +is a sort of typed assembly language with lots of annotations. It's +a standard format that is used by all compilers that use LLVM (e.g. the clang +C compiler also outputs LLVM-IR). LLVM-IR is designed to be easy for other +compilers to emit and also rich enough for LLVM to run a bunch of +optimizations on it.
    • +
    +

    One other thing to note is that many values in the compiler are interned. +This is a performance and memory optimization in which we allocate the values in +a special allocator called an +arena. Then, we pass +around references to the values allocated in the arena. This allows us to make +sure that identical values (e.g. types in your program) are only allocated once +and can be compared cheaply by comparing pointers. Many of the intermediate +representations are interned.

    +

    Queries

    +

    The first big implementation choice is Rust's use of the query system in its +compiler. The Rust compiler is not organized as a series of passes over the +code which execute sequentially. The Rust compiler does this to make +incremental compilation possible -- that is, if the user makes a change to +their program and recompiles, we want to do as little redundant work as +possible to output the new binary.

    +

    In rustc, all the major steps above are organized as a bunch of queries that +call each other. For example, there is a query to ask for the type of something +and another to ask for the optimized MIR of a function. These queries can call +each other and are all tracked through the query system. The results of the +queries are cached on disk so that the compiler can tell which queries' results +changed from the last compilation and only redo those. This is how incremental +compilation works.

    +

    In principle, for the query-fied steps, we do each of the above for each item +individually. For example, we will take the HIR for a function and use queries +to ask for the LLVM-IR for that HIR. This drives the generation of optimized +MIR, which drives the borrow checker, which drives the generation of MIR, and +so on.

    +

    ... except that this is very over-simplified. In fact, some queries are not +cached on disk, and some parts of the compiler have to run for all code anyway +for correctness even if the code is dead code (e.g. the borrow checker). For +example, currently the mir_borrowck query is first executed on all functions +of a crate. Then the codegen backend invokes the +collect_and_partition_mono_items query, which first recursively requests the +optimized_mir for all reachable functions, which in turn runs mir_borrowck +for that function and then creates codegen units. This kind of split will need +to remain to ensure that unreachable functions still have their errors emitted.

    +

    Moreover, the compiler wasn't originally built to use a query system; the query +system has been retrofitted into the compiler, so parts of it are not query-fied +yet. Also, LLVM isn't our code, so that isn't querified either. The plan is to +eventually query-fy all of the steps listed in the previous section, +but as of November 2022, only the steps between HIR and +LLVM-IR are query-fied. That is, lexing, parsing, name resolution, and macro +expansion are done all at once for the whole program.

    +

    One other thing to mention here is the all-important "typing context", +TyCtxt, which is a giant struct that is at the center of all things. +(Note that the name is mostly historic. This is not a "typing context" in the +sense of Γ or Δ from type theory. The name is retained because that's what +the name of the struct is in the source code.) All +queries are defined as methods on the TyCtxt type, and the in-memory query +cache is stored there too. In the code, there is usually a variable called +tcx which is a handle on the typing context. You will also see lifetimes with +the name 'tcx, which means that something is tied to the lifetime of the +TyCtxt (usually it is stored or interned there).

    +

    ty::Ty

    +

    Types are really important in Rust, and they form the core of a lot of compiler +analyses. The main type (in the compiler) that represents types (in the user's +program) is rustc_middle::ty::Ty. This is so important that we have a whole chapter +on ty::Ty, but for now, we just want to mention that it exists and is the way +rustc represents types!

    +

    Also note that the rustc_middle::ty module defines the TyCtxt struct we mentioned before.

    +

    Parallelism

    +

    Compiler performance is a problem that we would like to improve on +(and are always working on). One aspect of that is parallelizing +rustc itself.

    +

    Currently, there is only one part of rustc that is parallel by default: +code generation.

    +

    However, the rest of the compiler is still not yet parallel. There have been +lots of efforts spent on this, but it is generally a hard problem. The current +approach is to turn RefCells into Mutexs -- that is, we +switch to thread-safe internal mutability. However, there are ongoing +challenges with lock contention, maintaining query-system invariants under +concurrency, and the complexity of the code base. One can try out the current +work by enabling parallel compilation in bootstrap.toml. It's still early days, +but there are already some promising performance improvements.

    +

    Bootstrapping

    +

    rustc itself is written in Rust. So how do we compile the compiler? We use an +older compiler to compile the newer compiler. This is called bootstrapping.

    +

    Bootstrapping has a lot of interesting implications. For example, it means +that one of the major users of Rust is the Rust compiler, so we are +constantly testing our own software ("eating our own dogfood").

    +

    For more details on bootstrapping, see +the bootstrapping section of the guide.

    + +

    References

    + +

    High-level overview of the compiler source

    + +

    Now that we have seen what the compiler does, +let's take a look at the structure of the rust-lang/rust repository, +where the rustc source code lives.

    +
    +

    You may find it helpful to read the "Overview of the compiler" +chapter, which introduces how the compiler works, before this one.

    +
    +

    Workspace structure

    +

    The rust-lang/rust repository consists of a single large cargo workspace +containing the compiler, the standard libraries (core, alloc, std, +proc_macro, etc), and rustdoc, along with the build system and a +bunch of tools and submodules for building a full Rust distribution.

    +

    The repository consists of three main directories:

    + +

    Compiler

    +

    The compiler is implemented in the various compiler/ crates. +The compiler/ crates all have names starting with rustc_*. These are a +collection of around 50 interdependent crates ranging in size from tiny to +huge. There is also the rustc crate which is the actual binary (i.e. the +main function); it doesn't actually do anything besides calling the +rustc_driver crate, which drives the various parts of compilation in other +crates.

    +

    The dependency order of these crates is complex, but roughly it is +something like this:

    +
      +
    1. rustc (the binary) calls rustc_driver::main.
    2. +
    3. rustc_driver depends on a lot of other crates, but the main one is +rustc_interface.
    4. +
    5. rustc_interface depends on most of the other compiler crates. It is a +fairly generic interface for driving the whole compilation.
    6. +
    7. Most of the other rustc_* crates depend on rustc_middle, which defines +a lot of central data structures in the compiler.
    8. +
    9. rustc_middle and most of the other crates depend on a handful of crates +representing the early parts of the compiler (e.g. the parser), fundamental +data structures (e.g. Span), or error reporting: +rustc_data_structures, rustc_span, rustc_errors, etc.
    10. +
    +

    You can see the exact dependencies by running cargo tree, +just like you would for any other Rust package:

    +
    cargo tree --package rustc_driver
    +
    +

    One final thing: src/llvm-project is a submodule for our fork of LLVM. +During bootstrapping, LLVM is built and the compiler/rustc_llvm crate +contains Rust wrappers around LLVM (which is written in C++), so that the +compiler can interface with it.

    +

    Most of this book is about the compiler, so we won't have any further +explanation of these crates here.

    +

    Big picture

    +

    The dependency structure of the compiler is influenced by two main factors:

    +
      +
    1. Organization. The compiler is a huge codebase; it would be an impossibly +large crate. In part, the dependency structure reflects the code structure +of the compiler.
    2. +
    3. Compile-time. By breaking the compiler into multiple crates, we can take +better advantage of incremental/parallel compilation using cargo. In +particular, we try to have as few dependencies between crates as possible so +that we don't have to rebuild as many crates if you change one.
    4. +
    +

    At the very bottom of the dependency tree are a handful of crates that are used +by the whole compiler (e.g. rustc_span). The very early parts of the +compilation process (e.g. parsing and the Abstract Syntax Tree (AST)) +depend on only these.

    +

    After the AST is constructed and other early analysis is done, the +compiler's query system gets set up. The query system is set up in a +clever way using function pointers. This allows us to break dependencies +between crates, allowing more parallel compilation. The query system is defined +in rustc_middle, so nearly all subsequent parts of the compiler depend on +this crate. It is a really large crate, leading to long compile times. Some +efforts have been made to move stuff out of it with varying success. Another +side-effect is that sometimes related functionality gets scattered across +different crates. For example, linting functionality is found across earlier +parts of the crate, rustc_lint, rustc_middle, and other places.

    +

    Ideally there would be fewer, more cohesive crates, with incremental and +parallel compilation making sure compile times stay reasonable. However, +incremental and parallel compilation haven't gotten good enough for that yet, +so breaking things into separate crates has been our solution so far.

    +

    At the top of the dependency tree is rustc_driver and rustc_interface +which is an unstable wrapper around the query system helping drive various +stages of compilation. Other consumers of the compiler may use this interface +in different ways (e.g. rustdoc or maybe eventually rust-analyzer). The +rustc_driver crate first parses command line arguments and then uses +rustc_interface to drive the compilation to completion.

    +

    rustdoc

    +

    The bulk of rustdoc is in librustdoc. However, the rustdoc binary +itself is src/tools/rustdoc, which does nothing except call rustdoc::main.

    +

    There is also JavaScript and CSS for the docs in src/tools/rustdoc-js +and src/tools/rustdoc-themes.

    +

    You can read more about rustdoc in this chapter.

    +

    Tests

    +

    The test suite for all of the above is in tests/. You can read more +about the test suite in this chapter.

    +

    The test harness is in src/tools/compiletest/.

    +

    Build System

    +

    There are a number of tools in the repository just for building the compiler, +standard library, rustdoc, etc, along with testing, building a full Rust +distribution, etc.

    +

    One of the primary tools is src/bootstrap/. You can read more about +bootstrapping in this chapter. The process may also use other tools +from src/tools/, such as tidy/ or compiletest/.

    +

    Standard library

    +

    This code is fairly similar to most other Rust crates except that it must be +built in a special way because it can use unstable (nightly) features. +The standard library is sometimes referred to as libstd or the "standard facade".

    +

    Other

    +

    There are a lot of other things in the rust-lang/rust repo that are related +to building a full Rust distribution. Most of the time you don't need to worry about them.

    +

    These include:

    +
      +
    • src/ci: The CI configuration. This actually quite extensive because we +run a lot of tests on a lot of platforms.
    • +
    • src/doc: Various documentation, including submodules for a few books.
    • +
    • src/etc: Miscellaneous utilities.
    • +
    • And more...
    • +
    +

    Queries: demand-driven compilation

    + +

    As described in Overview of the compiler, the Rust compiler +is still (as of July 2021) transitioning from a +traditional "pass-based" setup to a "demand-driven" system. The compiler query +system is the key to rustc's demand-driven organization. +The idea is pretty simple. Instead of entirely independent passes +(parsing, type-checking, etc.), a set of function-like queries +compute information about the input source. For example, +there is a query called type_of that, given the DefId of +some item, will compute the type of that item and return it to you.

    +

    Query execution is memoized. The first time you invoke a +query, it will go do the computation, but the next time, the result is +returned from a hashtable. Moreover, query execution fits nicely into +incremental computation; the idea is roughly that, when you invoke a +query, the result may be returned to you by loading stored data +from disk.1

    +

    Eventually, we want the entire compiler +control-flow to be query driven. There will effectively be one +top-level query (compile) that will run compilation on a crate; this +will in turn demand information about that crate, starting from the +end. For example:

    +
      +
    • The compile query might demand to get a list of codegen-units +(i.e. modules that need to be compiled by LLVM).
    • +
    • But computing the list of codegen-units would invoke some subquery +that returns the list of all modules defined in the Rust source.
    • +
    • That query in turn would invoke something asking for the HIR.
    • +
    • This keeps going further and further back until we wind up doing the +actual parsing.
    • +
    +

    Although this vision is not fully realized, large sections of the +compiler (for example, generating MIR) currently work exactly like this.

    +

    Invoking queries

    +

    Invoking a query is simple. The TyCtxt ("type context") struct offers a method +for each defined query. For example, to invoke the type_of +query, you would just do this:

    +
    let ty = tcx.type_of(some_def_id);
    +

    How the compiler executes a query

    +

    So you may be wondering what happens when you invoke a query +method. The answer is that, for each query, the compiler maintains a +cache – if your query has already been executed, then, the answer is +simple: we clone the return value out of the cache and return it +(therefore, you should try to ensure that the return types of queries +are cheaply cloneable; insert an Rc if necessary).

    +

    Providers

    +

    If, however, the query is not in the cache, then the compiler will +call the corresponding provider function. A provider is a function +implemented in a specific module and manually registered into the +Providers struct during compiler initialization. +The macro system generates the Providers struct, +which acts as a function table for all query implementations, where each +field is a function pointer to the actual provider.

    +

    Note: The Providers struct is generated by macros and acts as a function table for all query implementations. +It is not a Rust trait, but a plain struct with function pointer fields.

    +

    Providers are defined per-crate. The compiler maintains, +internally, a table of providers for every crate, at least +conceptually. Right now, there are really two sets: the providers for +queries about the local crate (that is, the one being compiled) +and providers for queries about external crates (that is, +dependencies of the local crate). Note that what determines the crate +that a query is targeting is not the kind of query, but the key. +For example, when you invoke tcx.type_of(def_id), that could be a +local query or an external query, depending on what crate the def_id +is referring to (see the self::keys::Key trait for more +information on how that works).

    +

    Providers always have the same signature:

    +
    fn provider<'tcx>(
    +    tcx: TyCtxt<'tcx>,
    +    key: QUERY_KEY,
    +) -> QUERY_RESULT {
    +    ...
    +}
    +

    Providers take two arguments: the tcx and the query key. +They return the result of the query.

    +

    N.B. Most of the rustc_* crates only provide local +providers. Almost all extern providers wind up going through the +rustc_metadata crate, which loads the information +from the crate metadata. But in some cases there are crates that +provide queries for both local and external crates, in which case +they define both a provide and a provide_extern function, through +wasm_import_module_map, that rustc_driver can invoke.

    +

    How providers are set up

    +

    When the tcx is created, it is given the providers by its creator using +the Providers struct. This struct is generated by +the macros here, but it is basically a big list of function pointers:

    +
    struct Providers {
    +    type_of: for<'tcx> fn(TyCtxt<'tcx>, DefId) -> Ty<'tcx>,
    +    // ... one field for each query
    +}
    +

    How are providers registered?

    +

    The Providers struct is filled in during compiler initialization, mainly by the rustc_driver crate.
    +But the actual provider functions are implemented in various rustc_* crates (like rustc_middle, rustc_hir_analysis, etc).

    +

    To register providers, each crate exposes a provide function that looks like this:

    +
    pub fn provide(providers: &mut Providers) {
    +    *providers = Providers {
    +        type_of,
    +        // ... add more providers here
    +        ..*providers
    +    };
    +}
    +
      +
    • This function takes a mutable reference to the Providers struct and sets the fields to point to the correct provider functions.
    • +
    • You can also assign fields individually, e.g. providers.type_of = type_of;.
    • +
    +

    Adding a new provider

    +

    Suppose you want to add a new query called fubar. You would:

    +
      +
    1. Implement the provider function: +
      fn fubar<'tcx>(tcx: TyCtxt<'tcx>, key: DefId) -> Fubar<'tcx> { ... }
      +
    2. +
    3. Register it in the provide function: +
      pub fn provide(providers: &mut Providers) {
      +    *providers = Providers {
      +        fubar,
      +        ..*providers
      +    };
      +}
      +
    4. +
    +
    +

    Adding a new query

    +

    How do you add a new query? +Defining a query takes place in two steps:

    +
      +
    1. Declare the query name, its arguments and description.
    2. +
    3. Supply query providers where needed.
    4. +
    +

    To declare the query name and arguments, you simply add an entry to +the big macro invocation in compiler/rustc_middle/src/query/mod.rs. +Then you need to add a documentation comment to it with some internal description. +Then, provide the desc attribute which contains a user-facing description of the query. +The desc attribute is shown to the user in query cycles.

    +

    This looks something like:

    +
    rustc_queries! {
    +    /// Records the type of every item.
    +    query type_of(key: DefId) -> Ty<'tcx> {
    +        cache_on_disk_if { key.is_local() }
    +        desc { |tcx| "computing the type of `{}`", tcx.def_path_str(key) }
    +    }
    +    ...
    +}
    +

    A query definition has the following form:

    +
    query type_of(key: DefId) -> Ty<'tcx> { ... }
    +^^^^^ ^^^^^^^      ^^^^^     ^^^^^^^^   ^^^
    +|     |            |         |          |
    +|     |            |         |          query modifiers
    +|     |            |         result type
    +|     |            query key type
    +|     name of query
    +query keyword
    +

    Let's go over these elements one by one:

    +
      +
    • Query keyword: indicates a start of a query definition.
    • +
    • Name of query: the name of the query method +(tcx.type_of(..)). Also used as the name of a struct +(ty::queries::type_of) that will be generated to represent +this query.
    • +
    • Query key type: the type of the argument to this query. +This type must implement the ty::query::keys::Key trait, which +defines (for example) how to map it to a crate, and so forth.
    • +
    • Result type of query: the type produced by this query. This type +should (a) not use RefCell or other interior mutability and (b) be +cheaply cloneable. Interning or using Rc or Arc is recommended for +non-trivial data types.2
    • +
    • Query modifiers: various flags and options that customize how the +query is processed (mostly with respect to incremental compilation).
    • +
    +

    So, to add a query:

    +
      +
    • Add an entry to rustc_queries! using the format above.
    • +
    • Link the provider by modifying the appropriate provide method; +or add a new one if needed and ensure that rustc_driver is invoking it.
    • +
    + +

    Related design ideas, and tracking issues:

    + +

    More discussion and issues:

    + +
    +
    1. +

      The Incremental compilation in detail chapter gives a more +in-depth description of what queries are and how they work. +If you intend to write a query of your own, this is a good read.

      +
    2. +
    3. +

      The one exception to those rules is the ty::steal::Steal type, +which is used to cheaply modify MIR in place. See the definition +of Steal for more details. New uses of Steal should not be +added without alerting @rust-lang/compiler.

      +
    4. +

    The Query Evaluation Model in detail

    + +

    This chapter provides a deeper dive into the abstract model queries are built on. +It does not go into implementation details but tries to explain +the underlying logic. The examples here, therefore, have been stripped down and +simplified and don't directly reflect the compilers internal APIs.

    +

    What is a query?

    +

    Abstractly we view the compiler's knowledge about a given crate as a "database" +and queries are the way of asking the compiler questions about it, i.e. +we "query" the compiler's "database" for facts.

    +

    However, there's something special to this compiler database: It starts out empty +and is filled on-demand when queries are executed. Consequently, a query must +know how to compute its result if the database does not contain it yet. For +doing so, it can access other queries and certain input values that the database +is pre-filled with on creation.

    +

    A query thus consists of the following things:

    +
      +
    • A name that identifies the query
    • +
    • A "key" that specifies what we want to look up
    • +
    • A result type that specifies what kind of result it yields
    • +
    • A "provider" which is a function that specifies how the result is to be +computed if it isn't already present in the database.
    • +
    +

    As an example, the name of the type_of query is type_of, its query key is a +DefId identifying the item we want to know the type of, the result type is +Ty<'tcx>, and the provider is a function that, given the query key and access +to the rest of the database, can compute the type of the item identified by the +key.

    +

    So in some sense a query is just a function that maps the query key to the +corresponding result. However, we have to apply some restrictions in order for +this to be sound:

    +
      +
    • The key and result must be immutable values.
    • +
    • The provider function must be a pure function in the sense that for the same +key it must always yield the same result.
    • +
    • The only parameters a provider function takes are the key and a reference to +the "query context" (which provides access to the rest of the "database").
    • +
    +

    The database is built up lazily by invoking queries. The query providers will +invoke other queries, for which the result is either already cached or computed +by calling another query provider. These query provider invocations +conceptually form a directed acyclic graph (DAG) at the leaves of which are +input values that are already known when the query context is created.

    +

    Caching/Memoization

    +

    Results of query invocations are "memoized" which means that the query context +will cache the result in an internal table and, when the query is invoked with +the same query key again, will return the result from the cache instead of +running the provider again.

    +

    This caching is crucial for making the query engine efficient. Without +memoization the system would still be sound (that is, it would yield the same +results) but the same computations would be done over and over again.

    +

    Memoization is one of the main reasons why query providers have to be pure +functions. If calling a provider function could yield different results for +each invocation (because it accesses some global mutable state) then we could +not memoize the result.

    +

    Input data

    +

    When the query context is created, it is still empty: No queries have been +executed, no results are cached. But the context already provides access to +"input" data, i.e. pieces of immutable data that were computed before the +context was created and that queries can access to do their computations.

    +

    As of January 2021, this input data consists mainly of +the HIR map, upstream crate metadata, and the command-line options the compiler +was invoked with; but in the future inputs will just consist of command-line +options and a list of source files -- the HIR map will itself be provided by a +query which processes these source files.

    +

    Without inputs, queries would live in a void without anything to compute their +result from (remember, query providers only have access to other queries and +the context but not any other outside state or information).

    +

    For a query provider, input data and results of other queries look exactly the +same: It just tells the context "give me the value of X". Because input data +is immutable, the provider can rely on it being the same across +different query invocations, just as is the case for query results.

    +

    An example execution trace of some queries

    +

    How does this DAG of query invocations come into existence? At some point +the compiler driver will create the, as yet empty, query context. It will then, +from outside of the query system, invoke the queries it needs to perform its +task. This looks something like the following:

    +
    fn compile_crate() {
    +    let cli_options = ...;
    +    let hir_map = ...;
    +
    +    // Create the query context `tcx`
    +    let tcx = TyCtxt::new(cli_options, hir_map);
    +
    +    // Do type checking by invoking the type check query
    +    tcx.type_check_crate();
    +}
    +

    The type_check_crate query provider would look something like the following:

    +
    fn type_check_crate_provider(tcx, _key: ()) {
    +    let list_of_hir_items = tcx.hir_map.list_of_items();
    +
    +    for item_def_id in list_of_hir_items {
    +        tcx.type_check_item(item_def_id);
    +    }
    +}
    +

    We see that the type_check_crate query accesses input data +(tcx.hir_map.list_of_items()) and invokes other queries +(type_check_item). The type_check_item +invocations will themselves access input data and/or invoke other queries, +so that in the end the DAG of query invocations will be built up backwards +from the node that was initially executed:

    +
             (2)                                                 (1)
    +  list_of_all_hir_items <----------------------------- type_check_crate()
    +                                                               |
    +    (5)             (4)                  (3)                   |
    +  Hir(foo) <--- type_of(foo) <--- type_check_item(foo) <-------+
    +                                      |                        |
    +                    +-----------------+                        |
    +                    |                                          |
    +    (7)             v  (6)                  (8)                |
    +  Hir(bar) <--- type_of(bar) <--- type_check_item(bar) <-------+
    +
    +// (x) denotes invocation order
    +
    +

    We also see that often a query result can be read from the cache: +type_of(bar) was computed for type_check_item(foo) so when +type_check_item(bar) needs it, it is already in the cache.

    +

    Query results stay cached in the query context as long as the context lives. +So if the compiler driver invoked another query later on, the above graph +would still exist and already executed queries would not have to be re-done.

    +

    Cycles

    +

    Earlier we stated that query invocations form a DAG. However, it would be easy +to form a cyclic graph by, for example, having a query provider like the +following:

    +
    fn cyclic_query_provider(tcx, key) -> u32 {
    +  // Invoke the same query with the same key again
    +  tcx.cyclic_query(key)
    +}
    +

    Since query providers are regular functions, this would behave much as expected: +Evaluation would get stuck in an infinite recursion. A query like this would not +be very useful either. However, sometimes certain kinds of invalid user input +can result in queries being called in a cyclic way. The query engine includes +a check for cyclic invocations of queries with the same input arguments. +And, because cycles are an irrecoverable error, will abort execution with a +"cycle error" message that tries to be human readable.

    +

    At some point the compiler had a notion of "cycle recovery", that is, one could +"try" to execute a query and if it ended up causing a cycle, proceed in some +other fashion. However, this was later removed because it is not entirely +clear what the theoretical consequences of this are, especially regarding +incremental compilation.

    +

    "Steal" Queries

    +

    Some queries have their result wrapped in a Steal<T> struct. These queries +behave exactly the same as regular with one exception: Their result is expected +to be "stolen" out of the cache at some point, meaning some other part of the +program is taking ownership of it and the result cannot be accessed anymore.

    +

    This stealing mechanism exists purely as a performance optimization because some +result values are too costly to clone (e.g. the MIR of a function). It seems +like result stealing would violate the condition that query results must be +immutable (after all we are moving the result value out of the cache) but it is +OK as long as the mutation is not observable. This is achieved by two things:

    +
      +
    • Before a result is stolen, we make sure to eagerly run all queries that +might ever need to read that result. This has to be done manually by calling +those queries.
    • +
    • Whenever a query tries to access a stolen result, we make an ICE +(Internal Compiler Error) so that such a condition cannot go unnoticed.
    • +
    +

    This is not an ideal setup because of the manual intervention needed, so it +should be used sparingly and only when it is well known which queries might +access a given result. In practice, however, stealing has not turned out to be +much of a maintenance burden.

    +

    To summarize: "Steal queries" break some of the rules in a controlled way. +There are checks in place that make sure that nothing can go silently wrong.

    +

    Incremental compilation

    + +

    The incremental compilation scheme is, in essence, a surprisingly +simple extension to the overall query system. We'll start by describing +a slightly simplified variant of the real thing – the "basic algorithm" – +and then describe some possible improvements.

    +

    The basic algorithm

    +

    The basic algorithm is +called the red-green algorithm1. The high-level idea is +that, after each run of the compiler, we will save the results of all +the queries that we do, as well as the query DAG. The +query DAG is a DAG that indexes which queries executed which +other queries. So, for example, there would be an edge from a query Q1 +to another query Q2 if computing Q1 required computing Q2 (note that +because queries cannot depend on themselves, this results in a DAG and +not a general graph).

    +
    +

    NOTE: You might think of a query as simply the definition of a query. +A thing that you can invoke, a bit like a function, +and which either returns a cached result or actually executes the code.

    +

    If that's the way you think about queries, +it's good to know that in the following text, queries will be said to have colours. +Keep in mind though, that here the word query also refers to a certain invocation of +the query for a certain input. As you will read later, queries are fingerprinted based +on their arguments. The result of a query might change when we give it one argument +and be coloured red, while it stays the same for another argument and is thus green.

    +

    In short, the word query is here not just used to mean the definition of a query, +but also for a specific instance of that query with given arguments.

    +
    +

    On the next run of the compiler, then, we can sometimes reuse these +query results to avoid re-executing a query. We do this by assigning +every query a color:

    +
      +
    • If a query is colored red, that means that its result during +this compilation has changed from the previous compilation.
    • +
    • If a query is colored green, that means that its result is +the same as the previous compilation.
    • +
    +

    There are two key insights here:

    +
      +
    • First, if all the inputs to query Q are colored green, then the +query Q must result in the same value as last time and hence +need not be re-executed (or else the compiler is not deterministic).
    • +
    • Second, even if some inputs to a query changes, it may be that it +still produces the same result as the previous compilation. In +particular, the query may only use part of its input. +
        +
      • Therefore, after executing a query, we always check whether it +produced the same result as the previous time. If it did, we +can still mark the query as green, and hence avoid re-executing +dependent queries.
      • +
      +
    • +
    +

    The try-mark-green algorithm

    +

    At the core of incremental compilation is an algorithm called +"try-mark-green". It has the job of determining the color of a given +query Q (which must not have yet been executed). In cases where Q has +red inputs, determining Q's color may involve re-executing Q so that +we can compare its output, but if all of Q's inputs are green, then we +can conclude that Q must be green without re-executing it or inspecting +its value at all. In the compiler, this allows us to avoid +deserializing the result from disk when we don't need it, and in fact +enables us to sometimes skip serializing the result as well +(see the refinements section below).

    +

    Try-mark-green works as follows:

    +
      +
    • First check if the query Q was executed during the previous compilation. +
        +
      • If not, we can just re-execute the query as normal, and assign it the +color of red.
      • +
      +
    • +
    • If yes, then load the 'dependent queries' of Q.
    • +
    • If there is a saved result, then we load the reads(Q) vector from the +query DAG. The "reads" is the set of queries that Q executed during +its execution. +
        +
      • For each query R in reads(Q), we recursively demand the color +of R using try-mark-green. +
          +
        • Note: it is important that we visit each node in reads(Q) in same order +as they occurred in the original compilation. See the section on the +query DAG below.
        • +
        • If any of the nodes in reads(Q) wind up colored red, then Q is +dirty. +
            +
          • We re-execute Q and compare the hash of its result to the hash of the +result from the previous compilation.
          • +
          • If the hash has not changed, we can mark Q as green and return.
          • +
          +
        • +
        • Otherwise, all of the nodes in reads(Q) must be green. In that +case, we can color Q as green and return.
        • +
        +
      • +
      +
    • +
    +

    +

    The query DAG

    +

    The query DAG code is stored in +compiler/rustc_middle/src/dep_graph. Construction of the DAG is done +by instrumenting the query execution.

    +

    One key point is that the query DAG also tracks ordering; that is, for +each query Q, we not only track the queries that Q reads, we track the +order in which they were read. This allows try-mark-green to walk +those queries back in the same order. This is important because once a +subquery comes back as red, we can no longer be sure that Q will continue +along the same path as before. That is, imagine a query like this:

    +
    fn main_query(tcx) {
    +    if tcx.subquery1() {
    +        tcx.subquery2()
    +    } else {
    +        tcx.subquery3()
    +    }
    +}
    +

    Now imagine that in the first compilation, main_query starts by +executing subquery1, and this returns true. In that case, the next +query main_query executes will be subquery2, and subquery3 will +not be executed at all.

    +

    But now imagine that in the next compilation, the input has +changed such that subquery1 returns false. In this case, subquery2 +would never execute. If try-mark-green were to visit reads(main_query) out +of order, however, it might visit subquery2 before subquery1, and hence +execute it. +This can lead to ICEs and other problems in the compiler.

    +

    Improvements to the basic algorithm

    +

    In the description of the basic algorithm, we said that at the end of +compilation we would save the results of all the queries that were +performed. In practice, this can be quite wasteful – many of those +results are very cheap to recompute, and serializing and deserializing +them is not a particular win. In practice, what we would do is to save +the hashes of all the subqueries that we performed. Then, in select cases, +we also save the results.

    +

    This is why the incremental algorithm separates computing the +color of a node, which often does not require its value, from +computing the result of a node. Computing the result is done via a simple +algorithm like so:

    +
      +
    • Check if a saved result for Q is available. If so, compute the color of Q. +If Q is green, deserialize and return the saved result.
    • +
    • Otherwise, execute Q. +
        +
      • We can then compare the hash of the result and color Q as green if +it did not change.
      • +
      +
    • +
    +

    Resources

    +

    The initial design document can be found here, which expands +on the memoization details, provides more high-level overview and motivation +for this system.

    +

    Footnotes

    +
    +
    1. +

      I have long wanted to rename it to the Salsa algorithm, but it never caught on. -@nikomatsakis

      +
    2. +

    Incremental compilation in detail

    + +

    The incremental compilation scheme is, in essence, a surprisingly +simple extension to the overall query system. It relies on the fact that:

    +
      +
    1. queries are pure functions -- given the same inputs, a query will always +yield the same result, and
    2. +
    3. the query model structures compilation in an acyclic graph that makes +dependencies between individual computations explicit.
    4. +
    +

    This chapter will explain how we can use these properties for making things +incremental and then goes on to discuss version implementation issues.

    +

    A Basic Algorithm For Incremental Query Evaluation

    +

    As explained in the query evaluation model primer, query +invocations form a directed-acyclic graph. Here's the example from the +previous chapter again:

    +
      list_of_all_hir_items <----------------------------- type_check_crate()
    +                                                               |
    +                                                               |
    +  Hir(foo) <--- type_of(foo) <--- type_check_item(foo) <-------+
    +                                      |                        |
    +                    +-----------------+                        |
    +                    |                                          |
    +                    v                                          |
    +  Hir(bar) <--- type_of(bar) <--- type_check_item(bar) <-------+
    +
    +

    Since every access from one query to another has to go through the query +context, we can record these accesses and thus actually build this dependency +graph in memory. With dependency tracking enabled, when compilation is done, +we know which queries were invoked (the nodes of the graph) and for each +invocation, which other queries or input has gone into computing the query's +result (the edges of the graph).

    +

    Now suppose we change the source code of our program so that +HIR of bar looks different than before. Our goal is to only recompute +those queries that are actually affected by the change while re-using +the cached results of all the other queries. Given the dependency graph we can +do exactly that. For a given query invocation, the graph tells us exactly +what data has gone into computing its results, we just have to follow the +edges until we reach something that has changed. If we don't encounter +anything that has changed, we know that the query still would evaluate to +the same result we already have in our cache.

    +

    Taking the type_of(foo) invocation from above as an example, we can check +whether the cached result is still valid by following the edges to its +inputs. The only edge leads to Hir(foo), an input that has not been affected +by the change. So we know that the cached result for type_of(foo) is still +valid.

    +

    The story is a bit different for type_check_item(foo): We again walk the +edges and already know that type_of(foo) is fine. Then we get to +type_of(bar) which we have not checked yet, so we walk the edges of +type_of(bar) and encounter Hir(bar) which has changed. Consequently +the result of type_of(bar) might yield a different result than what we +have in the cache and, transitively, the result of type_check_item(foo) +might have changed too. We thus re-run type_check_item(foo), which in +turn will re-run type_of(bar), which will yield an up-to-date result +because it reads the up-to-date version of Hir(bar). Also, we re-run +type_check_item(bar) because result of type_of(bar) might have changed.

    +

    The problem with the basic algorithm: false positives

    +

    If you read the previous paragraph carefully you'll notice that it says that +type_of(bar) might have changed because one of its inputs has changed. +There's also the possibility that it might still yield exactly the same +result even though its input has changed. Consider an example with a +simple query that just computes the sign of an integer:

    +
      IntValue(x) <---- sign_of(x) <--- some_other_query(x)
    +
    +

    Let's say that IntValue(x) starts out as 1000 and then is set to 2000. +Even though IntValue(x) is different in the two cases, sign_of(x) yields +the result + in both cases.

    +

    If we follow the basic algorithm, however, some_other_query(x) would have to +(unnecessarily) be re-evaluated because it transitively depends on a changed +input. Change detection yields a "false positive" in this case because it has +to conservatively assume that some_other_query(x) might be affected by that +changed input.

    +

    Unfortunately it turns out that the actual queries in the compiler are full +of examples like this and small changes to the input often potentially affect +very large parts of the output binaries. As a consequence, we had to make the +change detection system smarter and more accurate.

    +

    Improving accuracy: the red-green algorithm

    +

    The "false positives" problem can be solved by interleaving change detection +and query re-evaluation. Instead of walking the graph all the way to the +inputs when trying to find out if some cached result is still valid, we can +check if a result has actually changed after we were forced to re-evaluate +it.

    +

    We call this algorithm the red-green algorithm because nodes +in the dependency graph are assigned the color green if we were able to prove +that its cached result is still valid and the color red if the result has +turned out to be different after re-evaluating it.

    +

    The meat of red-green change tracking is implemented in the try-mark-green +algorithm, that, you've guessed it, tries to mark a given node as green:

    +
    fn try_mark_green(tcx, current_node) -> bool {
    +
    +    // Fetch the inputs to `current_node`, i.e. get the nodes that the direct
    +    // edges from `node` lead to.
    +    let dependencies = tcx.dep_graph.get_dependencies_of(current_node);
    +
    +    // Now check all the inputs for changes
    +    for dependency in dependencies {
    +
    +        match tcx.dep_graph.get_node_color(dependency) {
    +            Green => {
    +                // This input has already been checked before and it has not
    +                // changed; so we can go on to check the next one
    +            }
    +            Red => {
    +                // We found an input that has changed. We cannot mark
    +                // `current_node` as green without re-running the
    +                // corresponding query.
    +                return false
    +            }
    +            Unknown => {
    +                // This is the first time we look at this node. Let's try
    +                // to mark it green by calling try_mark_green() recursively.
    +                if try_mark_green(tcx, dependency) {
    +                    // We successfully marked the input as green, on to the
    +                    // next.
    +                } else {
    +                    // We could *not* mark the input as green. This means we
    +                    // don't know if its value has changed. In order to find
    +                    // out, we re-run the corresponding query now!
    +                    tcx.run_query_for(dependency);
    +
    +                    // Fetch and check the node color again. Running the query
    +                    // has forced it to either red (if it yielded a different
    +                    // result than we have in the cache) or green (if it
    +                    // yielded the same result).
    +                    match tcx.dep_graph.get_node_color(dependency) {
    +                        Red => {
    +                            // The input turned out to be red, so we cannot
    +                            // mark `current_node` as green.
    +                            return false
    +                        }
    +                        Green => {
    +                            // Re-running the query paid off! The result is the
    +                            // same as before, so this particular input does
    +                            // not invalidate `current_node`.
    +                        }
    +                        Unknown => {
    +                            // There is no way a node has no color after
    +                            // re-running the query.
    +                            panic!("unreachable")
    +                        }
    +                    }
    +                }
    +            }
    +        }
    +    }
    +
    +    // If we have gotten through the entire loop, it means that all inputs
    +    // have turned out to be green. If all inputs are unchanged, it means
    +    // that the query result corresponding to `current_node` cannot have
    +    // changed either.
    +    tcx.dep_graph.mark_green(current_node);
    +
    +    true
    +}
    +
    +

    NOTE: +The actual implementation can be found in +compiler/rustc_query_system/src/dep_graph/graph.rs

    +
    +

    By using red-green marking we can avoid the devastating cumulative effect of +having false positives during change detection. Whenever a query is executed +in incremental mode, we first check if its already green. If not, we run +try_mark_green() on it. If it still isn't green after that, then we actually +invoke the query provider to re-compute the result. Re-computing the query might +then itself involve recursively invoking more queries, which can mean we come back +to the try_mark_green() algorithm for the dependencies recursively.

    +

    The real world: how persistence makes everything complicated

    +

    The sections above described the underlying algorithm for incremental +compilation but because the compiler process exits after being finished and +takes the query context with its result cache with it into oblivion, we have to +persist data to disk, so the next compilation session can make use of it. +This comes with a whole new set of implementation challenges:

    +
      +
    • The query result cache is stored to disk, so they are not readily available +for change comparison.
    • +
    • A subsequent compilation session will start off with new version of the code +that has arbitrary changes applied to it. All kinds of IDs and indices that +are generated from a global, sequential counter (e.g. NodeId, DefId, etc) +might have shifted, making the persisted results on disk not immediately +usable anymore because the same numeric IDs and indices might refer to +completely new things in the new compilation session.
    • +
    • Persisting things to disk comes at a cost, so not every tiny piece of +information should be actually cached in between compilation sessions. +Fixed-sized, plain-old-data is preferred to complex things that need to run +through an expensive (de-)serialization step.
    • +
    +

    The following sections describe how the compiler solves these issues.

    +

    A Question Of Stability: Bridging The Gap Between Compilation Sessions

    +

    As noted before, various IDs (like DefId) are generated by the compiler in a +way that depends on the contents of the source code being compiled. ID assignment +is usually deterministic, that is, if the exact same code is compiled twice, +the same things will end up with the same IDs. However, if something +changes, e.g. a function is added in the middle of a file, there is no +guarantee that anything will have the same ID as it had before.

    +

    As a consequence we cannot represent the data in our on-disk cache the same +way it is represented in memory. For example, if we just stored a piece +of type information like TyKind::FnDef(DefId, &'tcx Substs<'tcx>) (as we do +in memory) and then the contained DefId points to a different function in +a new compilation session we'd be in trouble.

    +

    The solution to this problem is to find "stable" forms for IDs which remain +valid in between compilation sessions. For the most important case, DefIds, +these are the so-called DefPaths. Each DefId has a +corresponding DefPath but in place of a numeric ID, a DefPath is based on +the path to the identified item, e.g. std::collections::HashMap. The +advantage of an ID like this is that it is not affected by unrelated changes. +For example, one can add a new function to std::collections but +std::collections::HashMap would still be std::collections::HashMap. A +DefPath is "stable" across changes made to the source code while a DefId +isn't.

    +

    There is also the DefPathHash which is just a 128-bit hash value of the +DefPath. The two contain the same information and we mostly use the +DefPathHash because it simpler to handle, being Copy and self-contained.

    +

    This principle of stable identifiers is used to make the data in the on-disk +cache resilient to source code changes. Instead of storing a DefId, we store +the DefPathHash and when we deserialize something from the cache, we map the +DefPathHash to the corresponding DefId in the current compilation session +(which is just a simple hash table lookup).

    +

    The HirId, used for identifying HIR components that don't have their own +DefId, is another such stable ID. It is (conceptually) a pair of a DefPath +and a LocalId, where the LocalId identifies something (e.g. a hir::Expr) +locally within its "owner" (e.g. a hir::Item). If the owner is moved around, +the LocalIds within it are still the same.

    +

    Checking query results for changes: HashStable and Fingerprints

    +

    In order to do red-green-marking we often need to check if the result of a +query has changed compared to the result it had during the previous +compilation session. There are two performance problems with this though:

    +
      +
    • We'd like to avoid having to load the previous result from disk just for +doing the comparison. We already computed the new result and will use that. +Also loading a result from disk will "pollute" the interners with data that +is unlikely to ever be used.
    • +
    • We don't want to store each and every result in the on-disk cache. For +example, it would be wasted effort to persist things to disk that are +already available in upstream crates.
    • +
    +

    The compiler avoids these problems by using so-called Fingerprints. Each time +a new query result is computed, the query engine will compute a 128 bit hash +value of the result. We call this hash value "the Fingerprint of the query +result". The hashing is (and has to be) done "in a stable way". This means +that whenever something is hashed that might change in between compilation +sessions (e.g. a DefId), we instead hash its stable equivalent +(e.g. the corresponding DefPath). That's what the whole HashStable +infrastructure is for. This way Fingerprints computed in two +different compilation sessions are still comparable.

    +

    The next step is to store these fingerprints along with the dependency graph. +This is cheap since fingerprints are just bytes to be copied. It's also cheap to +load the entire set of fingerprints together with the dependency graph.

    +

    Now, when red-green-marking reaches the point where it needs to check if a +result has changed, it can just compare the (already loaded) previous +fingerprint to the fingerprint of the new result.

    +

    This approach works rather well but it's not without flaws:

    +
      +
    • +

      There is a small possibility of hash collisions. That is, two different +results could have the same fingerprint and the system would erroneously +assume that the result hasn't changed, leading to a missed update.

      +

      We mitigate this risk by using a high-quality hash function and a 128 bit +wide hash value. Due to these measures the practical risk of a hash +collision is negligible.

      +
    • +
    • +

      Computing fingerprints is quite costly. It is the main reason why incremental +compilation can be slower than non-incremental compilation. We are forced to +use a good and thus expensive hash function, and we have to map things to +their stable equivalents while doing the hashing.

      +
    • +
    +

    A tale of two DepGraphs: the old and the new

    +

    The initial description of dependency tracking glosses over a few details +that quickly become a head scratcher when actually trying to implement things. +In particular it's easy to overlook that we are actually dealing with two +dependency graphs: The one we built during the previous compilation session and +the one that we are building for the current compilation session.

    +

    When a compilation session starts, the compiler loads the previous dependency +graph into memory as an immutable piece of data. Then, when a query is invoked, +it will first try to mark the corresponding node in the graph as green. This +means really that we are trying to mark the node in the previous dep-graph +as green that corresponds to the query key in the current session. How do we +do this mapping between current query key and previous DepNode? The answer +is again Fingerprints: Nodes in the dependency graph are identified by a +fingerprint of the query key. Since fingerprints are stable across compilation +sessions, computing one in the current session allows us to find a node +in the dependency graph from the previous session. If we don't find a node with +the given fingerprint, it means that the query key refers to something that +did not yet exist in the previous session.

    +

    So, having found the dep-node in the previous dependency graph, we can look +up its dependencies (i.e. also dep-nodes in the previous graph) and continue with +the rest of the try-mark-green algorithm. The next interesting thing happens +when we successfully marked the node as green. At that point we copy the node +and the edges to its dependencies from the old graph into the new graph. We +have to do this because the new dep-graph cannot acquire the +node and edges via the regular dependency tracking. The tracking system can +only record edges while actually running a query -- but running the query, +although we have the result already cached, is exactly what we want to avoid.

    +

    Once the compilation session has finished, all the unchanged parts have been +copied over from the old into the new dependency graph, while the changed parts +have been added to the new graph by the tracking system. At this point, the +new graph is serialized out to disk, alongside the query result cache, and can +act as the previous dep-graph in a subsequent compilation session.

    +

    Didn't you forget something?: cache promotion

    +

    The system described so far has a somewhat subtle property: If all inputs of a +dep-node are green then the dep-node itself can be marked as green without +computing or loading the corresponding query result. Applying this property +transitively often leads to the situation that some intermediate results are +never actually loaded from disk, as in the following example:

    +
       input(A) <-- intermediate_query(B) <-- leaf_query(C)
    +
    +

    The compiler might need the value of leaf_query(C) in order to generate some +output artifact. If it can mark leaf_query(C) as green, it will load the +result from the on-disk cache. The result of intermediate_query(B) is never +loaded though. As a consequence, when the compiler persists the new result +cache by writing all in-memory query results to disk, intermediate_query(B) +will not be in memory and thus will be missing from the new result cache.

    +

    If there subsequently is another compilation session that actually needs the +result of intermediate_query(B) it will have to be re-computed even though we +had a perfectly valid result for it in the cache just before.

    +

    In order to prevent this from happening, the compiler does something called +"cache promotion": Before emitting the new result cache it will walk all green +dep-nodes and make sure that their query result is loaded into memory. That way +the result cache doesn't unnecessarily shrink again.

    +

    Incremental compilation and the compiler backend

    +

    The compiler backend, the part involving LLVM, is using the query system but +it is not implemented in terms of queries itself. As a consequence it does not +automatically partake in dependency tracking. However, the manual integration +with the tracking system is pretty straight-forward. The compiler simply tracks +what queries get invoked when generating the initial LLVM version of each +codegen unit (CGU), which results in a dep-node for each CGU. In subsequent +compilation sessions it then tries to mark the dep-node for a CGU as green. If +it succeeds, it knows that the corresponding object and bitcode files on disk +are still valid. If it doesn't succeed, the entire CGU has to be recompiled.

    +

    This is the same approach that is used for regular queries. The main differences +are:

    +
      +
    • +

      that we cannot easily compute a fingerprint for LLVM modules (because +they are opaque C++ objects),

      +
    • +
    • +

      that the logic for dealing with cached values is rather different from +regular queries because here we have bitcode and object files instead of +serialized Rust values in the common result cache file, and

      +
    • +
    • +

      the operations around LLVM are so expensive in terms of computation time and +memory consumption that we need to have tight control over what is +executed when and what stays in memory for how long.

      +
    • +
    +

    The query system could probably be extended with general purpose mechanisms to +deal with all of the above but so far that seemed like more trouble than it +would save.

    +

    Query modifiers

    +

    The query system allows for applying modifiers to queries. These +modifiers affect certain aspects of how the system treats the query with +respect to incremental compilation:

    +
      +
    • +

      eval_always - A query with the eval_always attribute is re-executed +unconditionally during incremental compilation. I.e. the system will not +even try to mark the query's dep-node as green. This attribute has two use +cases:

      +
        +
      • +

        eval_always queries can read inputs (from files, global state, etc). +They can also produce side effects like writing to files and changing global state.

        +
      • +
      • +

        Some queries are very likely to be re-evaluated because their result +depends on the entire source code. In this case eval_always can be used +as an optimization because the system can skip recording dependencies in +the first place.

        +
      • +
      +
    • +
    • +

      no_hash - Applying no_hash to a query tells the system to not compute +the fingerprint of the query's result. This has two consequences:

      +
        +
      • +

        Not computing the fingerprint can save quite a bit of time because +fingerprinting is expensive, especially for large, complex values.

        +
      • +
      • +

        Without the fingerprint, the system has to unconditionally assume that +the result of the query has changed. As a consequence anything depending +on a no_hash query will always be re-executed.

        +
      • +
      +

      Using no_hash for a query can make sense in two circumstances:

      +
        +
      • +

        If the result of the query is very likely to change whenever one of its +inputs changes, e.g. a function like |a, b, c| -> (a * b * c). In such +a case recomputing the query will always yield a red node if one of the +inputs is red so we can spare us the trouble and default to red immediately. +A counter example would be a function like |a| -> (a == 42) where the +result does not change for most changes of a.

        +
      • +
      • +

        If the result of a query is a big, monolithic collection (e.g. index_hir) +and there are "projection queries" reading from that collection +(e.g. hir_owner). In such a case the big collection will likely fulfill the +condition above (any changed input means recomputing the whole collection) +and the results of the projection queries will be hashed anyway. If we also +hashed the collection query it would mean that we effectively hash the same +data twice: once when hashing the collection and another time when hashing all +the projection query results. no_hash allows us to avoid that redundancy +and the projection queries act as a "firewall", shielding their dependents +from the unconditionally red no_hash node.

        +
      • +
      +
    • +
    • +

      cache_on_disk_if - This attribute is what determines which query results +are persisted in the incremental compilation query result cache. The +attribute takes an expression that allows per query invocation +decisions. For example, it makes no sense to store values from upstream +crates in the cache because they are already available in the upstream +crate's metadata.

      +
    • +
    • +

      anon - This attribute makes the system use "anonymous" dep-nodes for the +given query. An anonymous dep-node is not identified by the corresponding +query key, instead its ID is computed from the IDs of its dependencies. This +allows the red-green system to do its change detection even if there is no +query key available for a given dep-node -- something which is needed for +handling trait selection because it is not based on queries.

      +
    • +
    +

    The projection query pattern

    +

    It's interesting to note that eval_always and no_hash can be used together +in the so-called "projection query" pattern. It is often the case that there is +one query that depends on the entirety of the compiler's input (e.g. the indexed HIR) +and another query that projects individual values out of this monolithic value +(e.g. a HIR item with a certain DefId). These projection queries allow for +building change propagation "firewalls" because even if the result of the +monolithic query changes (which it is very likely to do) the small projections +can still mostly be marked as green.

    +
      +------------+
    +  |            |           +---------------+           +--------+
    +  |            | <---------| projection(x) | <---------| foo(a) |
    +  |            |           +---------------+           +--------+
    +  |            |
    +  | monolithic |           +---------------+           +--------+
    +  |   query    | <---------| projection(y) | <---------| bar(b) |
    +  |            |           +---------------+           +--------+
    +  |            |
    +  |            |           +---------------+           +--------+
    +  |            | <---------| projection(z) | <---------| baz(c) |
    +  |            |           +---------------+           +--------+
    +  +------------+
    +
    +

    Let's assume that the result monolithic_query changes so that also the result +of projection(x) has changed, i.e. both their dep-nodes are being marked as +red. As a consequence foo(a) needs to be re-executed; but bar(b) and +baz(c) can be marked as green. However, if foo, bar, and baz would have +directly depended on monolithic_query then all of them would have had to be +re-evaluated.

    +

    This pattern works even without eval_always and no_hash but the two +modifiers can be used to avoid unnecessary overhead. If the monolithic query +is likely to change at any minor modification of the compiler's input it makes +sense to mark it as eval_always, thus getting rid of its dependency tracking +cost. And it always makes sense to mark the monolithic query as no_hash +because we have the projections to take care of keeping things green as much +as possible.

    +

    Shortcomings of the current system

    +

    There are many things that still can be improved.

    +

    Incrementality of on-disk data structures

    +

    The current system is not able to update on-disk caches and the dependency graph +in-place. Instead it has to rewrite each file entirely in each compilation +session. The overhead of doing so is a few percent of total compilation time.

    +

    Unnecessary data dependencies

    +

    Data structures used as query results could be factored in a way that removes +edges from the dependency graph. Especially "span" information is very volatile, +so including it in query result will increase the chance that the result won't +be reusable. See https://github.com/rust-lang/rust/issues/47389 for more +information.

    +

    Debugging and testing dependencies

    +

    Testing the dependency graph

    +

    There are various ways to write tests against the dependency graph. The +simplest mechanisms are the #[rustc_if_this_changed] and +#[rustc_then_this_would_need] annotations. These are used in ui tests to test +whether the expected set of paths exist in the dependency graph.

    +

    As an example, see tests/ui/dep-graph/dep-graph-caller-callee.rs, or the +tests below.

    +
    #[rustc_if_this_changed]
    +fn foo() { }
    +
    +#[rustc_then_this_would_need(TypeckTables)] //~ ERROR OK
    +fn bar() { foo(); }
    +

    This should be read as

    +
    +

    If this (foo) is changed, then this (i.e. bar)'s TypeckTables would need to be changed.

    +
    +

    Technically, what occurs is that the test is expected to emit the string "OK" on +stderr, associated to this line.

    +

    You could also add the lines

    +
    #[rustc_then_this_would_need(TypeckTables)] //~ ERROR no path
    +fn baz() { }
    +

    Whose meaning is

    +
    +

    If foo is changed, then baz's TypeckTables does not need to be changed. +The macro must emit an error, and the error message must contains "no path".

    +
    +

    Recall that the //~ ERROR OK is a comment from the point of view of the Rust +code we test, but is meaningful from the point of view of the test itself.

    +

    Debugging the dependency graph

    +

    Dumping the graph

    +

    The compiler is also capable of dumping the dependency graph for your +debugging pleasure. To do so, pass the -Z dump-dep-graph flag. The +graph will be dumped to dep_graph.{txt,dot} in the current +directory. You can override the filename with the RUST_DEP_GRAPH +environment variable.

    +

    Frequently, though, the full dep graph is quite overwhelming and not +particularly helpful. Therefore, the compiler also allows you to filter +the graph. You can filter in three ways:

    +
      +
    1. All edges originating in a particular set of nodes (usually a single node).
    2. +
    3. All edges reaching a particular set of nodes.
    4. +
    5. All edges that lie between given start and end nodes.
    6. +
    +

    To filter, use the RUST_DEP_GRAPH_FILTER environment variable, which should +look like one of the following:

    +
    source_filter     // nodes originating from source_filter
    +-> target_filter  // nodes that can reach target_filter
    +source_filter -> target_filter // nodes in between source_filter and target_filter
    +
    +

    source_filter and target_filter are a &-separated list of strings. +A node is considered to match a filter if all of those strings appear in its +label. So, for example:

    +
    RUST_DEP_GRAPH_FILTER='-> TypeckTables'
    +
    +

    would select the predecessors of all TypeckTables nodes. Usually though you +want the TypeckTables node for some particular fn, so you might write:

    +
    RUST_DEP_GRAPH_FILTER='-> TypeckTables & bar'
    +
    +

    This will select only the predecessors of TypeckTables nodes for functions +with bar in their name.

    +

    Perhaps you are finding that when you change foo you need to re-type-check +bar, but you don't think you should have to. In that case, you might do:

    +
    RUST_DEP_GRAPH_FILTER='Hir & foo -> TypeckTables & bar'
    +
    +

    This will dump out all the nodes that lead from Hir(foo) to +TypeckTables(bar), from which you can (hopefully) see the source +of the erroneous edge.

    +

    Tracking down incorrect edges

    +

    Sometimes, after you dump the dependency graph, you will find some +path that should not exist, but you will not be quite sure how it came +to be. When the compiler is built with debug assertions, it can +help you track that down. Simply set the RUST_FORBID_DEP_GRAPH_EDGE +environment variable to a filter. Every edge created in the dep-graph +will be tested against that filter – if it matches, a bug! is +reported, so you can easily see the backtrace (RUST_BACKTRACE=1).

    +

    The syntax for these filters is the same as described in the previous +section. However, note that this filter is applied to every edge +and doesn't handle longer paths in the graph, unlike the previous +section.

    +

    Example:

    +

    You find that there is a path from the Hir of foo to the type +check of bar and you don't think there should be. You dump the +dep-graph as described in the previous section and open dep-graph.txt +to see something like:

    +
    Hir(foo) -> Collect(bar)
    +Collect(bar) -> TypeckTables(bar)
    +
    +

    That first edge looks suspicious to you. So you set +RUST_FORBID_DEP_GRAPH_EDGE to Hir&foo -> Collect&bar, re-run, and +then observe the backtrace. Voila, bug fixed!

    +

    How Salsa works

    + +

    This chapter is based on the explanation given by Niko Matsakis in this +video about +Salsa. To find out more you may +want to watch Salsa In More +Depth, also by Niko +Matsakis.

    +
    +

    As of November 2022, although Salsa is inspired by (among +other things) rustc's query system, it is not used directly in rustc. It +is used in chalk, an implementation of Rust's trait system, and +extensively in rust-analyzer, the official implementation of the language +server protocol for Rust, but there are no medium or long-term concrete +plans to integrate it into the compiler.

    +
    +

    What is Salsa?

    +

    Salsa is a library for incremental recomputation. This means it allows reusing +computations that were already done in the past to increase the efficiency +of future computations.

    +

    The objectives of Salsa are:

    +
      +
    • Provide that functionality in an automatic way, so reusing old computations +is done automatically by the library.
    • +
    • Doing so in a "sound", or "correct", way, therefore leading to the same +results as if it had been done from scratch.
    • +
    +

    Salsa's actual model is much richer, allowing many kinds of inputs and many different outputs. +For example, integrating Salsa with an IDE could mean that +the inputs could be manifests (Cargo.toml, rust-toolchain.toml), entire +source files (foo.rs), snippets and so on. The outputs of such an integration +could range from a binary executable, to lints, types (for example, if a user +selects a certain variable and wishes to see its type), completions, etc.

    +

    How does it work?

    +

    The first thing that Salsa has to do is identify the "base inputs" that +are not something computed but given as input.

    +

    Then Salsa has to also identify intermediate, "derived" values, which are +something that the library produces, but, for each derived value there's a +"pure" function that computes the derived value.

    +

    For example, there might be a function ast(x: Path) -> AST. The produced +Abstract Syntax Tree (AST) isn't a final value, it's an intermediate value +that the library would use for the computation.

    +

    This means that when you try to compute with the library, Salsa is going to +compute various derived values, and eventually read the input and produce the +result for the asked computation.

    +

    In the course of computing, Salsa tracks which inputs were accessed and which +values are derived. This information is used to determine what's going to +happen when the inputs change: are the derived values still valid?

    +

    This doesn't necessarily mean that each computation downstream from the input +is going to be checked, which could be costly. Salsa only needs to check each +downstream computation until it finds one that isn't changed. At that point, it +won't check other derived computations since they wouldn't need to change.

    +

    It's helpful to think about this as a graph with nodes. Each derived value +has a dependency on other values, which could themselves be either base or +derived. Base values don't have a dependency.

    +
    I <- A <- C ...
    +          |
    +J <- B <--+
    +
    +

    When an input I changes, the derived value A could change. The derived +value B, which does not depend on I, A, or any value derived from A or +I, is not subject to change. Therefore, Salsa can reuse the computation done +for B in the past, without having to compute it again.

    +

    The computation could also terminate early. Keeping the same graph as before, +say that input I has changed in some way (and input J hasn't), but when +computing A again, it's found that A hasn't changed from the previous +computation. This leads to an "early termination", because there's no need to +check if C needs to change, since both C direct inputs, A and B, +haven't changed.

    +

    Key Salsa concepts

    +

    Query

    +

    A query is some value that Salsa can access in the course of computation. Each +query can have a number of keys (from 0 to many), and all queries have a +result, akin to functions. 0-key queries are called "input" queries.

    +

    Database

    +

    The database is basically the context for the entire computation, it's meant to +store Salsa's internal state, all intermediate values for each query, and +anything else that the computation might need. The database must know all the +queries the library is going to do before it can be built, but they don't need +to be specified in the same place.

    +

    After the database is formed, it can be accessed with queries that are very +similar to functions. Since each query's result is stored in the database, when +a query is invoked N-times, it will return N-cloned results, without having +to recompute the query (unless the input has changed in such a way that it +warrants recomputation).

    +

    For each input query (0-key), a "set" method is generated, allowing the user to +change the output of such query, and trigger previous memoized values to be +potentially invalidated.

    +

    Query Groups

    +

    A query group is a set of queries which have been defined together as a unit. +The database is formed by combining query groups. Query groups are akin to +"Salsa modules".

    +

    A set of queries in a query group are just a set of methods in a trait.

    +

    To create a query group a trait annotated with a specific attribute +(#[salsa::query_group(...)]) has to be created.

    +

    An argument must also be provided to said attribute as it will be used by Salsa +to create a struct to be used later when the database is created.

    +

    Example input query group:

    +
    /// This attribute will process this tree, produce this tree as output, and produce
    +/// a bunch of intermediate stuff that Salsa also uses. One of these things is a
    +/// "StorageStruct", whose name we have specified in the attribute.
    +///
    +/// This query group is a bunch of **input** queries, that do not rely on any
    +/// derived input.
    +#[salsa::query_group(InputsStorage)]
    +pub trait Inputs {
    +    /// This attribute (`#[salsa::input]`) indicates that this query is a base
    +    /// input, therefore `set_manifest` is going to be auto-generated
    +    #[salsa::input]
    +    fn manifest(&self) -> Manifest;
    +
    +    #[salsa::input]
    +    fn source_text(&self, name: String) -> String;
    +}
    +

    To create a derived query group, one must specify which other query groups +this one depends on by specifying them as supertraits, as seen in the following +example:

    +
    /// This query group is going to contain queries that depend on derived values.
    +/// A query group can access another query group's queries by specifying the
    +/// dependency as a supertrait. Query groups can be stacked as much as needed using
    +/// that pattern.
    +#[salsa::query_group(ParserStorage)]
    +pub trait Parser: Inputs {
    +    /// This query `ast` is not an input query, it's a derived query this means
    +    /// that a definition is necessary.
    +    fn ast(&self, name: String) -> String;
    +}
    +

    When creating a derived query the implementation of said query must be defined +outside the trait. The definition must take a database parameter as an impl Trait (or dyn Trait), where trait is the query group that the definition +belongs to, in addition to the other keys.

    +
    /// This is going to be the definition of the `ast` query in the `Parser` trait.
    +/// So, when the query `ast` is invoked, and it needs to be recomputed, Salsa is
    +/// going to call this function and it's going to give it the database as `impl
    +/// Parser`. The function doesn't need to be aware of all the queries of all the
    +/// query groups
    +fn ast(db: &impl Parser, name: String) -> String {
    +    //! Note, `impl Parser` is used here but `dyn Parser` works just as well
    +    /* code */
    +    ///By passing an `impl Parser`, this is allowed
    +    let source_text = db.input_file(name);
    +    /* do the actual parsing */
    +    return ast;
    +}
    +

    Eventually, after all the query groups have been defined, the database can be +created by declaring a struct.

    +

    To specify which query groups are going to be part of the database an attribute +(#[salsa::database(...)]) must be added. The argument of said attribute is a +list of identifiers, specifying the query groups storages.

    +
    ///This attribute specifies which query groups are going to be in the database
    +#[salsa::database(InputsStorage, ParserStorage)]
    +#[derive(Default)] //optional!
    +struct MyDatabase {
    +    ///You also need this one field
    +    runtime : salsa::Runtime<MyDatabase>,
    +}
    +///And this trait has to be implemented
    +impl salsa::Database for MyDatabase {
    +    fn salsa_runtime(&self) -> &salsa::Runtime<MyDatabase> {
    +        &self.runtime
    +    }
    +}
    +

    Example usage:

    +
    fn main() {
    +    let db = MyDatabase::default();
    +    db.set_manifest(...);
    +    db.set_source_text(...);
    +    loop {
    +        db.ast(...); //will reuse results
    +        db.set_source_text(...);
    +    }
    +}
    +

    Memory management in rustc

    +

    Generally rustc tries to be pretty careful how it manages memory. +The compiler allocates a lot of data structures throughout compilation, +and if we are not careful, it will take a lot of time and space to do so.

    +

    One of the main way the compiler manages this is using arenas and interning.

    +

    Arenas and Interning

    +

    Since A LOT of data structures are created during compilation, for performance +reasons, we allocate them from a global memory pool. +Each are allocated once from a long-lived arena. +This is called arena allocation. +This system reduces allocations/deallocations of memory. +It also allows for easy comparison of types (more on types here) for equality: +for each interned type X, we implemented PartialEq for X, +so we can just compare pointers. +The CtxtInterners type contains a bunch of maps of interned types and the arena itself.

    +

    Example: ty::TyKind

    +

    Taking the example of ty::TyKind which represents a type in the compiler (you +can read more here). Each time we want to construct a type, the +compiler doesn’t naively allocate from the buffer. Instead, we check if that +type was already constructed. If it was, we just get the same pointer we had +before, otherwise we make a fresh pointer. With this schema if we want to know +if two types are the same, all we need to do is compare the pointers which is +efficient. ty::TyKind should never be constructed on the stack, and it would be unusable +if done so. +You always allocate them from this arena and you always intern them so they are +unique.

    +

    At the beginning of the compilation we make a buffer and each time we need to allocate a type we use +some of this memory buffer. If we run out of space we get another one. The lifetime of that buffer +is 'tcx. Our types are tied to that lifetime, so when compilation finishes all the memory related +to that buffer is freed and our 'tcx references would be invalid.

    +

    In addition to types, there are a number of other arena-allocated data structures that you can +allocate, and which are found in this module. Here are a few examples:

    +
      +
    • GenericArgs, allocated with mk_args – this will intern a slice of types, often used +to specify the values to be substituted for generics args (e.g. HashMap<i32, u32> would be +represented as a slice &'tcx [tcx.types.i32, tcx.types.u32]).
    • +
    • TraitRef, typically passed by value – a trait reference consists of a reference to a trait +along with its various type parameters (including Self), like i32: Display (here, the def-id +would reference the Display trait, and the args would contain i32). Note that def-id is +defined and discussed in depth in the AdtDef and DefId section.
    • +
    • Predicate defines something the trait system has to prove (see traits module).
    • +
    +

    The tcx and how it uses lifetimes

    +

    The typing context (tcx) is the central data structure in the compiler. It is the context that +you use to perform all manner of queries. The struct TyCtxt defines a reference to this shared +context:

    +
    tcx: TyCtxt<'tcx>
    +//          ----
    +//          |
    +//          arena lifetime
    +

    As you can see, the TyCtxt type takes a lifetime parameter. When you see a reference with a +lifetime like 'tcx, you know that it refers to arena-allocated data (or data that lives as long as +the arenas, anyhow).

    +

    A Note On Lifetimes

    +

    The Rust compiler is a fairly large program containing lots of big data +structures (e.g. the Abstract Syntax Tree (AST), High-Level Intermediate +Representation (HIR), and the type system) and as such, arenas and +references are heavily relied upon to minimize unnecessary memory use. This +manifests itself in the way people can plug into the compiler (i.e. the +driver), preferring a "push"-style API (callbacks) instead +of the more Rust-ic "pull" style (think the Iterator trait).

    +

    Thread-local storage and interning are used a lot through the compiler to reduce +duplication while also preventing a lot of the ergonomic issues due to many +pervasive lifetimes. The rustc_middle::ty::tls module is used to access these +thread-locals, although you should rarely need to touch it.

    +

    Serialization in rustc

    +

    rustc has to serialize and deserialize various data during compilation. +Specifically:

    +
      +
    • "Crate metadata", consisting mainly of query outputs, are serialized +from a binary format into rlib and rmeta files that are output when +compiling a library crate. These rlib and rmeta files are then +deserialized by the crates which depend on that library.
    • +
    • Certain query outputs are serialized in a binary format to +persist incremental compilation results.
    • +
    • CrateInfo is serialized to JSON when the -Z no-link flag is used, and +deserialized from JSON when the -Z link-only flag is used.
    • +
    +

    The Encodable and Decodable traits

    +

    The rustc_serialize crate defines two traits for types which can be serialized:

    +
    pub trait Encodable<S: Encoder> {
    +    fn encode(&self, s: &mut S) -> Result<(), S::Error>;
    +}
    +
    +pub trait Decodable<D: Decoder>: Sized {
    +    fn decode(d: &mut D) -> Result<Self, D::Error>;
    +}
    +

    It also defines implementations of these for various common standard library +primitive types such as integer +types, floating point types, bool, char, str, etc.

    +

    For types that are constructed from those types, Encodable and Decodable +are usually implemented by derives. These generate implementations that +forward deserialization to the fields of the struct or enum. For a +struct those impls look something like this:

    +
    #![feature(rustc_private)]
    +extern crate rustc_serialize;
    +use rustc_serialize::{Decodable, Decoder, Encodable, Encoder};
    +
    +struct MyStruct {
    +    int: u32,
    +    float: f32,
    +}
    +
    +impl<E: Encoder> Encodable<E> for MyStruct {
    +    fn encode(&self, s: &mut E) -> Result<(), E::Error> {
    +        s.emit_struct("MyStruct", 2, |s| {
    +            s.emit_struct_field("int", 0, |s| self.int.encode(s))?;
    +            s.emit_struct_field("float", 1, |s| self.float.encode(s))
    +        })
    +    }
    +}
    +
    +impl<D: Decoder> Decodable<D> for MyStruct {
    +    fn decode(s: &mut D) -> Result<MyStruct, D::Error> {
    +        s.read_struct("MyStruct", 2, |d| {
    +            let int = d.read_struct_field("int", 0, Decodable::decode)?;
    +            let float = d.read_struct_field("float", 1, Decodable::decode)?;
    +
    +            Ok(MyStruct { int, float })
    +        })
    +    }
    +}
    +

    Encoding and Decoding arena allocated types

    +

    rustc has a lot of arena allocated types. +Deserializing these types isn't possible without access to the arena that they need to be allocated on. +The TyDecoder and TyEncoder traits are supertraits of Decoder and Encoder that allow access to a TyCtxt.

    +

    Types which contain arena allocated types can then bound the type parameter of their +Encodable and Decodable implementations with these traits. +For example

    +
    impl<'tcx, D: TyDecoder<'tcx>> Decodable<D> for MyStruct<'tcx> {
    +    /* ... */
    +}
    +

    The TyEncodable and TyDecodable derive macros will expand to such +an implementation.

    +

    Decoding the actual arena allocated type is harder, because some of the +implementations can't be written due to the orphan rules. To work around this, +the RefDecodable trait is defined in rustc_middle. This can then be +implemented for any type. The TyDecodable macro will call RefDecodable to +decode references, but various generic code needs types to actually be +Decodable with a specific decoder.

    +

    For interned types instead of manually implementing RefDecodable, using a new +type wrapper, like ty::Predicate and manually implementing Encodable and +Decodable may be simpler.

    +

    Derive macros

    +

    The rustc_macros crate defines various derives to help implement Decodable +and Encodable.

    + +

    Shorthands

    +

    Ty can be deeply recursive, if each Ty was encoded naively then crate +metadata would be very large. To handle this, each TyEncoder has a cache of +locations in its output where it has serialized types. If a type being encoded +is in the cache, then instead of serializing the type as usual, the byte offset +within the file being written is encoded instead. A similar scheme is used for +ty::Predicate.

    +

    LazyValue<T>

    +

    Crate metadata is initially loaded before the TyCtxt<'tcx> is created, so +some deserialization needs to be deferred from the initial loading of metadata. +The LazyValue<T> type wraps the (relative) offset in the crate metadata +where a T has been serialized. There are also some variants, LazyArray<T> +and LazyTable<I, T>.

    +

    The LazyArray<[T]> and LazyTable<I, T> types provide some functionality over +Lazy<Vec<T>> and Lazy<HashMap<I, T>>:

    +
      +
    • It's possible to encode a LazyArray<T> directly from an Iterator, without +first collecting into a Vec<T>.
    • +
    • Indexing into a LazyTable<I, T> does not require decoding entries other +than the one being read.
    • +
    +

    note: LazyValue<T> does not cache its value after being deserialized the +first time. Instead the query system itself is the main way of caching these +results.

    +

    Specialization

    +

    A few types, most notably DefId, need to have different implementations for +different Encoders. This is currently handled by ad-hoc specializations, for +example: DefId has a default implementation of Encodable<E> and a +specialized one for Encodable<CacheEncoder>.

    +

    Parallel compilation

    +
    +As of November 2024, +the parallel front-end is undergoing significant changes, +so this page contains quite a bit of outdated information. +

    Tracking issue: https://github.com/rust-lang/rust/issues/113349

    +
    +

    As of November 2024, most of the rust compiler is now +parallelized.

    +
      +
    • The codegen part is executed concurrently by default. You can use the -C codegen-units=n option to control the number of concurrent tasks.
    • +
    • The parts after HIR lowering to codegen such as type checking, borrowing +checking, and mir optimization are parallelized in the nightly version. +Currently, they are executed in serial by default, and parallelization is +manually enabled by the user using the -Z threads = n option.
    • +
    • Other parts, such as lexical parsing, HIR lowering, and macro expansion, are +still executed in serial mode.
    • +
    +
    +The following sections are kept for now but are quite outdated. +
    +
    +

    Code generation

    +

    During monomorphization the compiler splits up all the code to +be generated into smaller chunks called codegen units. These are then generated by +independent instances of LLVM running in parallel. At the end, the linker +is run to combine all the codegen units together into one binary. This process +occurs in the rustc_codegen_ssa::base module.

    +

    Data structures

    +

    The underlying thread-safe data-structures used in the parallel compiler +can be found in the rustc_data_structures::sync module. These data structures +are implemented differently depending on whether parallel-compiler is true.

    +
    + + + + + + + + +
    data structureparallelnon-parallel
    Lock<T>(parking_lot::Mutex<T>)(std::cell::RefCell)
    RwLock<T>(parking_lot::RwLock<T>)(std::cell::RefCell)
    MTLock<T>(Lock<T>)(T)
    ReadGuardparking_lot::RwLockReadGuardstd::cell::Ref
    MappedReadGuardparking_lot::MappedRwLockReadGuardstd::cell::Ref
    WriteGuardparking_lot::RwLockWriteGuardstd::cell::RefMut
    MappedWriteGuardparking_lot::MappedRwLockWriteGuardstd::cell::RefMut
    LockGuardparking_lot::MutexGuardstd::cell::RefMut
    +
    +
      +
    • +

      These thread-safe data structures are interspersed during compilation which +can cause lock contention resulting in degraded performance as the number of +threads increases beyond 4. So we audit the use of these data structures +which leads to either a refactoring so as to reduce the use of shared state, +or the authoring of persistent documentation covering the specific of the +invariants, the atomicity, and the lock orderings.

      +
    • +
    • +

      On the other hand, we still need to figure out what other invariants +during compilation might not hold in parallel compilation.

      +
    • +
    +

    WorkerLocal

    +

    WorkerLocal is a special data structure implemented for parallel compilers. It +holds worker-locals values for each thread in a thread pool. You can only +access the worker local value through the Deref impl on the thread pool it +was constructed on. It panics otherwise.

    +

    WorkerLocal is used to implement the Arena allocator in the parallel +environment, which is critical in parallel queries. Its implementation is +located in the rustc_data_structures::sync::worker_local module. However, +in the non-parallel compiler, it is implemented as (OneThread<T>), whose T +can be accessed directly through Deref::deref.

    +

    Parallel iterator

    +

    The parallel iterators provided by the rayon crate are easy ways to +implement parallelism. In the current implementation of the parallel compiler +we use a custom fork of rayon to run tasks in parallel.

    +

    Some iterator functions are implemented to run loops in parallel +when parallel-compiler is true.

    +
    + + + + + + + + +
    Function(Omit Send and Sync)IntroductionOwning Module
    par_iter<T: IntoParallelIterator>(t: T) -> T::Itergenerate a parallel iteratorrustc_data_structure::sync
    par_for_each_in<T: IntoParallelIterator>(t: T, for_each: impl Fn(T::Item))generate a parallel iterator and run for_each on each elementrustc_data_structure::sync
    Map::par_body_owners(self, f: impl Fn(LocalDefId))run f on all hir owners in the craterustc_middle::hir::map
    Map::par_for_each_module(self, f: impl Fn(LocalDefId))run f on all modules and sub modules in the craterustc_middle::hir::map
    ModuleItems::par_items(&self, f: impl Fn(ItemId))run f on all items in the modulerustc_middle::hir
    ModuleItems::par_trait_items(&self, f: impl Fn(TraitItemId))run f on all trait items in the modulerustc_middle::hir
    ModuleItems::par_impl_items(&self, f: impl Fn(ImplItemId))run f on all impl items in the modulerustc_middle::hir
    ModuleItems::par_foreign_items(&self, f: impl Fn(ForeignItemId))run f on all foreign items in the modulerustc_middle::hir
    +
    +

    There are a lot of loops in the compiler which can possibly be parallelized +using these functions. As of August 2022, scenarios where +the parallel iterator function has been used are as follows:

    +
    + + + + + + + + + + + + +
    callerscenariocallee
    rustc_metadata::rmeta::encoder::prefetch_mirPrefetch queries which will be needed later by metadata encodingpar_iter
    rustc_monomorphize::collector::collect_crate_mono_itemsCollect monomorphized items reachable from non-generic itemspar_for_each_in
    rustc_interface::passes::analysisCheck the validity of the match statementsMap::par_body_owners
    rustc_interface::passes::analysisMIR borrow checkMap::par_body_owners
    rustc_typeck::check::typeck_item_bodiesType checkMap::par_body_owners
    rustc_interface::passes::hir_id_validator::check_crateCheck the validity of hirMap::par_for_each_module
    rustc_interface::passes::analysisCheck the validity of loops body, attributes, naked functions, unstable abi, const bodysMap::par_for_each_module
    rustc_interface::passes::analysisLiveness and intrinsic checking of MIRMap::par_for_each_module
    rustc_interface::passes::analysisDeathness checkingMap::par_for_each_module
    rustc_interface::passes::analysisPrivacy checkingMap::par_for_each_module
    rustc_lint::late::check_crateRun per-module lintsMap::par_for_each_module
    rustc_typeck::check_crateWell-formedness checkingMap::par_for_each_module
    +
    +

    There are still many loops that have the potential to use parallel iterators.

    +

    Query system

    +

    The query model has some properties that make it actually feasible to evaluate +multiple queries in parallel without too much effort:

    +
      +
    • All data a query provider can access is via the query context, so +the query context can take care of synchronizing access.
    • +
    • Query results are required to be immutable so they can safely be used by +different threads concurrently.
    • +
    +

    When a query foo is evaluated, the cache table for foo is locked.

    +
      +
    • If there already is a result, we can clone it, release the lock and +we are done.
    • +
    • If there is no cache entry and no other active query invocation computing the +same result, we mark the key as being "in progress", release the lock and +start evaluating.
    • +
    • If there is another query invocation for the same key in progress, we +release the lock, and just block the thread until the other invocation has +computed the result we are waiting for. Cycle error detection in the parallel +compiler requires more complex logic than in single-threaded mode. When +worker threads in parallel queries stop making progress due to interdependence, +the compiler uses an extra thread (named deadlock handler) to detect, remove and +report the cycle error.
    • +
    +

    The parallel query feature still has implementation to do, most of which is +related to the previous Data Structures and Parallel Iterators. See this +open feature tracking issue.

    +

    Rustdoc

    +

    As of November 2022, there are still a number of steps to +complete before rustdoc rendering can be made parallel (see a open discussion +of parallel rustdoc).

    +

    Resources

    +

    Here are some resources that can be used to learn more:

    + +

    Rustdoc Internals

    + +

    This page describes rustdoc's passes and modes. For an overview of rustdoc, +see the "Rustdoc overview" chapter.

    +

    From Crate to Clean

    +

    In core.rs are two central items: the rustdoc::core::DocContext +struct, and the rustdoc::core::run_global_ctxt function. The latter is +where rustdoc calls out to rustc to compile a crate to the point where +rustdoc can take over. The former is a state container used when crawling +through a crate to gather its documentation.

    +

    The main process of crate crawling is done in clean/mod.rs through several +functions with names that start with clean_. Each function accepts an hir +or ty data structure, and outputs a clean structure used by rustdoc. For +example, this function for converting lifetimes:

    +
    fn clean_lifetime<'tcx>(lifetime: &hir::Lifetime, cx: &mut DocContext<'tcx>) -> Lifetime {
    +    if let Some(
    +        rbv::ResolvedArg::EarlyBound(did)
    +        | rbv::ResolvedArg::LateBound(_, _, did)
    +        | rbv::ResolvedArg::Free(_, did),
    +    ) = cx.tcx.named_bound_var(lifetime.hir_id)
    +        && let Some(lt) = cx.args.get(&did).and_then(|arg| arg.as_lt())
    +    {
    +        return lt.clone();
    +    }
    +    Lifetime(lifetime.ident.name)
    +}
    +

    Also, clean/mod.rs defines the types for the "cleaned" Abstract Syntax Tree +(AST) used later to render documentation pages. Each usually accompanies a +clean_* function that takes some AST or High-Level Intermediate +Representation (HIR) type from rustc and converts it into the +appropriate "cleaned" type. "Big" items like modules or associated items may +have some extra processing in its clean function, but for the most part these +impls are straightforward conversions. The "entry point" to this module is +clean::utils::krate, which is called by run_global_ctxt.

    +

    The first step in clean::utils::krate is to invoke +visit_ast::RustdocVisitor to process the module tree into an intermediate +visit_ast::Module. This is the step that actually crawls the +rustc_hir::Crate, normalizing various aspects of name resolution, such as:

    +
      +
    • handling #[doc(inline)] and #[doc(no_inline)]
    • +
    • handling import globs and cycles, so there are no duplicates or infinite +directory trees
    • +
    • inlining public use exports of private items, or showing a "Reexport" +line in the module page
    • +
    • inlining items with #[doc(hidden)] if the base item is hidden but the
    • +
    • showing #[macro_export]-ed macros at the crate root, regardless of whether +they're defined as a reexport or not
    • +
    +

    After this step, clean::krate invokes clean_doc_module, which actually +converts the HIR items to the cleaned AST. This is also the step where cross- +crate inlining is performed, which requires converting rustc_middle data +structures into the cleaned AST.

    +

    The other major thing that happens in clean/mod.rs is the collection of doc +comments and #[doc=""] attributes into a separate field of the Attributes +struct, present on anything that gets hand-written documentation. This makes it +easier to collect this documentation later in the process.

    +

    The primary output of this process is a clean::types::Crate with a tree of Items +which describe the publicly-documentable items in the target crate.

    +

    Passes Anything But a Gas Station (or: Hot Potato)

    +

    Before moving on to the next major step, a few important "passes" occur over +the cleaned AST. Several of these passes are lints and reports, but some of +them mutate or generate new items.

    +

    These are all implemented in the librustdoc/passes directory, one file per pass. +By default, all of these passes are run on a crate, but the ones +regarding dropping private/hidden items can be bypassed by passing +--document-private-items to rustdoc. Note that unlike the previous set of AST +transformations, the passes are run on the cleaned crate.

    +

    Here is the list of passes as of March 2023:

    +
      +
    • +

      calculate-doc-coverage calculates information used for the --show-coverage +flag.

      +
    • +
    • +

      check-doc-test-visibility runs doctest visibility–related lints. This pass +runs before strip-private, which is why it needs to be separate from +run-lints.

      +
    • +
    • +

      collect-intra-doc-links resolves intra-doc links.

      +
    • +
    • +

      collect-trait-impls collects trait impls for each item in the crate. For +example, if we define a struct that implements a trait, this pass will note +that the struct implements that trait.

      +
    • +
    • +

      propagate-doc-cfg propagates #[doc(cfg(...))] to child items.

      +
    • +
    • +

      run-lints runs some of rustdoc's lints, defined in passes/lint. This is +the last pass to run.

      +
        +
      • +

        bare_urls detects links that are not linkified, e.g., in Markdown such as +Go to https://example.com/. It suggests wrapping the link with angle brackets: +Go to <https://example.com/>. to linkify it. This is the code behind the rustdoc::bare_urls lint.

        +
      • +
      • +

        check_code_block_syntax validates syntax inside Rust code blocks +(```rust)

        +
      • +
      • +

        html_tags detects invalid HTML (like an unclosed <span>) +in doc comments.

        +
      • +
      +
    • +
    • +

      strip-hidden and strip-private strip all doc(hidden) and private items +from the output. strip-private implies strip-priv-imports. Basically, the +goal is to remove items that are not relevant for public documentation. This +pass is skipped when --document-hidden-items is passed.

      +
    • +
    • +

      strip-priv-imports strips all private import statements (use, extern crate) from a crate. This is necessary because rustdoc will handle public +imports by either inlining the item's documentation to the module or creating +a "Reexports" section with the import in it. The pass ensures that all of +these imports are actually relevant to documentation. It is technically +only run when --document-private-items is passed, but strip-private +accomplishes the same thing.

      +
    • +
    • +

      strip-private strips all private items from a crate which cannot be seen +externally. This pass is skipped when --document-private-items is passed.

      +
    • +
    +

    There is also a stripper module in librustdoc/passes, but it is a +collection of utility functions for the strip-* passes and is not a pass +itself.

    +

    From Clean To HTML

    +

    This is where the "second phase" in rustdoc begins. This phase primarily lives +in the librustdoc/formats and librustdoc/html folders, and it all starts with +formats::renderer::run_format. This code is responsible for setting up a type that +impl FormatRenderer, which for HTML is Context.

    +

    This structure contains methods that get called by run_format to drive the +doc rendering, which includes:

    +
      +
    • init generates static.files, as well as search index and src/
    • +
    • item generates the item HTML files themselves
    • +
    • after_krate generates other global resources like all.html
    • +
    +

    In item, the "page rendering" occurs, via a mixture of Askama templates +and manual write!() calls, starting in html/layout.rs. The parts that have +not been converted to templates occur within a series of std::fmt::Display +implementations and functions that pass around a &mut std::fmt::Formatter.

    +

    The parts that actually generate HTML from the items and documentation start +with print_item defined in html/render/print_item.rs, which switches out +to one of several item_* functions based on kind of Item being rendered.

    +

    Depending on what kind of rendering code you're looking for, you'll probably +find it either in html/render/mod.rs for major items like "what sections +should I print for a struct page" or html/format.rs for smaller component +pieces like "how should I print a where clause as part of some other item".

    +

    Whenever rustdoc comes across an item that should print hand-written +documentation alongside, it calls out to html/markdown.rs which interfaces +with the Markdown parser. This is exposed as a series of types that wrap a +string of Markdown, and implement fmt::Display to emit HTML text. It takes +special care to enable certain features like footnotes and tables and add +syntax highlighting to Rust code blocks (via html/highlight.rs) before +running the Markdown parser. There's also a function find_codes which is +called by find_testable_codes that specifically scans for Rust code blocks so +the test-runner code can find all the doctests in the crate.

    +

    From Soup to Nuts (or: "An Unbroken Thread Stretches From Those First Cells To Us")

    +

    It's important to note that rustdoc can ask the compiler for type information +directly, even during HTML generation. This didn't used to be the case, and +a lot of rustdoc's architecture was designed around not doing that, but a +TyCtxt is now passed to formats::renderer::run_format, which is used to +run generation for both HTML and the +(unstable as of March 2023) JSON format.

    +

    This change has allowed other changes to remove data from the "clean" AST +that can be easily derived from TyCtxt queries, and we'll usually accept +PRs that remove fields from "clean" (it's been soft-deprecated), but this +is complicated from two other constraints that rustdoc runs under:

    +
      +
    • Docs can be generated for crates that don't actually pass type checking. +This is used for generating docs that cover mutually-exclusive platform +configurations, such as libstd having a single package of docs that +cover all supported operating systems. This means rustdoc has to be able +to generate docs from HIR.
    • +
    • Docs can inline across crates. Since crate metadata doesn't contain HIR, +it must be possible to generate inlined docs from the rustc_middle data.
    • +
    +

    The "clean" AST acts as a common output format for both input formats. There +is also some data in clean that doesn't correspond directly to HIR, such as +synthetic impls for auto traits and blanket impls generated by the +collect-trait-impls pass.

    +

    Some additional data is stored in +html::render::context::{Context, SharedContext}. These two types serve as +ways to segregate rustdoc's data for an eventual future with multithreaded doc +generation, as well as just keeping things organized:

    +
      +
    • Context stores data used for generating the current page, such as its +path, a list of HTML IDs that have been used (to avoid duplicate id=""), +and the pointer to SharedContext.
    • +
    • SharedContext stores data that does not vary by page, such as the tcx +pointer, and a list of all types.
    • +
    +

    Other Tricks Up Its Sleeve

    +

    All this describes the process for generating HTML documentation from a Rust +crate, but there are couple other major modes that rustdoc runs in. It can also +be run on a standalone Markdown file, or it can run doctests on Rust code or +standalone Markdown files. For the former, it shortcuts straight to +html/markdown.rs, optionally including a mode which inserts a Table of +Contents to the output HTML.

    +

    For the latter, rustdoc runs a similar partial-compilation to get relevant +documentation in test.rs, but instead of going through the full clean and +render process, it runs a much simpler crate walk to grab just the +hand-written documentation. Combined with the aforementioned +"find_testable_code" in html/markdown.rs, it builds up a collection of +tests to run before handing them off to the test runner. One notable location +in test.rs is the function make_test, which is where hand-written +doctests get transformed into something that can be executed.

    +

    Some extra reading about make_test can be found +here.

    +

    Testing Locally

    +

    Some features of the generated HTML documentation might require local +storage to be used across pages, which doesn't work well without an HTTP +server. To test these features locally, you can run a local HTTP server, like +this:

    +
    $ ./x doc library
    +# The documentation has been generated into `build/[YOUR ARCH]/doc`.
    +$ python3 -m http.server -d build/[YOUR ARCH]/doc
    +
    +

    Now you can browse your documentation just like you would if it was hosted +on the internet. For example, the url for std will be rust/std/.

    +

    See Also

    + +

    Rustdoc search

    +

    Rustdoc Search is two programs: search_index.rs +and search.js. The first generates a nasty JSON +file with a full list of items and function signatures +in the crates in the doc bundle, and the second reads +it, turns it into some in-memory structures, and +scans them linearly to search.

    + +

    Search index format

    +

    search.js calls this Raw, because it turns it into +a more normal object tree after loading it. +For space savings, it's also written without newlines or spaces.

    +
    [
    +    [ "crate_name", {
    +        // name
    +        "n": ["function_name", "Data"],
    +        // type
    +        "t": "HF",
    +        // parent module
    +        "q": [[0, "crate_name"]],
    +        // parent type
    +        "i": [2, 0],
    +        // type dictionary
    +        "p": [[1, "i32"], [1, "str"], [5, "Data", 0]],
    +        // function signature
    +        "f": "{{gb}{d}}`", // [[3, 1], [2]]
    +        // impl disambiguator
    +        "b": [],
    +        // deprecated flag
    +        "c": "OjAAAAAAAAA=", // empty bitmap
    +        // empty description flag
    +        "e": "OjAAAAAAAAA=", // empty bitmap
    +        // aliases
    +        "a": [["get_name", 0]],
    +        // description shards
    +        "D": "g", // 3
    +        // inlined re-exports
    +        "r": [],
    +    }]
    +]
    +
    +

    src/librustdoc/html/static/js/rustdoc.d.ts +defines an actual schema in a TypeScript type.

    +
    + + + + + + + + + + + +
    KeyNameDescription
    nNamesItem names
    tItem TypeOne-char item type code
    qParent moduleMap<index, path>
    iParent typelist of indexes
    fFunction signatureencoded
    bImpl disambiguatorMap<index, string>
    cDeprecation flagroaring bitmap
    eDescription is emptyroaring bitmap
    pType dictionary[[item type, path]]
    aAliasMap<string, index>
    Ddescription shardsencoded
    +
    +

    The above index defines a crate called crate_name +with a free function called function_name and a struct called Data, +with the type signature Data, i32 -> str, +and an alias, get_name, that equivalently refers to function_name.

    +

    The search index needs to fit the needs of the rustdoc compiler, +the search.js frontend, +and also be compact and fast to decode. +It makes a lot of compromises:

    +
      +
    • The rustdoc compiler runs on one crate at a time, +so each crate has an essentially separate search index. +It merges them by having each crate on one line +and looking at the first quoted string.
    • +
    • Names in the search index are given +in their original case and with underscores. +When the search index is loaded, +search.js stores the original names for display, +but also folds them to lowercase and strips underscores for search. +You'll see them called normalized.
    • +
    • The f array stores types as offsets into the p array. +These types might actually be from another crate, +so search.js has to turn the numbers into names and then +back into numbers to deduplicate them if multiple crates in the +same index mention the same types.
    • +
    • It's a JSON file, but not designed to be human-readable. +Browsers already include an optimized JSON decoder, +so this saves on search.js code and performs better for small crates, +but instead of using objects like normal JSON formats do, +it tries to put data of the same type next to each other +so that the sliding window used by DEFLATE can find redundancies. +Where search.js does its own compression, +it's designed to save memory when the file is finally loaded, +not just size on disk or network transfer.
    • +
    +

    Parallel arrays and indexed maps

    +

    Abstractly, Rustdoc Search data is a table, stored in column-major form. +Most data in the index represents a set of parallel arrays +(the "columns") which refer to the same data if they're at the same position.

    +

    For example, +the above search index can be turned into this table:

    +
    + + + +
    ntdqifbc
    0crate_nameDDocumentationNULL0NULLNULL0
    1function_nameHThis function gets the name of an integer with Datacrate_name2{{gb}{d}}NULL0
    2DataFThe data structcrate_name0`NULL0
    +
    +

    The crate row is implied in most columns, since its type is known (it's a crate), +it can't have a parent (crates form the root of the module tree), +its name is specified as the map key, +and function-specific data like the impl disambiguator can't apply either. +However, it can still have a description and it can still be deprecated. +The crate, therefore, has a primary key of 0.

    +

    The above code doesn't use c, which holds deprecated indices, +or b, which maps indices to strings. +If crate_name::function_name used both, it might look like this.

    +
            "b": [[0, "impl-Foo-for-Bar"]],
    +        "c": "OjAAAAEAAAAAAAIAEAAAABUAbgZYCQ==",
    +
    +

    This attaches a disambiguator to index 1 and marks it deprecated.

    +

    The advantage of this layout is that these APIs often have implicit structure +that DEFLATE can take advantage of, +but that rustdoc can't assume. +Like how names are usually CamelCase or snake_case, +but descriptions aren't. +It also makes it easier to use a sparse data for things like boolean flags.

    +

    q is a Map from the first applicable ID to a parent module path. +This is a weird trick, but it makes more sense in pseudo-code:

    +
    #![allow(unused)]
    +fn main() {
    +let mut parent_module = "";
    +for (i, entry) in search_index.iter().enumerate() {
    +    if q.contains(i) {
    +        parent_module = q.get(i);
    +    }
    +    // ... do other stuff with `entry` ...
    +}
    +}
    +

    This is valid because everything has a parent module +(even if it's just the crate itself), +and is easy to assemble because the rustdoc generator sorts by path +before serializing. +Doing this allows rustdoc to not only make the search index smaller, +but reuse the same string representing the parent path across multiple in-memory items.

    +

    Representing sparse columns

    +

    VLQ Hex

    +

    This format is, as far as I know, used nowhere other than rustdoc. +It follows this grammar:

    +
    VLQHex = { VHItem | VHBackref }
    +VHItem = VHNumber | ( '{', {VHItem}, '}' )
    +VHNumber = { '@' | 'A' | 'B' | 'C' | 'D' | 'E' | 'F' | 'G' | 'H' | 'I' | 'J' | 'K' | 'L' | 'M' | 'N' | 'O' }, ( '`' | 'a' | 'b' | 'c' | 'd' | 'e' | 'f' | 'g' | 'h' | 'i' | 'j' | 'k ' | 'l' | 'm' | 'n' | 'o' )
    +VHBackref = ( '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' | ':' | ';' | '<' | '=' | '>' | '?' )
    +
    +

    A VHNumber is a variable-length, self-terminating base16 number +(terminated because the last hexit is lowercase while all others are uppercase). +The sign bit is represented using zig-zag encoding.

    +

    This alphabet is chosen because the characters can be turned into hexits by +masking off the last four bits of the ASCII encoding.

    +

    A major feature of this encoding, as with all of the "compression" done in rustdoc, +is that it can remain in its compressed format even in memory at runtime. +This is why HBackref is only used at the top level, +and why we don't just use Flate for everything: the decoder in search.js +will reuse the entire decoded object whenever a backref is seen, +saving decode work and memory.

    +

    Roaring Bitmaps

    +

    Flag-style data, such as deprecation and empty descriptions, +are stored using the standard Roaring Bitmap serialization format with runs. +The data is then base64 encoded when writing it.

    +

    As a brief overview: a roaring bitmap is a chunked array of bits, +described in this paper. +A chunk can either be a list of integers, a bitfield, or a list of runs. +In any case, the search engine has to base64 decode it, +and read the chunk index itself, +but the payload data stays as-is.

    +

    All roaring bitmaps in rustdoc currently store a flag for each item index. +The crate is item 0, all others start at 1.

    +

    How descriptions are stored

    +

    The largest amount of data, +and the main thing Rustdoc Search deals with that isn't +actually used for searching, is descriptions. +In a SERP table, this is what appears on the rightmost column.

    +
    +
    + +
    item typeitem pathdescription (this part)
    functionmy_crate::my_functionThis function gets the name of an integer with Data
    +
    +

    When someone runs a search in rustdoc for the first time, their browser will +work through a "sandwich workload" of three steps:

    +
      +
    1. Download the search-index.js and search.js files (a network bottleneck).
    2. +
    3. Perform the actual search (a CPU and memory bandwidth bottleneck).
    4. +
    5. Download the description data (another network bottleneck).
    6. +
    +

    Reducing the amount of data downloaded here will almost always increase latency, +by delaying the decision of what to download behind other work and/or adding +data dependencies where something can't be downloaded without first downloading +something else. In this case, we can't start downloading descriptions until +after the search is done, because that's what allows it to decide which +descriptions to download (it needs to sort the results then truncate to 200).

    +

    To do this, two columns are stored in the search index, building on both +Roaring Bitmaps and on VLQ Hex.

    +
      +
    • e is an index of empty descriptions. It's a roaring bitmap of +each item (the crate itself is item 0, the rest start at 1).
    • +
    • D is a shard list, stored in VLQ hex as flat list of integers. +Each integer gives you the number of descriptions in the shard. +As the decoder walks the index, it checks if the description is empty. +if it's not, then it's in the "current" shard. When all items are +exhausted, it goes on to the next shard.
    • +
    +

    Inside each shard is a newline-delimited list of descriptions, +wrapped in a JSONP-style function call.

    +

    i, f, and p

    +

    i and f both index into p, the array of parent items.

    +

    i is just a one-indexed number +(not zero-indexed because 0 is used for items that have no parent item). +It's different from q because q represents the parent module or crate, +which everything has, +while i/q are used for type and trait-associated items like methods.

    +

    f, the function signatures, use a VLQ hex tree. +A number is either a one-indexed reference into p, +a negative number representing a generic, +or zero for null.

    +

    (the internal object representation also uses negative numbers, +even after decoding, +to represent generics).

    +

    For example, {{gb}{d}} is equivalent to the json [[3, 1], [2]]. +Because of zigzag encoding, ` is +0, a is -0 (which is not used), +b is +1, and c is -1.

    +

    Searching by name

    +

    Searching by name works by looping through the search index +and running these functions on each:

    +
      +
    • editDistance is always used to determine a match +(unless quotes are specified, which would use simple equality instead). +It computes the number of swaps, inserts, and removes needed to turn +the query name into the entry name. +For example, foo has zero distance from itself, +but a distance of 1 from ofo (one swap) and foob (one insert). +It is checked against an heuristic threshold, and then, +if it is within that threshold, the distance is stored for ranking.
    • +
    • String.prototype.indexOf is always used to determine a match. +If it returns anything other than -1, the result is added, +even if editDistance exceeds its threshold, +and the index is stored for ranking.
    • +
    • checkPath is used if, and only if, a parent path is specified +in the query. For example, vec has no parent path, but vec::vec does. +Within checkPath, editDistance and indexOf are used, +and the path query has its own heuristic threshold, too. +If it's not within the threshold, the entry is rejected, +even if the first two pass. +If it's within the threshold, the path distance is stored +for ranking.
    • +
    • checkType is used only if there's a type filter, +like the struct in struct:vec. If it fails, +the entry is rejected.
    • +
    +

    If all four criteria pass +(plus the crate filter, which isn't technically part of the query), +the results are sorted by sortResults.

    +

    Searching by type

    +

    Searching by type can be divided into two phases, +and the second phase has two sub-phases.

    +
      +
    • Turn names in the query into numbers.
    • +
    • Loop over each entry in the search index: +
        +
      • Quick rejection using a bloom filter.
      • +
      • Slow rejection using a recursive type unification algorithm.
      • +
      +
    • +
    +

    In the names->numbers phase, if the query has only one name in it, +the editDistance function is used to find a near match if the exact match fails, +but if there's multiple items in the query, +non-matching items are treated as generics instead. +This means hahsmap will match hashmap on its own, but hahsmap, u32 +is going to match the same things T, u32 matches +(though rustdoc will detect this particular problem and warn about it).

    +

    Then, when actually looping over each item, +the bloom filter will probably reject entries that don't have every +type mentioned in the query. +For example, the bloom query allows a query of i32 -> u32 to match +a function with the type i32, u32 -> bool, +but unification will reject it later.

    +

    The unification filter ensures that:

    +
      +
    • Bag semantics are respected. If you query says i32, i32, +then the function has to mention two i32s, not just one.
    • +
    • Nesting semantics are respected. If your query says vec<option>, +then vec<option<i32>> is fine, but option<vec<i32>> is not a match.
    • +
    • The division between return type and parameter is respected. +i32 -> u32 and u32 -> i32 are completely different.
    • +
    +

    The bloom filter checks none of these things, +and, on top of that, can have false positives. +But it's fast and uses very little memory, so the bloom filter helps.

    +

    Re-exports

    +

    Re-export inlining allows the same item to be found by multiple names. +Search supports this by giving the same item multiple entries and tracking a canonical path +for any items where that differs from the given path.

    +

    For example, this sample index has a single struct exported from two paths:

    +
    [
    +    [ "crate_name", {
    +        "doc": "Documentation",
    +        "n": ["Data", "Data"],
    +        "t": "FF",
    +        "d": ["The data struct", "The data struct"],
    +        "q": [[0, "crate_name"], [1, "crate_name::submodule"]],
    +        "i": [0, 0],
    +        "p": [],
    +        "f": "``",
    +        "b": [],
    +        "c": [],
    +        "a": [],
    +        "r": [[0, 1]],
    +    }]
    +]
    +
    +

    The important part of this example is the r array, +which indicates that path entry 1 in the q array is +the canonical path for item 0. +That is, crate_name::Data has a canonical path of crate_name::submodule::Data.

    +

    This might sound like a strange design, since it has the duplicate data. +It's done that way because inlining can happen across crates, +which are compiled separately and might not all be present in the docs.

    +
    [
    +  [ "crate_name", ... ],
    +  [ "crate_name_2", { "q": [[0, "crate_name::submodule"], [5, "core::option"]], ... }]
    +]
    +
    +

    In the above example, a canonical path actually comes from a dependency, +and another one comes from an inlined standard library item: +the canonical path isn't even in the index! +The canonical path might also be private. +In either case, it's never shown to the user, and is only used for deduplication.

    +

    Associated types, like methods, store them differently. +These types are connected with an entry in p (their "parent") +and each one has an optional third tuple element:

    +
    "p": [[5, "Data", 0, 1]]
    +
    +

    That's:

    +
      +
    • 5: It's a struct
    • +
    • "Data": Its name
    • +
    • 0: Its display path, "crate_name"
    • +
    • 1: Its canonical path, "crate_name::submodule"
    • +
    +

    In both cases, the canonical path might not be public at all, +or it might be from another crate that isn't in the docs, +so it's never shown to the user, but is used for deduplication.

    +

    Testing the search engine

    +

    While the generated UI is tested using rustdoc-gui tests, the +primary way the search engine is tested is the rustdoc-js and +rustdoc-js-std tests. They run in NodeJS.

    +

    A rustdoc-js test has a .rs and .js file, with the same name. +The .rs file specifies the hypothetical library crate to run +the searches on (make sure you mark anything you need to find as pub). +The .js file specifies the actual searches. +The rustdoc-js-std tests are the same, but don't require an .rs +file, since they use the standard library.

    +

    The .js file is like a module (except the loader takes care of +exports for you). It uses these variables:

    +
    + + + +
    NameTypeDescription
    FILTER_CRATEstringOnly include results from the given crate. In the GUI, this is the "Results in crate" drop-down menu.
    EXPECTED[ResultsTable]|ResultsTableList of tests to run, specifying what the hypothetical user types into the search box and sees in the tabs
    PARSED[ParsedQuery]|ParsedQueryList of parser tests to run, without running an actual search
    +
    +

    FILTER_CRATE can be left out (equivalent to searching "all crates"), but you +have to specify EXPECTED or PARSED.

    +

    By default, the test fails if any of the results specified in the test case are +not found after running the search, or if the results found after running the +search don't appear in the same order that they do in the test. +The actual search results may, however, include results that aren't in the test. +To override this, specify any of the following magic comments. +Put them on their own line, without indenting.

    +
      +
    • // exact-check: If search results appear that aren't part of the test case, +then fail.
    • +
    • // ignore-order: Allow search results to appear in any order.
    • +
    • // should-fail: Used to write negative tests.
    • +
    +

    Standard library tests usually shouldn't specify // exact-check, since we +want the libs team to be able to add new items without causing unrelated +tests to fail, but standalone tests will use it more often.

    +

    The ResultsTable and ParsedQuery types are specified in +rustdoc.d.ts.

    +

    For example, imagine we needed to fix a bug where a function named +constructor couldn't be found. To do this, write two files:

    +
    #![allow(unused)]
    +fn main() {
    +// tests/rustdoc-js/constructor_search.rs
    +// The test case needs to find this result.
    +pub fn constructor(_input: &str) -> i32 { 1 }
    +}
    +
    // tests/rustdoc-js/constructor_search.js
    +// exact-check
    +// Since this test runs against its own crate,
    +// new items should not appear in the search results.
    +const EXPECTED = [
    +  // This first test targets name-based search.
    +  {
    +    query: "constructor",
    +    others: [
    +      { path: "constructor_search", name: "constructor" },
    +    ],
    +    in_args: [],
    +    returned: [],
    +  },
    +  // This test targets the second tab.
    +  {
    +    query: "str",
    +    others: [],
    +    in_args: [
    +      { path: "constructor_search", name: "constructor" },
    +    ],
    +    returned: [],
    +  },
    +  // This test targets the third tab.
    +  {
    +    query: "i32",
    +    others: [],
    +    in_args: [],
    +    returned: [
    +      { path: "constructor_search", name: "constructor" },
    +    ],
    +  },
    +  // This test targets advanced type-driven search.
    +  {
    +    query: "str -> i32",
    +    others: [
    +      { path: "constructor_search", name: "constructor" },
    +    ],
    +    in_args: [],
    +    returned: [],
    +  },
    +]
    +
    +

    The rustdoc test suite

    +

    This page is about the test suite named rustdoc used to test the HTML output of rustdoc. +For other rustdoc-specific test suites, see Rustdoc test suites.

    +

    Each test file in this test suite is simply a Rust source file file.rs sprinkled with +so-called directives located inside normal Rust code comments. +These come in two flavors: Compiletest and HtmlDocCk.

    +

    To learn more about the former, read Compiletest directives. +For the latter, continue reading.

    +

    Internally, compiletest invokes the supplementary checker script htmldocck.py.

    +

    HtmlDocCk Directives

    +

    Directives to HtmlDocCk are assertions that place constraints on the generated HTML. +They look similar to those given to compiletest in that they take the form of //@ comments +but ultimately, they are completey distinct and processed by different programs.

    +

    XPath is used to query parts of the HTML document tree.

    +

    Introductory example:

    +
    //@ has file/type.Alias.html
    +//@ has - '//*[@class="rust item-decl"]//code' 'type Alias = Option<i32>;'
    +pub type Alias = Option<i32>;
    +

    Here, we check that documentation generated for crate file contains a page for the +public type alias Alias where the code block that is found at the top contains the +expected rendering of the item. The //*[@class="rust item-decl"]//code is an XPath +expression.

    +

    Conventionally, you place these directives directly above the thing they are meant to test. +Technically speaking however, they don't need to be as HtmlDocCk only looks for the directives.

    +

    All directives take a PATH argument. +To avoid repetition, - can be passed to it to re-use the previous PATH argument. +Since the path contains the name of the crate, it is conventional to add a +#![crate_name = "foo"] attribute to the crate root to shorten the resulting path.

    +

    All arguments take the form of shell-style (single or double) quoted strings, +with the exception of COUNT and the special - form of PATH.

    +

    All directives (except files) can be negated by putting a ! in front of their name. +Before you add negated directives, please read about their caveats.

    +

    Similar to shell commands, +directives can extend across multiple lines if their last char is \. +In this case, the start of the next line should be //, with no @.

    +

    Use the special string {{channel}} in XPaths, PATTERN arguments and snapshot files +if you'd like to refer to the URL https://doc.rust-lang.org/CHANNEL where CHANNEL refers to the +current release channel (e.g, stable or nightly).

    +

    Listed below are all possible directives:

    +

    has

    +
    +

    Usage 1: //@ has PATH

    +
    +

    Check that the file given by PATH exists.

    +
    +

    Usage 2: //@ has PATH XPATH PATTERN

    +
    +

    Checks that the text of each element / attribute / text selected by XPATH in the +whitespace-normalized1 file given by PATH matches the +(also whitespace-normalized) string PATTERN.

    +

    Tip: If you'd like to avoid whitespace normalization and/or if you'd like to match with a regex, +use matches instead.

    +

    hasraw

    +
    +

    Usage: //@ hasraw PATH PATTERN

    +
    +

    Checks that the contents of the whitespace-normalized1 file given by PATH +matches the (also whitespace-normalized) string PATTERN.

    +

    Tip: If you'd like to avoid whitespace normalization and / or if you'd like to match with a +regex, use matchesraw instead.

    +

    matches

    +
    +

    Usage: //@ matches PATH XPATH PATTERN

    +
    +

    Checks that the text of each element / attribute / text selected by XPATH in the +file given by PATH matches the Python-flavored2 regex PATTERN.

    +

    matchesraw

    +
    +

    Usage: //@ matchesraw PATH PATTERN

    +
    +

    Checks that the contents of the file given by PATH matches the +Python-flavored2 regex PATTERN.

    +

    count

    +
    +

    Usage: //@ count PATH XPATH COUNT

    +
    +

    Checks that there are exactly COUNT matches for XPATH within the file given by PATH.

    +

    snapshot

    +
    +

    Usage: //@ snapshot NAME PATH XPATH

    +
    +

    Checks that the element / text selected by XPATH in the file given by PATH matches the +pre-recorded subtree or text (the "snapshot") in file FILE_STEM.NAME.html where FILE_STEM +is the file stem of the test file.

    +

    Pass the --bless option to compiletest to accept the current subtree/text as expected. +This will overwrite the aforementioned file (or create it if it doesn't exist). It will +automatically normalize the channel-dependent URL https://doc.rust-lang.org/CHANNEL to +the special string {{channel}}.

    +

    has-dir

    +
    +

    Usage: //@ has-dir PATH

    +
    +

    Checks for the existence of the directory given by PATH.

    +

    files

    +
    +

    Usage: //@ files PATH ENTRIES

    +
    +

    Checks that the directory given by PATH contains exactly ENTRIES. +ENTRIES is a Python-like list of strings inside a quoted string.

    +

    Example: //@ files "foo/bar" '["index.html", "sidebar-items.js"]'

    +

    Compiletest Directives (Brief)

    +

    As mentioned in the introduction, you also have access to compiletest directives. +Most importantly, they allow you to register auxiliary crates and +to pass flags to the rustdoc binary under test. +It's strongly recommended to read that chapter if you don't know anything about them yet.

    +

    Here are some details that are relevant to this test suite specifically:

    +
      +
    • While you can use both //@ compile-flags and //@ doc-flags to pass flags to rustdoc, +prefer to user the latter to show intent. The former is meant for rustc.
    • +
    • Add //@ build-aux-docs to the test file that has auxiliary crates to not only compile the +auxiliaries with rustc but to also document them with rustdoc.
    • +
    +

    Caveats

    +

    Testing for the absence of an element or a piece of text is quite fragile and not very future proof.

    +

    It's not unusual that the shape of the generated HTML document tree changes from time to time. +This includes for example renamings of CSS classes.

    +

    Whenever that happens, positive checks will either continue to match the intended element / +attribute / text (if their XPath expression is general / loose enough) and +thus continue to test the correct thing or they won't in which case they would fail thereby +forcing the author of the change to look at them.

    +

    Compare that to negative checks (e.g., //@ !has PATH XPATH PATTERN) which won't fail if their +XPath expression "no longer" matches. The author who changed "the shape" thus won't get notified and +as a result someone else can unintentionally reintroduce PATTERN into the generated docs without +the original negative check failing.

    +

    Note: Please avoid the use of negated checks!

    +

    Tip: If you can't avoid it, please always pair it with an analogous positive check in the +immediate vicinity, so people changing "the shape" have a chance to notice and to update the +negated check!

    +

    Limitations

    +

    HtmlDocCk uses the XPath implementation from the Python standard library. +This leads to several limitations:

    +
      +
    • All XPATH arguments must start with // due to a flaw in the implementation.
    • +
    • Many XPath features (functions, axies, etc.) are not supported.
    • +
    • Only well-formed HTML can be parsed (hopefully rustdoc doesn't output mismatched tags).
    • +
    +

    Furthmore, compiletest revisions are not supported.

    +
    +
    1. +

      Whitespace normalization means that all spans of consecutive whitespace are replaced with a single space. ↩2

      +
    2. +
    3. +

      They are Unicode aware (flag UNICODE is set), match case-sensitively and in single-line mode. ↩2

      +
    4. +

    The rustdoc-gui test suite

    +
    +

    FIXME: This section is a stub. Please help us flesh it out!

    +
    +

    This page is about the test suite named rustdoc-gui used to test the "GUI" of rustdoc (i.e., the HTML/JS/CSS as rendered in a browser). +For other rustdoc-specific test suites, see Rustdoc test suites.

    +

    These use a NodeJS-based tool called browser-UI-test that uses puppeteer to run tests in a headless browser and check rendering and interactivity. For information on how to write this form of test, see tests/rustdoc-gui/README.md as well as the description of the .goml format

    +

    The rustdoc-json test suite

    +
    +

    FIXME: This section is a stub. It will be populated by PR #2422.

    +
    +

    The std::autodiff module in Rust allows differentiable programming:

    +
    #![feature(autodiff)]
    +use std::autodiff::autodiff;
    +
    +// f(x) = x * x, f'(x) = 2.0 * x
    +// bar therefore returns (x * x, 2.0 * x)
    +#[autodiff(bar, Reverse, Active, Active)]
    +fn foo(x: f32) -> f32 { x * x }
    +
    +fn main() {
    +    assert_eq!(bar(3.0, 1.0), (9.0, 6.0));
    +    assert_eq!(bar(4.0, 1.0), (16.0, 8.0));
    +}
    +

    The detailed documentation for the std::autodiff module is available at std::autodiff.

    +

    Differentiable programing is used in various fields like numerical computing, solid mechanics, computational chemistry, fluid dynamics or for Neural Network training via Backpropagation, ODE solver, differentiable rendering, quantum computing, and climate simulations.

    +

    Installation

    +

    In the near future, std::autodiff should become available in nightly builds for users. As a contributor however, you will still need to build rustc from source. Please be aware that the msvc target is not supported at the moment, all other tier 1 targets should work. Please open an issue if you encounter any problems on a supported tier 1 target, or if you successfully build this project on a tier2/tier3 target.

    +

    Build instructions

    +

    First you need to clone and configure the Rust repository:

    +
    git clone --depth=1 git@github.com:rust-lang/rust.git
    +cd rust
    +./configure --enable-llvm-link-shared --enable-llvm-plugins --enable-llvm-enzyme --release-channel=nightly --enable-llvm-assertions --enable-clang --enable-lld --enable-option-checking --enable-ninja --disable-docs
    +
    +

    Afterwards you can build rustc using:

    +
    ./x.py build --stage 1 library
    +
    +

    Afterwards rustc toolchain link will allow you to use it through cargo:

    +
    rustup toolchain link enzyme build/host/stage1
    +rustup toolchain install nightly # enables -Z unstable-options
    +
    +

    You can then run our test cases:

    +
    ./x.py test --stage 1 tests/codegen/autodiff
    +./x.py test --stage 1 tests/pretty/autodiff
    +./x.py test --stage 1 tests/ui/autodiff
    +./x.py test --stage 1 tests/ui/feature-gates/feature-gate-autodiff.rs
    +
    +

    Autodiff is still experimental, so if you want to use it in your own projects, you will need to add lto="fat" to your Cargo.toml +and use RUSTFLAGS="-Zautodiff=Enable" cargo +enzyme instead of cargo or cargo +nightly.

    +

    Compiler Explorer and dist builds

    +

    Our compiler explorer instance can be updated to a newer rustc in a similar way. First, prepare a docker instance.

    +
    docker run -it ubuntu:22.04
    +export CC=clang CXX=clang++
    +apt update
    +apt install wget vim python3 git curl libssl-dev pkg-config lld ninja-build cmake clang build-essential 
    +
    +

    Then build rustc in a slightly altered way:

    +
    git clone --depth=1 https://github.com/rust-lang/rust.git
    +cd rust
    +./configure --enable-llvm-link-shared --enable-llvm-plugins --enable-llvm-enzyme --release-channel=nightly --enable-llvm-assertions --enable-clang --enable-lld --enable-option-checking --enable-ninja --disable-docs
    +./x dist
    +
    +

    We then copy the tarball to our host. The dockerid is the newest entry under docker ps -a.

    +
    docker cp <dockerid>:/rust/build/dist/rust-nightly-x86_64-unknown-linux-gnu.tar.gz rust-nightly-x86_64-unknown-linux-gnu.tar.gz
    +
    +

    Afterwards we can create a new (pre-release) tag on the EnzymeAD/rust repository and make a PR against the EnzymeAD/enzyme-explorer repository to update the tag. +Remember to ping tgymnich on the PR to run his update script. Note: We should archive EnzymeAD/rust and update the instructions here. The explorer should soon +be able to get the rustc toolchain from the official rust servers.

    +

    Build instruction for Enzyme itself

    +

    Following the Rust build instruction above will build LLVMEnzyme, LLDEnzyme, and ClangEnzyme along with the Rust compiler. +We recommend that approach, if you just want to use any of them and have no experience with cmake. +However, if you prefer to just build Enzyme without Rust, then these instructions might help.

    +
    git clone --depth=1 git@github.com:llvm/llvm-project.git 
    +cd llvm-project
    +mkdir build
    +cd build
    +cmake -G Ninja ../llvm -DLLVM_TARGETS_TO_BUILD="host" -DLLVM_ENABLE_ASSERTIONS=ON -DLLVM_ENABLE_PROJECTS="clang;lld" -DLLVM_ENABLE_RUNTIMES="openmp" -DLLVM_ENABLE_PLUGINS=ON -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=.
    +ninja
    +ninja install
    +
    +

    This gives you a working LLVM build, now we can continue with building Enzyme. +Leave the llvm-project folder, and execute the following commands:

    +
    git clone git@github.com:EnzymeAD/Enzyme.git 
    +cd Enzyme/enzyme
    +mkdir build 
    +cd build 
    +cmake .. -G Ninja -DLLVM_DIR=<YourLocalPath>/llvm-project/build/lib/cmake/llvm/ -DLLVM_EXTERNAL_LIT=<YourLocalPath>/llvm-project/llvm/utils/lit/lit.py -DCMAKE_BUILD_TYPE=Release -DCMAKE_EXPORT_COMPILE_COMMANDS=YES -DBUILD_SHARED_LIBS=ON
    +ninja
    +
    +

    This will build Enzyme, and you can find it in Enzyme/enzyme/build/lib/<LLD/Clang/LLVM>Enzyme.so. (Endings might differ based on your OS).

    +

    Reporting backend crashes

    +

    If after a compilation failure you are greeted by a large amount of llvm-ir code, then our enzyme backend likely failed to compile your code. These cases are harder to debug, so your help is highly appreciated. Please also keep in mind that release builds are usually much more likely to work at the moment.

    +

    The final goal here is to reproduce your bug in the enzyme compiler explorer, in order to create a bug report in the Enzyme repository.

    +

    We have an autodiff flag which you can pass to rustflags to help with this. it will print the whole llvm-ir module, along with some __enzyme_fwddiff or __enzyme_autodiff calls. A potential workflow on linux could look like:

    +

    Controlling llvm-ir generation

    +

    Before generating the llvm-ir, keep in mind two techniques that can help ensure the relevant rust code is visible for debugging:

    +
      +
    • std::hint::black_box: wrap rust variables or expressions in std::hint::black_box() to prevent rust and llvm from optimizing them away. This is useful when you need to inspect or manually manipulate specific values in the llvm-ir.
    • +
    • extern "rust" or extern "c": if you want to see how a specific function declaration is lowered to llvm-ir, you can declare it as extern "rust" or extern "c". You can also look for existing __enzyme_autodiff or similar declarations within the generated module for examples.
    • +
    +

    1) Generate an llvm-ir reproducer

    +
    rustflags="-z autodiff=enable,printmodbefore" cargo +enzyme build --release &> out.ll 
    +
    +

    This also captures a few warnings and info messages above and below your module. open out.ll and remove every line above ; moduleid = <somehash>. Now look at the end of the file and remove everything that's not part of llvm-ir, i.e. remove errors and warnings. The last line of your llvm-ir should now start with !<somenumber> = , i.e. !40831 = !{i32 0, i32 1037508, i32 1037538, i32 1037559} or !43760 = !dilocation(line: 297, column: 5, scope: !43746).

    +

    The actual numbers will depend on your code.

    +

    2) Check your llvm-ir reproducer

    +

    To confirm that your previous step worked, we will use llvm's opt tool. find your path to the opt binary, with a path similar to <some_dir>/rust/build/<x86/arm/...-target-tripple>/build/bin/opt. also find llvmenzyme-19.<so/dll/dylib> path, similar to /rust/build/target-tripple/enzyme/build/enzyme/llvmenzyme-19. Please keep in mind that llvm frequently updates it's llvm backend, so the version number might be higher (20, 21, ...). Once you have both, run the following command:

    +
    <path/to/opt> out.ll -load-pass-plugin=/path/to/llvmenzyme-19.so -passes="enzyme" -s
    +
    +

    If the previous step succeeded, you are going to see the same error that you saw when compiling your rust code with cargo.

    +

    If you fail to get the same error, please open an issue in the rust repository. If you succeed, congrats! the file is still huge, so let's automatically minimize it.

    +

    3) Minimize your llvm-ir reproducer

    +

    First find your llvm-extract binary, it's in the same folder as your opt binary. then run:

    +
    <path/to/llvm-extract> -s --func=<name> --recursive --rfunc="enzyme_autodiff*" --rfunc="enzyme_fwddiff*" --rfunc=<fnc_called_by_enzyme> out.ll -o mwe.ll 
    +
    +

    This command creates mwe.ll, a minimal working example.

    +

    Please adjust the name passed with the last --func flag. You can either apply the #[no_mangle] attribute to the function you differentiate, then you can replace it with the rust name. otherwise you will need to look up the mangled function name. To do that, open out.ll and search for __enzyme_fwddiff or __enzyme_autodiff. the first string in that function call is the name of your function. example:

    +
    define double @enzyme_opt_helper_0(ptr %0, i64 %1, double %2) {
    +  %4 = call double (...) @__enzyme_fwddiff(ptr @_zn2ad3_f217h3b3b1800bd39fde3e, metadata !"enzyme_const", ptr %0, metadata !"enzyme_const", i64 %1, metadata !"enzyme_dup", double %2, double %2)
    +  ret double %4
    +}
    +
    +

    Here, _zn2ad3_f217h3b3b1800bd39fde3e is the correct name. make sure to not copy the leading @. redo step 2) by running the opt command again, but this time passing mwe.ll as the input file instead of out.ll. Check if this minimized example still reproduces the crash.

    +

    4) (Optional) Minimize your llvm-ir reproducer further.

    +

    After the previous step you should have an mwe.ll file with ~5k loc. let's try to get it down to 50. find your llvm-reduce binary next to opt and llvm-extract. Copy the first line of your error message, an example could be:

    +
    opt: /home/manuel/prog/rust/src/llvm-project/llvm/lib/ir/instructions.cpp:686: void llvm::callinst::init(llvm::functiontype*, llvm::value*, llvm::arrayref<llvm::value*>, llvm::arrayref<llvm::operandbundledeft<llvm::value*> >, const llvm::twine&): assertion `(args.size() == fty->getnumparams() || (fty->isvararg() && args.size() > fty->getnumparams())) && "calling a function with bad signature!"' failed.
    +
    +

    If you just get a segfault there is no sensible error message and not much to do automatically, so continue to 5).
    +otherwise, create a script.sh file containing

    +
    #!/bin/bash
    +<path/to/your/opt> $1 -load-pass-plugin=/path/to/llvmenzyme-19.so -passes="enzyme" \
    +    |& grep "/some/path.cpp:686: void llvm::callinst::init"
    +
    +

    Experiment a bit with which error message you pass to grep. it should be long enough to make sure that the error is unique. However, for longer errors including ( or ) you will need to escape them correctly which can become annoying. Run

    +
    <path/to/llvm-reduce> --test=script.sh mwe.ll 
    +
    +

    If you see input isn't interesting! verify interesting-ness test, you got the error message in script.sh wrong, you need to make sure that grep matches your actual error. If all works out, you will see a lot of iterations, ending with a new reduced.ll file. Verify with opt that you still get the same error.

    +

    Advanced debugging: manual llvm-ir investigation

    +

    Once you have a minimized reproducer (mwe.ll or reduced.ll), you can delve deeper:

    +
      +
    • manual editing: try manually rewriting the llvm-ir. for certain issues, like those involving indirect calls, you might investigate enzyme-specific intrinsics like __enzyme_virtualreverse. Understanding how to use these might require consulting enzyme's documentation or source code.
    • +
    • enzyme test cases: look for relevant test cases within the enzyme repository that might demonstrate the correct usage of features or intrinsics related to your problem.
    • +
    +

    5) Report your bug.

    +

    Afterwards, you should be able to copy and paste your mwe.ll (or reduced.ll) example into our compiler explorer.

    +
      +
    • Select llvm ir as language and opt 20 as compiler.
    • +
    • Replace the field to the right of your compiler with -passes="enzyme", if it is not already set.
    • +
    • Hopefully, you will see once again your now familiar error.
    • +
    • Please use the share button to copy links to them.
    • +
    • Please create an issue on https://github.com/enzymead/enzyme/issues and share mwe.ll and (if you have it) reduced.ll, as well as links to the compiler explorer. Please feel free to also add your rust code or a link to it.
    • +
    +

    Documenting findings

    +

    some enzyme errors, like "attempting to call an indirect active function whose runtime value is inactive", have historically caused confusion. If you investigate such an issue, even if you don't find a complete solution, please consider documenting your findings. If the insights are general to enzyme and not specific to its rust usage, contributing them to the main enzyme documentation is often the best first step. You can also mention your findings in the relevant enzyme github issue or propose updates to these docs if appropriate. This helps prevent others from starting from scratch.

    +

    With a clear reproducer and documentation, hopefully an enzyme developer will be able to fix your bug. Once that happens, the enzyme submodule inside the rust compiler will be updated, which should allow you to differentiate your rust code. Thanks for helping us to improve rust-ad.

    +

    Minimize rust code

    +

    Beyond having a minimal llvm-ir reproducer, it is also helpful to have a minimal rust reproducer without dependencies. This allows us to add it as a test case to ci once we fix it, which avoids regressions for the future.

    +

    There are a few solutions to help you with minimizing the rust reproducer. This is probably the most simple automated approach: cargo-minimize.

    +

    Otherwise we have various alternatives, including treereduce, halfempty, or picireny, potentially also creduce.

    +

    Supported RUSTFLAGS

    +

    To support you while debugging or profiling, we have added support for an experimental -Z autodiff rustc flag (which can be passed to cargo via RUSTFLAGS), which allow changing the behaviour of Enzyme, without recompiling rustc. We currently support the following values for autodiff.

    +

    Debug Flags

    +
    PrintTA // Print TypeAnalysis information
    +PrintAA // Print ActivityAnalysis information
    +Print // Print differentiated functions while they are being generated and optimized
    +PrintPerf // Print AD related Performance warnings
    +PrintModBefore // Print the whole LLVM-IR module directly before running AD
    +PrintModAfter // Print the whole LLVM-IR module after running AD, before optimizations
    +PrintModFinal // Print the whole LLVM-IR module after running optimizations and AD
    +LooseTypes // Risk incorrect derivatives instead of aborting when missing Type Info 
    +
    +
    +

    LooseTypes is often helpful to get rid of Enzyme errors stating Can not deduce type of <X> and to be able to run some code. But please keep in mind that this flag absolutely has the chance to cause incorrect gradients. Even worse, the gradients might be correct for certain input values, but not for others. So please create issues about such bugs and only use this flag temporarily while you wait for your bug to be fixed.

    +
    +

    Benchmark flags

    +

    For performance experiments and benchmarking we also support

    +
    NoPostopt // We won't optimize the LLVM-IR Module after AD
    +RuntimeActivity // Enables the runtime activity feature from Enzyme 
    +Inline // Instructs Enzyme to maximize inlining as far as possible, beyond LLVM's default
    +
    +

    You can combine multiple autodiff values using a comma as separator:

    +
    RUSTFLAGS="-Z autodiff=Enable,LooseTypes,PrintPerf" cargo +enzyme build
    +
    +

    Using -Zautodiff=Enable will allow using autodiff and update your normal rustc compilation pipeline:

    +
      +
    1. Run your selected compilation pipeline. If you selected a release build, we will disable vectorization and loop unrolling.
    2. +
    3. Differentiate your functions.
    4. +
    5. Run your selected compilation pipeline again on the whole module. This time we do not disable vectorization or loop unrolling.
    6. +
    +

    Current limitations

    +

    Safety and Soundness

    +

    Enzyme currently assumes that the user passes shadow arguments (dx, dy, ...) of appropriate size. Under Reverse Mode, we additionally assume that shadow arguments are mutable. In Reverse Mode we adjust the outermost pointer or reference to be mutable. Therefore &f32 will receive the shadow type &mut f32. However, we do not check length for other types than slices (e.g. enums, Vec). We also do not enforce mutability of inner references, but will warn if we recognize them. We do intend to add additional checks over time.

    +

    ABI adjustments

    +

    In some cases, a function parameter might get lowered in a way that we currently don't handle correctly, leading to a compile time type mismatch in the rustc_codegen_llvm backend. Here are some examples.

    +

    Compile Times

    +

    Enzyme will often achieve excellent runtime performance, but might increase your compile time by a large factor. For Rust, we already have made significant improvements and have a list of further improvements planed - please reach out if you have time to help here.

    +

    Type Analysis

    +

    Most of the times, Type Analysis (TA) is the reason of large (>5x) compile time increases when using Enzyme. This poster explains why we need to run Type Analysis in the bottom left part: Poster Link.

    +

    We intend to increase the number of locations where we pass down Type information based on Rust types, which in turn will reduce the number of locations where Enzyme has to run Type Analysis, which will help compile times.

    +

    Duplicated Optimizations

    +

    The key reason for Enzyme offering often excellent performance is that Enzyme differentiates already optimized LLVM-IR. However, we also (have to) run LLVM's optimization pipeline after differentiating, to make sure that the code which Enzyme generates is optimized properly. As a result you should have excellent runtime performance (please fill an issue if not), but at a compile time cost for running optimizations twice.

    +

    Fat-LTO

    +

    The usage of #[autodiff(...)] currently requires compiling your project with Fat-LTO. We technically only need LTO if the function being differentiated calls functions in other compilation units. Therefore, other solutions are possible, but this is the most simple one to get started.

    +

    Source Code Representation

    +

    This part describes the process of taking raw source code from the user and +transforming it into various forms that the compiler can work with easily. +These are called intermediate representations (IRs).

    +

    This process starts with compiler understanding what the user has asked for: +parsing the command line arguments given and determining what it is to compile. +After that, the compiler transforms the user input into a series of IRs that +look progressively less like what the user wrote.

    +

    Syntax and the AST

    +

    Working directly with source code is very inconvenient and error-prone. +Thus, before we do anything else, we convert raw source code into an +Abstract Syntax Tree (AST). It turns out that doing this involves a lot of work, +including lexing, parsing, macro expansion, name resolution, conditional +compilation, feature-gate checking, and validation of the AST. +In this chapter, we take a look at all of these steps.

    +

    Notably, there isn't always a clean ordering between these tasks. +For example, macro expansion relies on name resolution to resolve the names of macros and imports. +And parsing requires macro expansion, which in turn may require parsing the output of the macro.

    +

    Lexing and parsing

    +

    The very first thing the compiler does is take the program (in UTF-8 Unicode text) +and turn it into a data format the compiler can work with more conveniently than strings. +This happens in two stages: Lexing and Parsing.

    +
      +
    1. Lexing takes strings and turns them into streams of tokens. For +example, foo.bar + buz would be turned into the tokens foo, ., bar, ++, and buz. This is implemented in rustc_lexer.
    2. +
    +
      +
    1. Parsing takes streams of tokens and turns them into a structured form +which is easier for the compiler to work with, usually called an Abstract +Syntax Tree (AST) .
    2. +
    +

    The AST

    +

    The AST mirrors the structure of a Rust program in memory, using a Span to +link a particular AST node back to its source text. The AST is defined in +rustc_ast, along with some definitions for tokens and token +streams, data structures/traits for mutating ASTs, and shared definitions for +other AST-related parts of the compiler (like the lexer and +macro-expansion).

    +

    Every node in the AST has its own NodeId, including top-level items +such as structs, but also individual statements and expressions. A NodeId +is an identifier number that uniquely identifies an AST node within a crate.

    +

    However, because they are absolute within a crate, adding or removing a single +node in the AST causes all the subsequent NodeIds to change. This renders +NodeIds pretty much useless for incremental compilation, where you want as +few things as possible to change.

    +

    NodeIds are used in all the rustc bits that operate directly on the AST, +like macro expansion and name resolution (more on these over the next couple chapters).

    +

    Parsing

    +

    The parser is defined in rustc_parse, along with a +high-level interface to the lexer and some validation routines that run after +macro expansion. In particular, the rustc_parse::parser contains +the parser implementation.

    +

    The main entrypoint to the parser is via the various parse_* functions and others in +rustc_parse. They let you do things like turn a SourceFile +(e.g. the source in a single file) into a token stream, create a parser from +the token stream, and then execute the parser to get a Crate (the root AST +node).

    +

    To minimize the amount of copying that is done, +both Lexer and Parser have lifetimes which bind them to the parent ParseSess. +This contains all the information needed while parsing, as well as the SourceMap itself.

    +

    Note that while parsing, we may encounter macro definitions or invocations. +We set these aside to be expanded (see Macro Expansion). +Expansion itself may require parsing the output of a macro, which may reveal more macros to be expanded, and so on.

    +

    More on lexical analysis

    +

    Code for lexical analysis is split between two crates:

    +
      +
    • +

      rustc_lexer crate is responsible for breaking a &str into chunks +constituting tokens. Although it is popular to implement lexers as generated +finite state machines, the lexer in rustc_lexer is hand-written.

      +
    • +
    • +

      Lexer integrates rustc_lexer with data structures specific to +rustc. Specifically, it adds Span information to tokens returned by +rustc_lexer and interns identifiers.

      +
    • +
    +

    Macro expansion

    + +

    Rust has a very powerful macro system. In the previous chapter, we saw how +the parser sets aside macros to be expanded (using temporary placeholders). +This chapter is about the process of expanding those macros iteratively until +we have a complete Abstract Syntax Tree (AST) for our crate with no +unexpanded macros (or a compile error).

    +

    First, we discuss the algorithm that expands and integrates macro output into +ASTs. Next, we take a look at how hygiene data is collected. Finally, we look +at the specifics of expanding different types of macros.

    +

    Many of the algorithms and data structures described below are in rustc_expand, +with fundamental data structures in rustc_expand::base.

    +

    Also of note, cfg and cfg_attr are treated specially from other macros, and are +handled in rustc_expand::config.

    +

    Expansion and AST Integration

    +

    Firstly, expansion happens at the crate level. Given a raw source code for +a crate, the compiler will produce a massive AST with all macros expanded, all +modules inlined, etc. The primary entry point for this process is the +MacroExpander::fully_expand_fragment method. With few exceptions, we +use this method on the whole crate (see "Eager Expansion" +below for more detailed discussion of edge case expansion issues).

    +

    At a high level, fully_expand_fragment works in iterations. We keep a +queue of unresolved macro invocations (i.e. macros we haven't found the +definition of yet). We repeatedly try to pick a macro from the queue, resolve +it, expand it, and integrate it back. If we can't make progress in an +iteration, this represents a compile error. Here is the algorithm:

    +
      +
    1. Initialize a queue of unresolved macros.
    2. +
    3. Repeat until queue is empty (or we make no progress, which is an error): +
        +
      1. Resolve imports in our partially built crate as +much as possible.
      2. +
      3. Collect as many macro Invocations as possible from our +partially built crate (fn-like, attributes, derives) and add them to the +queue.
      4. +
      5. Dequeue the first element and attempt to resolve it.
      6. +
      7. If it's resolved: +
          +
        1. Run the macro's expander function that consumes a TokenStream or +AST and produces a TokenStream or AstFragment (depending on +the macro kind). (A TokenStream is a collection of TokenTrees, +each of which are a token (punctuation, identifier, or literal) or a +delimited group (anything inside ()/[]/{})). +
            +
          • At this point, we know everything about the macro itself and can +call set_expn_data to fill in its properties in the global +data; that is the hygiene data associated with ExpnId (see +Hygiene below).
          • +
          +
        2. +
        3. Integrate that piece of AST into the currently-existing though +partially-built AST. This is essentially where the "token-like mass" +becomes a proper set-in-stone AST with side-tables. It happens as +follows: +
            +
          • If the macro produces tokens (e.g. a proc macro), we parse into +an AST, which may produce parse errors.
          • +
          • During expansion, we create SyntaxContexts (hierarchy 2) (see +Hygiene below).
          • +
          • These three passes happen one after another on every AST fragment +freshly expanded from a macro: + +
          • +
          +
        4. +
        5. After expanding a single macro and integrating its output, continue +to the next iteration of fully_expand_fragment.
        6. +
        +
      8. +
      9. If it's not resolved: +
          +
        1. Put the macro back in the queue.
        2. +
        3. Continue to next iteration...
        4. +
        +
      10. +
      +
    4. +
    +

    Error Recovery

    +

    If we make no progress in an iteration we have reached a compilation error +(e.g. an undefined macro). We attempt to recover from failures (i.e. +unresolved macros or imports) with the intent of generating diagnostics. +Failure recovery happens by expanding unresolved macros into +ExprKind::Err and allows compilation to continue past the first error +so that rustc can report more errors than just the original failure.

    +

    Name Resolution

    +

    Notice that name resolution is involved here: we need to resolve imports and +macro names in the above algorithm. This is done in +rustc_resolve::macros, which resolves macro paths, validates +those resolutions, and reports various errors (e.g. "not found", "found, but +it's unstable", "expected x, found y"). However, we don't try to resolve +other names yet. This happens later, as we will see in the chapter: Name +Resolution.

    +

    Eager Expansion

    +

    Eager expansion means we expand the arguments of a macro invocation before +the macro invocation itself. This is implemented only for a few special +built-in macros that expect literals; expanding arguments first for some of +these macro results in a smoother user experience. As an example, consider +the following:

    +
    macro bar($i: ident) { $i }
    +macro foo($i: ident) { $i }
    +
    +foo!(bar!(baz));
    +

    A lazy-expansion would expand foo! first. An eager-expansion would expand +bar! first.

    +

    Eager-expansion is not a generally available feature of Rust. Implementing +eager-expansion more generally would be challenging, so we implement it for a +few special built-in macros for the sake of user-experience. The built-in +macros are implemented in rustc_builtin_macros, along with some other +early code generation facilities like injection of standard library imports or +generation of test harness. There are some additional helpers for building +AST fragments in rustc_expand::build. Eager-expansion generally +performs a subset of the things that lazy (normal) expansion does. It is done +by invoking fully_expand_fragment on only part of a crate (as opposed +to the whole crate, like we normally do).

    +

    Other Data Structures

    +

    Here are some other notable data structures involved in expansion and +integration:

    +
      +
    • ResolverExpand - a trait used to break crate dependencies. This allows the +resolver services to be used in rustc_ast, despite rustc_resolve and +pretty much everything else depending on rustc_ast.
    • +
    • ExtCtxt/ExpansionData - holds various intermediate expansion +infrastructure data.
    • +
    • Annotatable - a piece of AST that can be an attribute target, almost the same +thing as AstFragment except for types and patterns that can be produced by +macros but cannot be annotated with attributes.
    • +
    • MacResult - a "polymorphic" AST fragment, something that can turn into +a different AstFragment depending on its AstFragmentKind (i.e. an item, +expression, pattern, etc).
    • +
    +

    Hygiene and Hierarchies

    +

    If you have ever used the C/C++ preprocessor macros, you know that there are some +annoying and hard-to-debug gotchas! For example, consider the following C code:

    +
    #define DEFINE_FOO struct Bar {int x;}; struct Foo {Bar bar;};
    +
    +// Then, somewhere else
    +struct Bar {
    +    ...
    +};
    +
    +DEFINE_FOO
    +
    +

    Most people avoid writing C like this – and for good reason: it doesn't +compile. The struct Bar defined by the macro clashes names with the struct Bar defined in the code. Consider also the following example:

    +
    #define DO_FOO(x) {\
    +    int y = 0;\
    +    foo(x, y);\
    +    }
    +
    +// Then elsewhere
    +int y = 22;
    +DO_FOO(y);
    +
    +

    Do you see the problem? We wanted to generate a call foo(22, 0), but instead +we got foo(0, 0) because the macro defined its own y!

    +

    These are both examples of macro hygiene issues. Hygiene relates to how to +handle names defined within a macro. In particular, a hygienic macro system +prevents errors due to names introduced within a macro. Rust macros are hygienic +in that they do not allow one to write the sorts of bugs above.

    +

    At a high level, hygiene within the Rust compiler is accomplished by keeping +track of the context where a name is introduced and used. We can then +disambiguate names based on that context. Future iterations of the macro system +will allow greater control to the macro author to use that context. For example, +a macro author may want to introduce a new name to the context where the macro +was called. Alternately, the macro author may be defining a variable for use +only within the macro (i.e. it should not be visible outside the macro).

    +

    The context is attached to AST nodes. All AST nodes generated by macros have +context attached. Additionally, there may be other nodes that have context +attached, such as some desugared syntax (non-macro-expanded nodes are +considered to just have the "root" context, as described below). +Throughout the compiler, we use rustc_span::Spans to refer to code locations. +This struct also has hygiene information attached to it, as we will see later.

    +

    Because macros invocations and definitions can be nested, the syntax context of +a node must be a hierarchy. For example, if we expand a macro and there is +another macro invocation or definition in the generated output, then the syntax +context should reflect the nesting.

    +

    However, it turns out that there are actually a few types of context we may +want to track for different purposes. Thus, there are not just one but three +expansion hierarchies that together comprise the hygiene information for a +crate.

    +

    All of these hierarchies need some sort of "macro ID" to identify individual +elements in the chain of expansions. This ID is ExpnId. All macros receive +an integer ID, assigned continuously starting from 0 as we discover new macro +calls. All hierarchies start at ExpnId::root, which is its own +parent.

    +

    The rustc_span::hygiene crate contains all of the hygiene-related algorithms +(with the exception of some hacks in Resolver::resolve_crate_root) +and structures related to hygiene and expansion that are kept in global data.

    +

    The actual hierarchies are stored in HygieneData. This is a global +piece of data containing hygiene and expansion info that can be accessed from +any Ident without any context.

    +

    The Expansion Order Hierarchy

    +

    The first hierarchy tracks the order of expansions, i.e., when a macro +invocation is in the output of another macro.

    +

    Here, the children in the hierarchy will be the "innermost" tokens. The +ExpnData struct itself contains a subset of properties from both macro +definition and macro call available through global data. +ExpnData::parent tracks the child-to-parent link in this hierarchy.

    +

    For example:

    +
    macro_rules! foo { () => { println!(); } }
    +
    +fn main() { foo!(); }
    +

    In this code, the AST nodes that are finally generated would have hierarchy +root -> id(foo) -> id(println).

    +

    The Macro Definition Hierarchy

    +

    The second hierarchy tracks the order of macro definitions, i.e., when we are +expanding one macro another macro definition is revealed in its output. This +one is a bit tricky and more complex than the other two hierarchies.

    +

    SyntaxContext represents a whole chain in this hierarchy via an ID. +SyntaxContextData contains data associated with the given +SyntaxContext; mostly it is a cache for results of filtering that chain in +different ways. SyntaxContextData::parent is the child-to-parent +link here, and SyntaxContextData::outer_expns are individual +elements in the chain. The "chaining-operator" is +SyntaxContext::apply_mark in compiler code.

    +

    A Span, mentioned above, is actually just a compact representation of +a code location and SyntaxContext. Likewise, an Ident is just an interned +Symbol + Span (i.e. an interned string + hygiene data).

    +

    For built-in macros, we use the context: +SyntaxContext::empty().apply_mark(expn_id), and such macros are +considered to be defined at the hierarchy root. We do the same for proc macros because we haven't implemented cross-crate hygiene yet.

    +

    If the token had context X before being produced by a macro then after being +produced by the macro it has context X -> macro_id. Here are some examples:

    +

    Example 0:

    +
    macro m() { ident }
    +
    +m!();
    +

    Here ident which initially has context SyntaxContext::root has +context ROOT -> id(m) after it's produced by m.

    +

    Example 1:

    +
    macro m() { macro n() { ident } }
    +
    +m!();
    +n!();
    +

    In this example the ident has context ROOT initially, then ROOT -> id(m) +after the first expansion, then ROOT -> id(m) -> id(n).

    +

    Example 2:

    +

    Note that these chains are not entirely determined by their last element, in +other words ExpnId is not isomorphic to SyntaxContext.

    +
    macro m($i: ident) { macro n() { ($i, bar) } }
    +
    +m!(foo);
    +

    After all expansions, foo has context ROOT -> id(n) and bar has context +ROOT -> id(m) -> id(n).

    +

    Currently this hierarchy for tracking macro definitions is subject to the +so-called "context transplantation hack". Modern (i.e. experimental) +macros have stronger hygiene than the legacy "Macros By Example" (MBE) +system which can result in weird interactions between the two. The hack is +intended to make things "just work" for now.

    +

    The Call-site Hierarchy

    +

    The third and final hierarchy tracks the location of macro invocations.

    +

    In this hierarchy ExpnData::call_site is the child -> parent +link.

    +

    Here is an example:

    +
    macro bar($i: ident) { $i }
    +macro foo($i: ident) { $i }
    +
    +foo!(bar!(baz));
    +

    For the baz AST node in the final output, the expansion-order hierarchy is +ROOT -> id(foo) -> id(bar) -> baz, while the call-site hierarchy is ROOT -> baz.

    +

    Macro Backtraces

    +

    Macro backtraces are implemented in rustc_span using the hygiene machinery +in rustc_span::hygiene.

    +

    Producing Macro Output

    +

    Above, we saw how the output of a macro is integrated into the AST for a crate, +and we also saw how the hygiene data for a crate is generated. But how do we +actually produce the output of a macro? It depends on the type of macro.

    +

    There are two types of macros in Rust:

    +
      +
    1. macro_rules! macros (a.k.a. "Macros By Example" (MBE)), and,
    2. +
    3. procedural macros (proc macros); including custom derives.
    4. +
    +

    During the parsing phase, the normal Rust parser will set aside the contents of +macros and their invocations. Later, macros are expanded using these +portions of the code.

    +

    Some important data structures/interfaces here:

    + +

    Macros By Example

    +

    MBEs have their own parser distinct from the Rust parser. When macros are +expanded, we may invoke the MBE parser to parse and expand a macro. The +MBE parser, in turn, may call the Rust parser when it needs to bind a +metavariable (e.g. $my_expr) while parsing the contents of a macro +invocation. The code for macro expansion is in +compiler/rustc_expand/src/mbe/.

    +

    Example

    +
    macro_rules! printer {
    +    (print $mvar:ident) => {
    +        println!("{}", $mvar);
    +    };
    +    (print twice $mvar:ident) => {
    +        println!("{}", $mvar);
    +        println!("{}", $mvar);
    +    };
    +}
    +

    Here $mvar is called a metavariable. Unlike normal variables, rather than +binding to a value at runtime, a metavariable binds at compile time to a +tree of tokens. A token is a single "unit" of the grammar, such as an +identifier (e.g. foo) or punctuation (e.g. =>). There are also other +special tokens, such as EOF, which its self indicates that there are no more +tokens. There are token trees resulting from the paired parentheses-like +characters ((...), [...], and {...}) – they include the open and +close and all the tokens in between (Rust requires that parentheses-like +characters be balanced). Having macro expansion operate on token streams +rather than the raw bytes of a source-file abstracts away a lot of complexity. +The macro expander (and much of the rest of the compiler) doesn't consider +the exact line and column of some syntactic construct in the code; it considers +which constructs are used in the code. Using tokens allows us to care about +what without worrying about where. For more information about tokens, see +the Parsing chapter of this book.

    +
    printer!(print foo); // `foo` is a variable
    +

    The process of expanding the macro invocation into the syntax tree +println!("{}", foo) and then expanding the syntax tree into a call to +Display::fmt is one common example of macro expansion.

    +

    The MBE parser

    +

    There are two parts to MBE expansion done by the macro parser:

    +
      +
    1. parsing the definition, and,
    2. +
    3. parsing the invocations.
    4. +
    +

    We think of the MBE parser as a nondeterministic finite automaton (NFA) based +regex parser since it uses an algorithm similar in spirit to the Earley +parsing algorithm. The macro +parser is defined in +compiler/rustc_expand/src/mbe/macro_parser.rs.

    +

    The interface of the macro parser is as follows (this is slightly simplified):

    +
    fn parse_tt(
    +    &mut self,
    +    parser: &mut Cow<'_, Parser<'_>>,
    +    matcher: &[MatcherLoc]
    +) -> ParseResult
    +

    We use these items in macro parser:

    +
      +
    • a parser variable is a reference to the state of a normal Rust parser, +including the token stream and parsing session. The token stream is what we +are about to ask the MBE parser to parse. We will consume the raw stream of +tokens and output a binding of metavariables to corresponding token trees. +The parsing session can be used to report parser errors.
    • +
    • a matcher variable is a sequence of MatcherLocs that we want to match +the token stream against. They're converted from token trees before matching.
    • +
    +

    In the analogy of a regex parser, the token stream is the input and we are +matching it against the pattern defined by matcher. Using our examples, the +token stream could be the stream of tokens containing the inside of the example +invocation print foo, while matcher might be the sequence of token (trees) +print $mvar:ident.

    +

    The output of the parser is a ParseResult, which indicates which of +three cases has occurred:

    +
      +
    • Success: the token stream matches the given matcher and we have produced a +binding from metavariables to the corresponding token trees.
    • +
    • Failure: the token stream does not match matcher and results in an error +message such as "No rule expected token ...".
    • +
    • Error: some fatal error has occurred in the parser. For example, this +happens if there is more than one pattern match, since that indicates the +macro is ambiguous.
    • +
    +

    The full interface is defined here.

    +

    The macro parser does pretty much exactly the same as a normal regex parser +with one exception: in order to parse different types of metavariables, such as +ident, block, expr, etc., the macro parser must call back to the normal +Rust parser. Both the definition and invocation of macros are parsed using +the parser in a process which is non-intuitively self-referential.

    +

    The code to parse macro definitions is in +compiler/rustc_expand/src/mbe/macro_rules.rs. It defines the +pattern for matching a macro definition as $( $lhs:tt => $rhs:tt );+. In +other words, a macro_rules definition should have in its body at least one +occurrence of a token tree followed by => followed by another token tree. +When the compiler comes to a macro_rules definition, it uses this pattern to +match the two token trees per the rules of the definition of the macro, thereby +utilizing the macro parser itself. In our example definition, the +metavariable $lhs would match the patterns of both arms: (print $mvar:ident) and (print twice $mvar:ident). And $rhs would match the +bodies of both arms: { println!("{}", $mvar); } and { println!("{}", $mvar); println!("{}", $mvar); }. The parser keeps this knowledge around for when it +needs to expand a macro invocation.

    +

    When the compiler comes to a macro invocation, it parses that invocation using +a NFA-based macro parser described above. However, the matcher variable +used is the first token tree ($lhs) extracted from the arms of the macro +definition. Using our example, we would try to match the token stream print foo from the invocation against the matchers print $mvar:ident and print twice $mvar:ident that we previously extracted from the definition. The +algorithm is exactly the same, but when the macro parser comes to a place in the +current matcher where it needs to match a non-terminal (e.g. $mvar:ident), +it calls back to the normal Rust parser to get the contents of that +non-terminal. In this case, the Rust parser would look for an ident token, +which it finds (foo) and returns to the macro parser. Then, the macro parser +proceeds in parsing as normal. Also, note that exactly one of the matchers from +the various arms should match the invocation; if there is more than one match, +the parse is ambiguous, while if there are no matches at all, there is a syntax +error.

    +

    For more information about the macro parser's implementation, see the comments +in compiler/rustc_expand/src/mbe/macro_parser.rs.

    +

    Procedural Macros

    +

    Procedural macros are also expanded during parsing. However, rather than +having a parser in the compiler, proc macros are implemented as custom, +third-party crates. The compiler will compile the proc macro crate and +specially annotated functions in them (i.e. the proc macro itself), passing +them a stream of tokens. A proc macro can then transform the token stream and +output a new token stream, which is synthesized into the AST.

    +

    The token stream type used by proc macros is stable, so rustc does not +use it internally. The compiler's (unstable) token stream is defined in +rustc_ast::tokenstream::TokenStream. This is converted into the +stable proc_macro::TokenStream and back in +rustc_expand::proc_macro and rustc_expand::proc_macro_server. +Since the Rust ABI is currently unstable, we use the C ABI for this conversion.

    + +

    Custom Derive

    +

    Custom derives are a special type of proc macro.

    +

    Macros By Example and Macros 2.0

    +

    There is an legacy and mostly undocumented effort to improve the MBE system +by giving it more hygiene-related features, better scoping and visibility +rules, etc. Internally this uses the same machinery as today's MBEs with some +additional syntactic sugar and are allowed to be in namespaces.

    + +

    Name resolution

    + +

    In the previous chapters, we saw how the Abstract Syntax Tree (AST) +is built with all macros expanded. We saw how doing that requires doing some +name resolution to resolve imports and macro names. In this chapter, we show +how this is actually done and more.

    +

    In fact, we don't do full name resolution during macro expansion -- we only +resolve imports and macros at that time. This is required to know what to even +expand. Later, after we have the whole AST, we do full name resolution to +resolve all names in the crate. This happens in rustc_resolve::late. +Unlike during macro expansion, in this late expansion, we only need to try to +resolve a name once, since no new names can be added. If we fail to resolve a +name, then it is a compiler error.

    +

    Name resolution is complex. There are different namespaces (e.g. +macros, values, types, lifetimes), and names may be valid at different (nested) +scopes. Also, different types of names can fail resolution differently, and +failures can happen differently at different scopes. For example, in a module +scope, failure means no unexpanded macros and no unresolved glob imports in +that module. On the other hand, in a function body scope, failure requires that a +name be absent from the block we are in, all outer scopes, and the global +scope.

    +

    Basics

    +

    In our programs we refer to variables, types, functions, etc, by giving them +a name. These names are not always unique. For example, take this valid Rust +program:

    +
    #![allow(unused)]
    +fn main() {
    +type x = u32;
    +let x: x = 1;
    +let y: x = 2;
    +}
    +

    How do we know on line 3 whether x is a type (u32) or a value (1)? These +conflicts are resolved during name resolution. In this specific case, name +resolution defines that type names and variable names live in separate +namespaces and therefore can co-exist.

    +

    The name resolution in Rust is a two-phase process. In the first phase, which runs +during macro expansion, we build a tree of modules and resolve imports. Macro +expansion and name resolution communicate with each other via the +ResolverAstLoweringExt trait.

    +

    The input to the second phase is the syntax tree, produced by parsing input +files and expanding macros. This phase produces links from all the names in the +source to relevant places where the name was introduced. It also generates +helpful error messages, like typo suggestions, traits to import or lints about +unused items.

    +

    A successful run of the second phase (Resolver::resolve_crate) creates kind +of an index the rest of the compilation may use to ask about the present names +(through the hir::lowering::Resolver interface).

    +

    The name resolution lives in the rustc_resolve crate, with the bulk in +lib.rs and some helpers or symbol-type specific logic in the other modules.

    +

    Namespaces

    +

    Different kind of symbols live in different namespaces ‒ e.g. types don't +clash with variables. This usually doesn't happen, because variables start with +lower-case letter while types with upper-case one, but this is only a +convention. This is legal Rust code that will compile (with warnings):

    +
    #![allow(unused)]
    +fn main() {
    +type x = u32;
    +let x: x = 1;
    +let y: x = 2; // See? x is still a type here.
    +}
    +

    To cope with this, and with slightly different scoping rules for these +namespaces, the resolver keeps them separated and builds separate structures for +them.

    +

    In other words, when the code talks about namespaces, it doesn't mean the module +hierarchy, it's types vs. values vs. macros.

    +

    Scopes and ribs

    +

    A name is visible only in certain area in the source code. This forms a +hierarchical structure, but not necessarily a simple one ‒ if one scope is +part of another, it doesn't mean a name visible in the outer scope is also +visible in the inner scope, or that it refers to the same thing.

    +

    To cope with that, the compiler introduces the concept of Ribs. This is +an abstraction of a scope. Every time the set of visible names potentially changes, +a new Rib is pushed onto a stack. The places where this can happen include for +example:

    +
      +
    • The obvious places ‒ curly braces enclosing a block, function boundaries, +modules.
    • +
    • Introducing a let binding ‒ this can shadow another binding with the same +name.
    • +
    • Macro expansion border ‒ to cope with macro hygiene.
    • +
    +

    When searching for a name, the stack of ribs is traversed from the innermost +outwards. This helps to find the closest meaning of the name (the one not +shadowed by anything else). The transition to outer Rib may also affect +what names are usable ‒ if there are nested functions (not closures), +the inner one can't access parameters and local bindings of the outer one, +even though they should be visible by ordinary scoping rules. An example:

    +
    #![allow(unused)]
    +fn main() {
    +fn do_something<T: Default>(val: T) { // <- New rib in both types and values (1)
    +    // `val` is accessible, as is the helper function
    +    // `T` is accessible
    +   let helper = || { // New rib on the block (2)
    +        // `val` is accessible here
    +    }; // End of (2), new rib on `helper` (3)
    +    // `val` is accessible, `helper` variable shadows `helper` function
    +    fn helper() { // <- New rib in both types and values (4)
    +        // `val` is not accessible here, (4) is not transparent for locals
    +        // `T` is not accessible here
    +    } // End of (4)
    +    let val = T::default(); // New rib (5)
    +    // `val` is the variable, not the parameter here
    +} // End of (5), (3) and (1)
    +}
    +

    Because the rules for different namespaces are a bit different, each namespace +has its own independent Rib stack that is constructed in parallel to the others. +In addition, there's also a Rib stack for local labels (e.g. names of loops or +blocks), which isn't a full namespace in its own right.

    +

    Overall strategy

    +

    To perform the name resolution of the whole crate, the syntax tree is traversed +top-down and every encountered name is resolved. This works for most kinds of +names, because at the point of use of a name it is already introduced in the Rib +hierarchy.

    +

    There are some exceptions to this. Items are bit tricky, because they can be +used even before encountered ‒ therefore every block needs to be first scanned +for items to fill in its Rib.

    +

    Other, even more problematic ones, are imports which need recursive fixed-point +resolution and macros, that need to be resolved and expanded before the rest of +the code can be processed.

    +

    Therefore, the resolution is performed in multiple stages.

    +

    Speculative crate loading

    +

    To give useful errors, rustc suggests importing paths into scope if they're +not found. How does it do this? It looks through every module of every crate +and looks for possible matches. This even includes crates that haven't yet +been loaded!

    +

    Eagerly loading crates to include import suggestions that haven't yet been +loaded is called speculative crate loading, because any errors it encounters +shouldn't be reported: rustc_resolve decided to load them, not the user. The function +that does this is lookup_import_candidates and lives in +rustc_resolve::diagnostics.

    +

    To tell the difference between speculative loads and loads initiated by the +user, rustc_resolve passes around a record_used parameter, which is false when +the load is speculative.

    +

    TODO: #16

    +

    This is a result of the first pass of learning the code. It is definitely +incomplete and not detailed enough. It also might be inaccurate in places. +Still, it probably provides useful first guidepost to what happens in there.

    +
      +
    • What exactly does it link to and how is that published and consumed by +following stages of compilation?
    • +
    • Who calls it and how it is actually used.
    • +
    • Is it a pass and then the result is only used, or can it be computed +incrementally?
    • +
    • The overall strategy description is a bit vague.
    • +
    • Where does the name Rib come from?
    • +
    • Does this thing have its own tests, or is it tested only as part of some e2e +testing?
    • +
    +

    Attributes

    +

    Attributes come in two types: inert (or built-in) and active (non-builtin).

    +

    Builtin/inert attributes

    +

    These attributes are defined in the compiler itself, in +compiler/rustc_feature/src/builtin_attrs.rs.

    +

    Examples include #[allow] and #[macro_use].

    +

    These attributes have several important characteristics:

    +
      +
    • They are always in scope, and do not participate in typical path-based resolution.
    • +
    • They cannot be renamed. For example, use allow as foo will compile, but writing #[foo] will +produce an error.
    • +
    • They are 'inert', meaning they are left as-is by the macro expansion code. +As a result, any behavior comes as a result of the compiler explicitly checking for their presence. +For example, lint-related code explicitly checks for #[allow], #[warn], #[deny], and +#[forbid], rather than the behavior coming from the expansion of the attributes themselves.
    • +
    +

    'Non-builtin'/'active' attributes

    +

    These attributes are defined by a crate - either the standard library, or a proc-macro crate.

    +

    Important: Many non-builtin attributes, such as #[derive], are still considered part of the +core Rust language. However, they are not called 'builtin attributes', since they have a +corresponding definition in the standard library.

    +

    Definitions of non-builtin attributes take two forms:

    +
      +
    1. Proc-macro attributes, defined via a function annotated with #[proc_macro_attribute] in a +proc-macro crate.
    2. +
    3. AST-based attributes, defined in the standard library. These attributes have special 'stub' +macros defined in places like library/core/src/macros/mod.rs.
    4. +
    +

    These definitions exist to allow the macros to participate in typical path-based resolution - they +can be imported, re-exported, and renamed just like any other item definition. However, the body of +the definition is empty. Instead, the macro is annotated with the #[rustc_builtin_macro] +attribute, which tells the compiler to run a corresponding function in rustc_builtin_macros.

    +

    All non-builtin attributes have the following characteristics:

    +
      +
    • Like all other definitions (e.g. structs), they must be brought into scope via an import. +Many standard library attributes are included in the prelude - this is why writing #[derive] +works without an import.
    • +
    • They participate in macro expansion. The implementation of the macro may leave the attribute +target unchanged, modify the target, produce new AST nodes, or remove the target entirely.
    • +
    +

    The #[test] attribute

    + +

    Many Rust programmers rely on a built-in attribute called #[test]. All +you have to do is mark a function and include some asserts like so:

    +
    #[test]
    +fn my_test() {
    +    assert!(2+2 == 4);
    +}
    +

    When this program is compiled using rustc --test or cargo test, it will +produce an executable that can run this, and any other test function. This +method of testing allows tests to live alongside code in an organic way. You +can even put tests inside private modules:

    +
    mod my_priv_mod {
    +    fn my_priv_func() -> bool {}
    +
    +    #[test]
    +    fn test_priv_func() {
    +        assert!(my_priv_func());
    +    }
    +}
    +

    Private items can thus be easily tested without worrying about how to expose +them to any sort of external testing apparatus. This is key to the +ergonomics of testing in Rust. Semantically, however, it's rather odd. +How does any sort of main function invoke these tests if they're not visible? +What exactly is rustc --test doing?

    +

    #[test] is implemented as a syntactic transformation inside the compiler's +rustc_ast. Essentially, it's a fancy macro that +rewrites the crate in 3 steps:

    +

    Step 1: Re-Exporting

    +

    As mentioned earlier, tests can exist inside private modules, so we need a +way of exposing them to the main function, without breaking any existing +code. To that end, rustc_ast will create local modules called +__test_reexports that recursively reexport tests. This expansion translates +the above example into:

    +
    mod my_priv_mod {
    +    fn my_priv_func() -> bool {}
    +
    +    pub fn test_priv_func() {
    +        assert!(my_priv_func());
    +    }
    +
    +    pub mod __test_reexports {
    +        pub use super::test_priv_func;
    +    }
    +}
    +

    Now, our test can be accessed as +my_priv_mod::__test_reexports::test_priv_func. For deeper module +structures, __test_reexports will reexport modules that contain tests, so a +test at a::b::my_test becomes +a::__test_reexports::b::__test_reexports::my_test. While this process seems +pretty safe, what happens if there is an existing __test_reexports module? +The answer: nothing.

    +

    To explain, we need to understand how Rust's Abstract Syntax Tree +represents identifiers. The name of every function, variable, module, +etc. is not stored as a string, but rather as an opaque Symbol which +is essentially an ID number for each identifier. The compiler keeps a separate +hashtable that allows us to recover the human-readable name of a Symbol when +necessary (such as when printing a syntax error). When the compiler generates +the __test_reexports module, it generates a new Symbol for the +identifier, so while the compiler-generated __test_reexports may share a name +with your hand-written one, it will not share a Symbol. This +technique prevents name collision during code generation and is the foundation +of Rust's macro hygiene.

    +

    Step 2: Harness generation

    +

    Now that our tests are accessible from the root of our crate, we need to do +something with them using rustc_ast generates a module like so:

    +
    #[main]
    +pub fn main() {
    +    extern crate test;
    +    test::test_main_static(&[&path::to::test1, /*...*/]);
    +}
    +

    Here path::to::test1 is a constant of type test::TestDescAndFn.

    +

    While this transformation is simple, it gives us a lot of insight into how +tests are actually run. The tests are aggregated into an array and passed to +a test runner called test_main_static. We'll come back to exactly what +TestDescAndFn is, but for now, the key takeaway is that there is a crate +called test that is part of Rust core, that implements all of the +runtime for testing. test's interface is unstable, so the only stable way +to interact with it is through the #[test] macro.

    +

    Step 3: Test object generation

    +

    If you've written tests in Rust before, you may be familiar with some of the +optional attributes available on test functions. For example, a test can be +annotated with #[should_panic] if we expect the test to cause a panic. It +looks something like this:

    +
    #[test]
    +#[should_panic]
    +fn foo() {
    +    panic!("intentional");
    +}
    +

    This means our tests are more than just simple functions, they have +configuration information as well. test encodes this configuration data into +a struct called TestDesc. For each test function in a crate, +rustc_ast will parse its attributes and generate a TestDesc +instance. It then combines the TestDesc and test function into the +predictably named TestDescAndFn struct, that test_main_static +operates on. +For a given test, the generated TestDescAndFn instance looks like so:

    +
    self::test::TestDescAndFn{
    +  desc: self::test::TestDesc{
    +    name: self::test::StaticTestName("foo"),
    +    ignore: false,
    +    should_panic: self::test::ShouldPanic::Yes,
    +    allow_fail: false,
    +  },
    +  testfn: self::test::StaticTestFn(||
    +    self::test::assert_test_result(::crate::__test_reexports::foo())),
    +}
    +

    Once we've constructed an array of these test objects, they're passed to the +test runner via the harness generated in Step 2.

    +

    Inspecting the generated code

    +

    On nightly rustc, there's an unstable flag called unpretty that you can use +to print out the module source after macro expansion:

    +
    $ rustc my_mod.rs -Z unpretty=hir
    +
    +

    Panicking in Rust

    + +

    Step 1: Invocation of the panic! macro.

    +

    There are actually two panic macros - one defined in core, and one defined in std. +This is due to the fact that code in core can panic. core is built before std, +but we want panics to use the same machinery at runtime, whether they originate in core +or std.

    +

    core definition of panic!

    +

    The core panic! macro eventually makes the following call (in library/core/src/panicking.rs):

    +
    #![allow(unused)]
    +fn main() {
    +// NOTE This function never crosses the FFI boundary; it's a Rust-to-Rust call
    +extern "Rust" {
    +    #[lang = "panic_impl"]
    +    fn panic_impl(pi: &PanicInfo<'_>) -> !;
    +}
    +
    +let pi = PanicInfo::internal_constructor(Some(&fmt), location);
    +unsafe { panic_impl(&pi) }
    +}
    +

    Actually resolving this goes through several layers of indirection:

    +
      +
    1. +

      In compiler/rustc_middle/src/middle/weak_lang_items.rs, panic_impl is +declared as 'weak lang item', with the symbol rust_begin_unwind. This is +used in rustc_hir_analysis/src/collect.rs to set the actual symbol name to +rust_begin_unwind.

      +

      Note that panic_impl is declared in an extern "Rust" block, +which means that core will attempt to call a foreign symbol called rust_begin_unwind +(to be resolved at link time)

      +
    2. +
    3. +

      In library/std/src/panicking.rs, we have this definition:

      +
    4. +
    +
    #![allow(unused)]
    +fn main() {
    +/// Entry point of panic from the core crate.
    +#[cfg(not(test))]
    +#[panic_handler]
    +#[unwind(allowed)]
    +pub fn begin_panic_handler(info: &PanicInfo<'_>) -> ! {
    +    ...
    +}
    +}
    +

    The special panic_handler attribute is resolved via compiler/rustc_middle/src/middle/lang_items. +The extract function converts the panic_handler attribute to a panic_impl lang item.

    +

    Now, we have a matching panic_handler lang item in the std. This function goes +through the same process as the extern { fn panic_impl } definition in core, ending +up with a symbol name of rust_begin_unwind. At link time, the symbol reference in core +will be resolved to the definition of std (the function called begin_panic_handler in the +Rust source).

    +

    Thus, control flow will pass from core to std at runtime. This allows panics from core +to go through the same infrastructure that other panics use (panic hooks, unwinding, etc)

    +

    std implementation of panic!

    +

    This is where the actual panic-related logic begins. In library/std/src/panicking.rs, +control passes to rust_panic_with_hook. This method is responsible +for invoking the global panic hook, and checking for double panics. Finally, +we call __rust_start_panic, which is provided by the panic runtime.

    +

    The call to __rust_start_panic is very weird - it is passed a *mut &mut dyn PanicPayload, +converted to an usize. Let's break this type down:

    +
      +
    1. +

      PanicPayload is an internal trait. It is implemented for PanicPayload +(a wrapper around the user-supplied payload type), and has a method +fn take_box(&mut self) -> *mut (dyn Any + Send). +This method takes the user-provided payload (T: Any + Send), +boxes it, and converts the box to a raw pointer.

      +
    2. +
    3. +

      When we call __rust_start_panic, we have an &mut dyn PanicPayload. +However, this is a fat pointer (twice the size of a usize). +To pass this to the panic runtime across an FFI boundary, we take a mutable +reference to this mutable reference (&mut &mut dyn PanicPayload), and convert it to a raw +pointer (*mut &mut dyn PanicPayload). The outer raw pointer is a thin pointer, since it points to +a Sized type (a mutable reference). Therefore, we can convert this thin pointer into a usize, +which is suitable for passing across an FFI boundary.

      +
    4. +
    +

    Finally, we call __rust_start_panic with this usize. We have now entered the panic runtime.

    +

    Step 2: The panic runtime

    +

    Rust provides two panic runtimes: panic_abort and panic_unwind. The user chooses +between them at build time via their Cargo.toml

    +

    panic_abort is extremely simple: its implementation of __rust_start_panic just aborts, +as you would expect.

    +

    panic_unwind is the more interesting case.

    +

    In its implementation of __rust_start_panic, we take the usize, convert +it back to a *mut &mut dyn PanicPayload, dereference it, and call take_box +on the &mut dyn PanicPayload. At this point, we have a raw pointer to the payload +itself (a *mut (dyn Send + Any)): that is, a raw pointer to the actual value +provided by the user who called panic!.

    +

    At this point, the platform-independent code ends. We now call into +platform-specific unwinding logic (e.g unwind). This code is +responsible for unwinding the stack, running any 'landing pads' associated +with each frame (currently, running destructors), and transferring control +to the catch_unwind frame.

    +

    Note that all panics either abort the process or get caught by some call to catch_unwind. +In particular, in std's runtime service, +the call to the user-provided main function is wrapped in catch_unwind.

    +

    AST validation

    +

    AST validation is a separate AST pass that visits each +item in the tree and performs simple checks. This pass +doesn't perform any complex analysis, type checking or +name resolution.

    +

    Before performing any validation, the compiler first expands +the macros. Then this pass performs validations to check +that each AST item is in the correct state. And when this pass +is done, the compiler runs the crate resolution pass.

    +

    Validations

    +

    Validations are defined in AstValidator type, which +itself is located in rustc_ast_passes crate. This +type implements various simple checks which emit errors +when certain language rules are broken.

    +

    In addition, AstValidator implements Visitor trait +that defines how to visit AST items (which can be functions, +traits, enums, etc).

    +

    For each item, visitor performs specific checks. For +example, when visiting a function declaration, +AstValidator checks that the function has:

    +
      +
    • no more than u16::MAX parameters;
    • +
    • c-variadic argument goes the last in the declaration;
    • +
    • documentation comments aren't applied to function parameters;
    • +
    • and other validations.
    • +
    +

    Feature Gate Checking

    +

    TODO: this chapter #1158

    +

    Lang items

    +

    The compiler has certain pluggable operations; that is, functionality that isn't hard-coded into +the language, but is implemented in libraries, with a special marker to tell the compiler it +exists. The marker is the attribute #[lang = "..."], and there are various different values of +..., i.e. various different 'lang items'.

    +

    Many such lang items can be implemented only in one sensible way, such as add (trait core::ops::Add) or future_trait (trait core::future::Future). Others can be overridden to +achieve some specific goals; for example, you can control your binary's entrypoint.

    +

    Features provided by lang items include:

    +
      +
    • overloadable operators via traits: the traits corresponding to the +==, <, dereference (*), +, etc. operators are all +marked with lang items; those specific four are eq, ord, +deref, and add respectively.
    • +
    • panicking and stack unwinding; the eh_personality, panic and +panic_bounds_checks lang items.
    • +
    • the traits in std::marker used to indicate properties of types used by the compiler; +lang items send, sync and copy.
    • +
    • the special marker types used for variance indicators found in +core::marker; lang item phantom_data.
    • +
    +

    Lang items are loaded lazily by the compiler; e.g. if one never uses Box +then there is no need to define functions for exchange_malloc and +box_free. rustc will emit an error when an item is needed but not found +in the current crate or any that it depends on.

    +

    Most lang items are defined by the core library, but if you're trying to build an +executable with #![no_std], you'll still need to define a few lang items that are +usually provided by std.

    +

    Retrieving a language item

    +

    You can retrieve lang items by calling tcx.lang_items().

    +

    Here's a small example of retrieving the trait Sized {} language item:

    +
    #![allow(unused)]
    +fn main() {
    +// Note that in case of `#![no_core]`, the trait is not available.
    +if let Some(sized_trait_def_id) = tcx.lang_items().sized_trait() {
    +    // do something with `sized_trait_def_id`
    +}
    +}
    +

    Note that sized_trait() returns an Option, not the DefId itself. +That's because language items are defined in the standard library, so if someone compiles with +#![no_core] (or for some lang items, #![no_std]), the lang item may not be present. +You can either:

    +
      +
    • Give a hard error if the lang item is necessary to continue (don't panic, since this can happen in +user code).
    • +
    • Proceed with limited functionality, by just omitting whatever you were going to do with the +DefId.
    • +
    +

    List of all language items

    +

    You can find language items in the following places:

    +
      +
    • An exhaustive reference in the compiler documentation: rustc_hir::LangItem
    • +
    • An auto-generated list with source locations by using ripgrep: rg '#\[.*lang =' library/
    • +
    +

    Note that language items are explicitly unstable and may change in any new release.

    +

    The HIR

    + +

    The HIR – "High-Level Intermediate Representation" – is the primary IR used +in most of rustc. It is a compiler-friendly representation of the abstract +syntax tree (AST) that is generated after parsing, macro expansion, and name +resolution (see Lowering for how the HIR is created). +Many parts of HIR resemble Rust surface syntax quite closely, with +the exception that some of Rust's expression forms have been desugared away. +For example, for loops are converted into a loop and do not appear in +the HIR. This makes HIR more amenable to analysis than a normal AST.

    +

    This chapter covers the main concepts of the HIR.

    +

    You can view the HIR representation of your code by passing the +-Z unpretty=hir-tree flag to rustc:

    +
    cargo rustc -- -Z unpretty=hir-tree
    +
    +

    You can also use the -Z unpretty=hir option to generate a HIR +that is closer to the original source code expression:

    +
    cargo rustc -- -Z unpretty=hir
    +
    +

    Out-of-band storage and the Crate type

    +

    The top-level data-structure in the HIR is the Crate, which stores +the contents of the crate currently being compiled (we only ever +construct HIR for the current crate). Whereas in the AST the crate +data structure basically just contains the root module, the HIR +Crate structure contains a number of maps and other things that +serve to organize the content of the crate for easier access.

    +

    For example, the contents of individual items (e.g. modules, +functions, traits, impls, etc) in the HIR are not immediately +accessible in the parents. So, for example, if there is a module item +foo containing a function bar():

    +
    #![allow(unused)]
    +fn main() {
    +mod foo {
    +    fn bar() { }
    +}
    +}
    +

    then in the HIR the representation of module foo (the Mod +struct) would only have the ItemId I of bar(). To get the +details of the function bar(), we would lookup I in the +items map.

    +

    One nice result from this representation is that one can iterate +over all items in the crate by iterating over the key-value pairs +in these maps (without the need to trawl through the whole HIR). +There are similar maps for things like trait items and impl items, +as well as "bodies" (explained below).

    +

    The other reason to set up the representation this way is for better +integration with incremental compilation. This way, if you gain access +to an &rustc_hir::Item (e.g. for the mod foo), you do not immediately +gain access to the contents of the function bar(). Instead, you only +gain access to the id for bar(), and you must invoke some +function to lookup the contents of bar() given its id; this gives +the compiler a chance to observe that you accessed the data for +bar(), and then record the dependency.

    +

    +

    Identifiers in the HIR

    +

    The HIR uses a bunch of different identifiers that coexist and serve different purposes.

    +
      +
    • +

      A DefId, as the name suggests, identifies a particular definition, or top-level +item, in a given crate. It is composed of two parts: a CrateNum which identifies +the crate the definition comes from, and a DefIndex which identifies the definition +within the crate. Unlike HirIds, there isn't a DefId for every expression, which +makes them more stable across compilations.

      +
    • +
    • +

      A LocalDefId is basically a DefId that is known to come from the current crate. +This allows us to drop the CrateNum part, and use the type system to ensure that +only local definitions are passed to functions that expect a local definition.

      +
    • +
    • +

      A HirId uniquely identifies a node in the HIR of the current crate. It is composed +of two parts: an owner and a local_id that is unique within the owner. This +combination makes for more stable values which are helpful for incremental compilation. +Unlike DefIds, a HirId can refer to fine-grained entities like expressions, +but stays local to the current crate.

      +
    • +
    • +

      A BodyId identifies a HIR Body in the current crate. It is currently only +a wrapper around a HirId. For more info about HIR bodies, please refer to the +HIR chapter.

      +
    • +
    +

    These identifiers can be converted into one another through the TyCtxt.

    +

    HIR Operations

    +

    Most of the time when you are working with the HIR, you will do so via +TyCtxt. It contains a number of methods, defined in the hir::map module and +mostly prefixed with hir_, to convert between IDs of various kinds and to +lookup data associated with a HIR node.

    +

    For example, if you have a LocalDefId, and you would like to convert it +to a HirId, you can use tcx.local_def_id_to_hir_id(def_id). +You need a LocalDefId, rather than a DefId, since only local items have HIR nodes.

    +

    Similarly, you can use tcx.hir_node(n) to lookup the node for a +HirId. This returns a Option<Node<'hir>>, where Node is an enum +defined in the map. By matching on this, you can find out what sort of +node the HirId referred to and also get a pointer to the data +itself. Often, you know what sort of node n is – e.g. if you know +that n must be some HIR expression, you can do +tcx.hir_expect_expr(n), which will extract and return the +&hir::Expr, panicking if n is not in fact an expression.

    +

    Finally, you can find the parents of nodes, via +calls like tcx.parent_hir_node(n).

    +

    HIR Bodies

    +

    A rustc_hir::Body represents some kind of executable code, such as the body +of a function/closure or the definition of a constant. Bodies are +associated with an owner, which is typically some kind of item +(e.g. an fn() or const), but could also be a closure expression +(e.g. |x, y| x + y). You can use the TyCtxt to find the body +associated with a given def-id (hir_maybe_body_owned_by) or to find +the owner of a body (hir_body_owner_def_id).

    +

    AST lowering

    +

    The AST lowering step converts AST to HIR. +This means many structures are removed if they are irrelevant +for type analysis or similar syntax agnostic analyses. Examples +of such structures include but are not limited to

    +
      +
    • Parenthesis +
        +
      • Removed without replacement, the tree structure makes order explicit
      • +
      +
    • +
    • for loops and while (let) loops +
        +
      • Converted to loop + match and some let bindings
      • +
      +
    • +
    • if let +
        +
      • Converted to match
      • +
      +
    • +
    • Universal impl Trait +
        +
      • Converted to generic arguments +(but with some flags, to know that the user didn't write them)
      • +
      +
    • +
    • Existential impl Trait +
        +
      • Converted to a virtual existential type declaration
      • +
      +
    • +
    +

    Lowering needs to uphold several invariants in order to not trigger the +sanity checks in compiler/rustc_passes/src/hir_id_validator.rs:

    +
      +
    1. A HirId must be used if created. So if you use the lower_node_id, +you must use the resulting NodeId or HirId (either is fine, since +any NodeIds in the HIR are checked for existing HirIds)
    2. +
    3. Lowering a HirId must be done in the scope of the owning item. +This means you need to use with_hir_id_owner if you are creating parts +of an item other than the one being currently lowered. This happens for +example during the lowering of existential impl Trait
    4. +
    5. A NodeId that will be placed into a HIR structure must be lowered, +even if its HirId is unused. Calling +let _ = self.lower_node_id(node_id); is perfectly legitimate.
    6. +
    7. If you are creating new nodes that didn't exist in the AST, you must +create new ids for them. This is done by calling the next_id method, +which produces both a new NodeId as well as automatically lowering it +for you so you also get the HirId.
    8. +
    +

    If you are creating new DefIds, since each DefId needs to have a +corresponding NodeId, it is advisable to add these NodeIds to the +AST so you don't have to generate new ones during lowering. This has +the advantage of creating a way to find the DefId of something via its +NodeId. If lowering needs this DefId in multiple places, you can't +generate a new NodeId in all those places because you'd also get a new +DefId then. With a NodeId from the AST this is not an issue.

    +

    Having the NodeId also allows the DefCollector to generate the DefIds +instead of lowering having to do it on the fly. Centralizing the DefId +generation in one place makes it easier to refactor and reason about.

    +

    HIR Debugging

    +

    Use the -Z unpretty=hir flag to produce a human-readable representation of the HIR. +For cargo projects this can be done with cargo rustc -- -Z unpretty=hir. +This output is useful when you need to see at a glance how your code was desugared and transformed +during AST lowering.

    +

    For a full Debug dump of the data in the HIR, use the -Z unpretty=hir-tree flag. +This may be useful when you need to see the full structure of the HIR from the perspective of the +compiler.

    +

    If you are trying to correlate NodeIds or DefIds with source code, the +-Z unpretty=expanded,identified flag may be useful.

    +

    TODO: anything else? #1159

    +

    The THIR

    +

    The THIR ("Typed High-Level Intermediate Representation"), previously called HAIR for +"High-Level Abstract IR", is another IR used by rustc that is generated after +type checking. It is (as of January 2024) used for +MIR construction, exhaustiveness checking, and unsafety checking.

    +

    As the name might suggest, the THIR is a lowered version of the HIR where all +the types have been filled in, which is possible after type checking has completed. +But it has some other interesting features that distinguish it from the HIR:

    +
      +
    • +

      Like the MIR, the THIR only represents bodies, i.e. "executable code"; this includes +function bodies, but also const initializers, for example. Specifically, all body owners have +THIR created. Consequently, the THIR has no representation for items like structs or traits.

      +
    • +
    • +

      Each body of THIR is only stored temporarily and is dropped as soon as it's no longer +needed, as opposed to being stored until the end of the compilation process (which +is what is done with the HIR).

      +
    • +
    • +

      Besides making the types of all nodes available, the THIR also has additional +desugaring compared to the HIR. For example, automatic references and dereferences +are made explicit, and method calls and overloaded operators are converted into +plain function calls. Destruction scopes are also made explicit.

      +
    • +
    • +

      Statements, expressions, and match arms are stored separately. For example, statements in the +stmts array reference expressions by their index (represented as a ExprId) in the exprs +array.

      +
    • +
    +

    The THIR lives in rustc_mir_build::thir. To construct a thir::Expr, +you can use the thir_body function, passing in the memory arena where the THIR +will be allocated. Dropping this arena will result in the THIR being destroyed, +which is useful to keep peak memory in check. Having a THIR representation of +all bodies of a crate in memory at the same time would be very heavy.

    +

    You can get a debug representation of the THIR by passing the -Zunpretty=thir-tree flag +to rustc.

    +

    To demonstrate, let's use the following example:

    +
    fn main() {
    +    let x = 1 + 2;
    +}
    +

    Here is how that gets represented in THIR (as of Aug 2022):

    +
    #![allow(unused)]
    +fn main() {
    +Thir {
    +    // no match arms
    +    arms: [],
    +    exprs: [
    +        // expression 0, a literal with a value of 1
    +        Expr {
    +            ty: i32,
    +            temp_lifetime: Some(
    +                Node(1),
    +            ),
    +            span: oneplustwo.rs:2:13: 2:14 (#0),
    +            kind: Literal {
    +                lit: Spanned {
    +                    node: Int(
    +                        1,
    +                        Unsuffixed,
    +                    ),
    +                    span: oneplustwo.rs:2:13: 2:14 (#0),
    +                },
    +                neg: false,
    +            },
    +        },
    +        // expression 1, scope surrounding literal 1
    +        Expr {
    +            ty: i32,
    +            temp_lifetime: Some(
    +                Node(1),
    +            ),
    +            span: oneplustwo.rs:2:13: 2:14 (#0),
    +            kind: Scope {
    +                // reference to expression 0 above
    +                region_scope: Node(3),
    +                lint_level: Explicit(
    +                    HirId {
    +                        owner: DefId(0:3 ~ oneplustwo[6932]::main),
    +                        local_id: 3,
    +                    },
    +                ),
    +                value: e0,
    +            },
    +        },
    +        // expression 2, literal 2
    +        Expr {
    +            ty: i32,
    +            temp_lifetime: Some(
    +                Node(1),
    +            ),
    +            span: oneplustwo.rs:2:17: 2:18 (#0),
    +            kind: Literal {
    +                lit: Spanned {
    +                    node: Int(
    +                        2,
    +                        Unsuffixed,
    +                    ),
    +                    span: oneplustwo.rs:2:17: 2:18 (#0),
    +                },
    +                neg: false,
    +            },
    +        },
    +        // expression 3, scope surrounding literal 2
    +        Expr {
    +            ty: i32,
    +            temp_lifetime: Some(
    +                Node(1),
    +            ),
    +            span: oneplustwo.rs:2:17: 2:18 (#0),
    +            kind: Scope {
    +                region_scope: Node(4),
    +                lint_level: Explicit(
    +                    HirId {
    +                        owner: DefId(0:3 ~ oneplustwo[6932]::main),
    +                        local_id: 4,
    +                    },
    +                ),
    +                // reference to expression 2 above
    +                value: e2,
    +            },
    +        },
    +        // expression 4, represents 1 + 2
    +        Expr {
    +            ty: i32,
    +            temp_lifetime: Some(
    +                Node(1),
    +            ),
    +            span: oneplustwo.rs:2:13: 2:18 (#0),
    +            kind: Binary {
    +                op: Add,
    +                // references to scopes surrounding literals above
    +                lhs: e1,
    +                rhs: e3,
    +            },
    +        },
    +        // expression 5, scope surrounding expression 4
    +        Expr {
    +            ty: i32,
    +            temp_lifetime: Some(
    +                Node(1),
    +            ),
    +            span: oneplustwo.rs:2:13: 2:18 (#0),
    +            kind: Scope {
    +                region_scope: Node(5),
    +                lint_level: Explicit(
    +                    HirId {
    +                        owner: DefId(0:3 ~ oneplustwo[6932]::main),
    +                        local_id: 5,
    +                    },
    +                ),
    +                value: e4,
    +            },
    +        },
    +        // expression 6, block around statement
    +        Expr {
    +            ty: (),
    +            temp_lifetime: Some(
    +                Node(9),
    +            ),
    +            span: oneplustwo.rs:1:11: 3:2 (#0),
    +            kind: Block {
    +                body: Block {
    +                    targeted_by_break: false,
    +                    region_scope: Node(8),
    +                    opt_destruction_scope: None,
    +                    span: oneplustwo.rs:1:11: 3:2 (#0),
    +                    // reference to statement 0 below
    +                    stmts: [
    +                        s0,
    +                    ],
    +                    expr: None,
    +                    safety_mode: Safe,
    +                },
    +            },
    +        },
    +        // expression 7, scope around block in expression 6
    +        Expr {
    +            ty: (),
    +            temp_lifetime: Some(
    +                Node(9),
    +            ),
    +            span: oneplustwo.rs:1:11: 3:2 (#0),
    +            kind: Scope {
    +                region_scope: Node(9),
    +                lint_level: Explicit(
    +                    HirId {
    +                        owner: DefId(0:3 ~ oneplustwo[6932]::main),
    +                        local_id: 9,
    +                    },
    +                ),
    +                value: e6,
    +            },
    +        },
    +        // destruction scope around expression 7
    +        Expr {
    +            ty: (),
    +            temp_lifetime: Some(
    +                Node(9),
    +            ),
    +            span: oneplustwo.rs:1:11: 3:2 (#0),
    +            kind: Scope {
    +                region_scope: Destruction(9),
    +                lint_level: Inherited,
    +                value: e7,
    +            },
    +        },
    +    ],
    +    stmts: [
    +        // let statement
    +        Stmt {
    +            kind: Let {
    +                remainder_scope: Remainder { block: 8, first_statement_index: 0},
    +                init_scope: Node(1),
    +                pattern: Pat {
    +                    ty: i32,
    +                    span: oneplustwo.rs:2:9: 2:10 (#0),
    +                    kind: Binding {
    +                        mutability: Not,
    +                        name: "x",
    +                        mode: ByValue,
    +                        var: LocalVarId(
    +                            HirId {
    +                                owner: DefId(0:3 ~ oneplustwo[6932]::main),
    +                                local_id: 7,
    +                            },
    +                        ),
    +                        ty: i32,
    +                        subpattern: None,
    +                        is_primary: true,
    +                    },
    +                },
    +                initializer: Some(
    +                    e5,
    +                ),
    +                else_block: None,
    +                lint_level: Explicit(
    +                    HirId {
    +                        owner: DefId(0:3 ~ oneplustwo[6932]::main),
    +                        local_id: 6,
    +                    },
    +                ),
    +            },
    +            opt_destruction_scope: Some(
    +                Destruction(1),
    +            ),
    +        },
    +    ],
    +}
    +}
    +

    The MIR (Mid-level IR)

    + +

    MIR is Rust's Mid-level Intermediate Representation. It is +constructed from HIR. MIR was introduced in +RFC 1211. It is a radically simplified form of Rust that is used for +certain flow-sensitive safety checks – notably the borrow checker! – +and also for optimization and code generation.

    +

    If you'd like a very high-level introduction to MIR, as well as some +of the compiler concepts that it relies on (such as control-flow +graphs and desugaring), you may enjoy the +rust-lang blog post that introduced MIR.

    +

    Introduction to MIR

    +

    MIR is defined in the compiler/rustc_middle/src/mir/ module, but much of the code +that manipulates it is found in compiler/rustc_mir_build, +compiler/rustc_mir_transform, and +compiler/rustc_mir_dataflow.

    +

    Some of the key characteristics of MIR are:

    +
      +
    • It is based on a control-flow graph.
    • +
    • It does not have nested expressions.
    • +
    • All types in MIR are fully explicit.
    • +
    +

    Key MIR vocabulary

    +

    This section introduces the key concepts of MIR, summarized here:

    +
      +
    • Basic blocks: units of the control-flow graph, consisting of: +
        +
      • statements: actions with one successor
      • +
      • terminators: actions with potentially multiple successors; always at +the end of a block
      • +
      • (if you're not familiar with the term basic block, see the background +chapter)
      • +
      +
    • +
    • Locals: Memory locations allocated on the stack (conceptually, at +least), such as function arguments, local variables, and +temporaries. These are identified by an index, written with a +leading underscore, like _1. There is also a special "local" +(_0) allocated to store the return value.
    • +
    • Places: expressions that identify a location in memory, like _1 or +_1.f.
    • +
    • Rvalues: expressions that produce a value. The "R" stands for +the fact that these are the "right-hand side" of an assignment. +
        +
      • Operands: the arguments to an rvalue, which can either be a +constant (like 22) or a place (like _1).
      • +
      +
    • +
    +

    You can get a feeling for how MIR is constructed by translating simple +programs into MIR and reading the pretty printed output. In fact, the +playground makes this easy, since it supplies a MIR button that will +show you the MIR for your program. Try putting this program into play +(or clicking on this link), and then clicking the "MIR" +button on the top:

    +
    fn main() {
    +    let mut vec = Vec::new();
    +    vec.push(1);
    +    vec.push(2);
    +}
    +

    You should see something like:

    +
    // WARNING: This output format is intended for human consumers only
    +// and is subject to change without notice. Knock yourself out.
    +fn main() -> () {
    +    ...
    +}
    +
    +

    This is the MIR format for the main function. +MIR shown by above link is optimized. +Some statements like StorageLive are removed in optimization. +This happens because the compiler notices the value is never accessed in the code. +We can use rustc [filename].rs -Z mir-opt-level=0 --emit mir to view unoptimized MIR. +This requires the nightly toolchain.

    +

    Variable declarations. If we drill in a bit, we'll see it begins +with a bunch of variable declarations. They look like this:

    +
    let mut _0: ();                      // return place
    +let mut _1: std::vec::Vec<i32>;      // in scope 0 at src/main.rs:2:9: 2:16
    +let mut _2: ();
    +let mut _3: &mut std::vec::Vec<i32>;
    +let mut _4: ();
    +let mut _5: &mut std::vec::Vec<i32>;
    +
    +

    You can see that variables in MIR don't have names, they have indices, +like _0 or _1. We also intermingle the user's variables (e.g., +_1) with temporary values (e.g., _2 or _3). You can tell apart +user-defined variables because they have debuginfo associated to them (see below).

    +

    User variable debuginfo. Below the variable declarations, we find the only +hint that _1 represents a user variable:

    +
    scope 1 {
    +    debug vec => _1;                 // in scope 1 at src/main.rs:2:9: 2:16
    +}
    +
    +

    Each debug <Name> => <Place>; annotation describes a named user variable, +and where (i.e. the place) a debugger can find the data of that variable. +Here the mapping is trivial, but optimizations may complicate the place, +or lead to multiple user variables sharing the same place. +Additionally, closure captures are described using the same system, and so +they're complicated even without optimizations, e.g.: debug x => (*((*_1).0: &T));.

    +

    The "scope" blocks (e.g., scope 1 { .. }) describe the lexical structure of +the source program (which names were in scope when), so any part of the program +annotated with // in scope 0 would be missing vec, if you were stepping +through the code in a debugger, for example.

    +

    Basic blocks. Reading further, we see our first basic block (naturally +it may look slightly different when you view it, and I am ignoring some of the +comments):

    +
    bb0: {
    +    StorageLive(_1);
    +    _1 = const <std::vec::Vec<T>>::new() -> bb2;
    +}
    +
    +

    A basic block is defined by a series of statements and a final +terminator. In this case, there is one statement:

    +
    StorageLive(_1);
    +
    +

    This statement indicates that the variable _1 is "live", meaning +that it may be used later – this will persist until we encounter a +StorageDead(_1) statement, which indicates that the variable _1 is +done being used. These "storage statements" are used by LLVM to +allocate stack space.

    +

    The terminator of the block bb0 is the call to Vec::new:

    +
    _1 = const <std::vec::Vec<T>>::new() -> bb2;
    +
    +

    Terminators are different from statements because they can have more +than one successor – that is, control may flow to different +places. Function calls like the call to Vec::new are always +terminators because of the possibility of unwinding, although in the +case of Vec::new we are able to see that indeed unwinding is not +possible, and hence we list only one successor block, bb2.

    +

    If we look ahead to bb2, we will see it looks like this:

    +
    bb2: {
    +    StorageLive(_3);
    +    _3 = &mut _1;
    +    _2 = const <std::vec::Vec<T>>::push(move _3, const 1i32) -> [return: bb3, unwind: bb4];
    +}
    +
    +

    Here there are two statements: another StorageLive, introducing the _3 +temporary, and then an assignment:

    +
    _3 = &mut _1;
    +
    +

    Assignments in general have the form:

    +
    <Place> = <Rvalue>
    +
    +

    A place is an expression like _3, _3.f or *_3 – it denotes a +location in memory. An Rvalue is an expression that creates a +value: in this case, the rvalue is a mutable borrow expression, which +looks like &mut <Place>. So we can kind of define a grammar for +rvalues like so:

    +
    <Rvalue>  = & (mut)? <Place>
    +          | <Operand> + <Operand>
    +          | <Operand> - <Operand>
    +          | ...
    +
    +<Operand> = Constant
    +          | copy Place
    +          | move Place
    +
    +

    As you can see from this grammar, rvalues cannot be nested – they can +only reference places and constants. Moreover, when you use a place, +we indicate whether we are copying it (which requires that the +place have a type T where T: Copy) or moving it (which works +for a place of any type). So, for example, if we had the expression x = a + b + c in Rust, that would get compiled to two statements and a +temporary:

    +
    TMP1 = a + b
    +x = TMP1 + c
    +
    +

    (Try it and see, though you may want to do release mode to skip +over the overflow checks.)

    +

    MIR data types

    +

    The MIR data types are defined in the compiler/rustc_middle/src/mir/ +module. Each of the key concepts mentioned in the previous section +maps in a fairly straightforward way to a Rust type.

    +

    The main MIR data type is Body. It contains the data for a single +function (along with sub-instances of Mir for "promoted constants", +but you can read about those below).

    +
      +
    • Basic blocks: The basic blocks are stored in the field +Body::basic_blocks; this is a vector +of BasicBlockData structures. Nobody ever references a +basic block directly: instead, we pass around BasicBlock +values, which are newtype'd indices into this vector.
    • +
    • Statements are represented by the type Statement.
    • +
    • Terminators are represented by the Terminator.
    • +
    • Locals are represented by a newtype'd index type Local. +The data for a local variable is found in the +Body::local_decls vector. There is also a special constant +RETURN_PLACE identifying the special "local" representing the return value.
    • +
    • Places are identified by the struct Place. There are a few +fields: +
        +
      • Local variables like _1
      • +
      • Projections, which are fields or other things that "project +out" from a base place. These are represented by the newtype'd type +ProjectionElem. So e.g. the place _1.f is a projection, +with f being the "projection element" and _1 being the base +path. *_1 is also a projection, with the * being represented +by the ProjectionElem::Deref element.
      • +
      +
    • +
    • Rvalues are represented by the enum Rvalue.
    • +
    • Operands are represented by the enum Operand.
    • +
    +

    Representing constants

    +

    When code has reached the MIR stage, constants can generally come in two forms: +MIR constants (mir::Constant) and type system constants (ty::Const). +MIR constants are used as operands: in x + CONST, CONST is a MIR constant; +similarly, in x + 2, 2 is a MIR constant. Type system constants are used in +the type system, in particular for array lengths but also for const generics.

    +

    Generally, both kinds of constants can be "unevaluated" or "already evaluated". +An unevaluated constant simply stores the DefId of what needs to be evaluated +to compute this result. An evaluated constant (a "value") has already been +computed; their representation differs between type system constants and MIR +constants: MIR constants evaluate to a mir::ConstValue; type system constants +evaluate to a ty::ValTree.

    +

    Type system constants have some more variants to support const generics: they +can refer to local const generic parameters, and they are subject to inference. +Furthermore, the mir::Constant::Ty variant lets us use an arbitrary type +system constant as a MIR constant; this happens whenever a const generic +parameter is used as an operand.

    +

    MIR constant values

    +

    In general, a MIR constant value (mir::ConstValue) was computed by evaluating +some constant the user wrote. This const evaluation produces +a very low-level representation of the result in terms of individual bytes. We +call this an "indirect" constant (mir::ConstValue::Indirect) since the value +is stored in-memory.

    +

    However, storing everything in-memory would be awfully inefficient. Hence there +are some other variants in mir::ConstValue that can represent certain simple +and common values more efficiently. In particular, everything that can be +directly written as a literal in Rust (integers, floats, chars, bools, but also +"string literals" and b"byte string literals") has an optimized variant that +avoids the full overhead of the in-memory representation.

    +

    ValTrees

    +

    An evaluated type system constant is a "valtree". The ty::ValTree datastructure +allows us to represent

    +
      +
    • arrays,
    • +
    • many structs,
    • +
    • tuples,
    • +
    • enums and,
    • +
    • most primitives.
    • +
    +

    The most important rule for +this representation is that every value must be uniquely represented. In other +words: a specific value must only be representable in one specific way. For example: there is only +one way to represent an array of two integers as a ValTree: +Branch([Leaf(first_int), Leaf(second_int)]). +Even though theoretically a [u32; 2] could be encoded in a u64 and thus just be a +Leaf(bits_of_two_u32), that is not a legal construction of ValTree +(and is very complex to do, so it is unlikely anyone is tempted to do so).

    +

    These rules also mean that some values are not representable. There can be no unions in type +level constants, as it is not clear how they should be represented, because their active variant +is unknown. Similarly there is no way to represent raw pointers, as addresses are unknown at +compile-time and thus we cannot make any assumptions about them. References on the other hand +can be represented, as equality for references is defined as equality on their value, so we +ignore their address and just look at the backing value. We must make sure that the pointer values +of the references are not observable at compile time. We thus encode &42 exactly like 42. +Any conversion from +valtree back to a MIR constant value must reintroduce an actual indirection. At codegen time the +addresses may be deduplicated between multiple uses or not, entirely depending on arbitrary +optimization choices.

    +

    As a consequence, all decoding of ValTree must happen by matching on the type first and making +decisions depending on that. The value itself gives no useful information without the type that +belongs to it.

    +

    + +

    See the const-eval WG's docs on promotion.

    +

    MIR construction

    + +

    The lowering of HIR to MIR occurs for the following (probably incomplete) +list of items:

    +
      +
    • Function and closure bodies
    • +
    • Initializers of static and const items
    • +
    • Initializers of enum discriminants
    • +
    • Glue and shims of any kind +
        +
      • Tuple struct initializer functions
      • +
      • Drop code (the Drop::drop function is not called directly)
      • +
      • Drop implementations of types without an explicit Drop implementation
      • +
      +
    • +
    +

    The lowering is triggered by calling the mir_built query. The MIR builder does +not actually use the HIR but operates on the THIR instead, processing THIR +expressions recursively.

    +

    The lowering creates local variables for every argument as specified in the signature. +Next, it creates local variables for every binding specified (e.g. (a, b): (i32, String)) +produces 3 bindings, one for the argument, and two for the bindings. Next, it generates +field accesses that read the fields from the argument and writes the value to the binding +variable.

    +

    With this initialization out of the way, the lowering triggers a recursive call +to a function that generates the MIR for the body (a Block expression) and +writes the result into the RETURN_PLACE.

    +

    unpack! all the things

    +

    Functions that generate MIR tend to fall into one of two patterns. +First, if the function generates only statements, then it will take a +basic block as argument onto which those statements should be appended. +It can then return a result as normal:

    +
    fn generate_some_mir(&mut self, block: BasicBlock) -> ResultType {
    +   ...
    +}
    +

    But there are other functions that may generate new basic blocks as well. +For example, lowering an expression like if foo { 22 } else { 44 } +requires generating a small "diamond-shaped graph". +In this case, the functions take a basic block where their code starts +and return a (potentially) new basic block where the code generation ends. +The BlockAnd type is used to represent this:

    +
    fn generate_more_mir(&mut self, block: BasicBlock) -> BlockAnd<ResultType> {
    +    ...
    +}
    +

    When you invoke these functions, it is common to have a local variable block +that is effectively a "cursor". It represents the point at which we are adding new MIR. +When you invoke generate_more_mir, you want to update this cursor. +You can do this manually, but it's tedious:

    +
    let mut block;
    +let v = match self.generate_more_mir(..) {
    +    BlockAnd { block: new_block, value: v } => {
    +        block = new_block;
    +        v
    +    }
    +};
    +

    For this reason, we offer a macro that lets you write +let v = unpack!(block = self.generate_more_mir(...)). +It simply extracts the new block and overwrites the +variable block that you named in the unpack!.

    +

    Lowering expressions into the desired MIR

    +

    There are essentially four kinds of representations one might want of an expression:

    +
      +
    • Place refers to a (or part of a) preexisting memory location (local, static, promoted)
    • +
    • Rvalue is something that can be assigned to a Place
    • +
    • Operand is an argument to e.g. a + operation or a function call
    • +
    • a temporary variable containing a copy of the value
    • +
    +

    The following image depicts a general overview of the interactions between the +representations:

    + +

    Click here for a more detailed view

    +

    We start out with lowering the function body to an Rvalue so we can create an +assignment to RETURN_PLACE, This Rvalue lowering will in turn trigger lowering to +Operand for its arguments (if any). Operand lowering either produces a const +operand, or moves/copies out of a Place, thus triggering a Place lowering. An +expression being lowered to a Place can in turn trigger a temporary to be created +if the expression being lowered contains operations. This is where the snake bites its +own tail and we need to trigger an Rvalue lowering for the expression to be written +into the local.

    +

    Operator lowering

    +

    Operators on builtin types are not lowered to function calls (which would end up being +infinite recursion calls, because the trait impls just contain the operation itself +again). Instead there are Rvalues for binary and unary operators and index operations. +These Rvalues later get codegened to llvm primitive operations or llvm intrinsics.

    +

    Operators on all other types get lowered to a function call to their impl of the +operator's corresponding trait.

    +

    Regardless of the lowering kind, the arguments to the operator are lowered to Operands. +This means all arguments are either constants, or refer to an already existing value +somewhere in a local or static.

    +

    Method call lowering

    +

    Method calls are lowered to the same TerminatorKind that function calls are. +In MIR there is no difference between method calls and function calls anymore.

    +

    Conditions

    +

    if conditions and match statements for enums with variants that have no fields are +lowered to TerminatorKind::SwitchInt. Each possible value (so 0 and 1 for if +conditions) has a corresponding BasicBlock to which the code continues. +The argument being branched on is (again) an Operand representing the value of +the if condition.

    +

    Pattern matching

    +

    match statements for enums with variants that have fields are lowered to +TerminatorKind::SwitchInt, too, but the Operand refers to a Place where the +discriminant of the value can be found. This often involves reading the discriminant +to a new temporary variable.

    +

    Aggregate construction

    +

    Aggregate values of any kind (e.g. structs or tuples) are built via Rvalue::Aggregate. +All fields are +lowered to Operators. This is essentially equivalent to one assignment +statement per aggregate field plus an assignment to the discriminant in the +case of enums.

    +

    MIR visitor

    +

    The MIR visitor is a convenient tool for traversing the MIR and either +looking for things or making changes to it. The visitor traits are +defined in the rustc_middle::mir::visit module – there are two of +them, generated via a single macro: Visitor (which operates on a +&Mir and gives back shared references) and MutVisitor (which +operates on a &mut Mir and gives back mutable references).

    +

    To implement a visitor, you have to create a type that represents +your visitor. Typically, this type wants to "hang on" to whatever +state you will need while processing MIR:

    +
    struct MyVisitor<...> {
    +    tcx: TyCtxt<'tcx>,
    +    ...
    +}
    +

    and you then implement the Visitor or MutVisitor trait for that type:

    +
    impl<'tcx> MutVisitor<'tcx> for MyVisitor {
    +    fn visit_foo(&mut self, ...) {
    +        ...
    +        self.super_foo(...);
    +    }
    +}
    +

    As shown above, within the impl, you can override any of the +visit_foo methods (e.g., visit_terminator) in order to write some +code that will execute whenever a foo is found. If you want to +recursively walk the contents of the foo, you then invoke the +super_foo method. (NB. You never want to override super_foo.)

    +

    A very simple example of a visitor can be found in LocalFinder. +By implementing visit_local method, this visitor identifies local variables that +can be candidates for reordering.

    +

    Traversal

    +

    In addition the visitor, the rustc_middle::mir::traversal module +contains useful functions for walking the MIR CFG in +different standard orders (e.g. pre-order, reverse +post-order, and so forth).

    +

    MIR queries and passes

    +

    If you would like to get the MIR:

    +
      +
    • for a function - you can use the optimized_mir query (typically used by codegen) or the mir_for_ctfe query (typically used by compile time function evaluation, i.e., CTFE);
    • +
    • for a promoted - you can use the promoted_mir query.
    • +
    +

    These will give you back the final, optimized MIR. For foreign def-ids, we simply read the MIR +from the other crate's metadata. But for local def-ids, the query will +construct the optimized MIR by requesting a pipeline of upstream queries1. +Each query will contain a series of passes. +This section describes how those queries and passes work and how you can extend them.

    +

    To produce the optimized MIR for a given def-id D, optimized_mir(D) +goes through several suites of passes, each grouped by a +query. Each suite consists of passes which perform linting, analysis, transformation or +optimization. Each query represent a useful intermediate point +where we can access the MIR dialect for type checking or other purposes:

    +
      +
    • mir_built(D) – it gives the initial MIR just after it's built;
    • +
    • mir_const(D) – it applies some simple transformation passes to make MIR ready for +const qualification;
    • +
    • mir_promoted(D) - it extracts promotable temps into separate MIR bodies, and also makes MIR +ready for borrow checking;
    • +
    • mir_drops_elaborated_and_const_checked(D) - it performs borrow checking, runs major +transformation passes (such as drop elaboration) and makes MIR ready for optimization;
    • +
    • optimized_mir(D) – it performs all enabled optimizations and reaches the final state.
    • +
    +

    Implementing and registering a pass

    +

    A MirPass is some bit of code that processes the MIR, typically transforming it along the way +somehow. But it may also do other things like linting (e.g., CheckPackedRef, +CheckConstItemMutation, FunctionItemReferences, which implement MirLint) or +optimization (e.g., SimplifyCfg, RemoveUnneededDrops). While most MIR passes +are defined in the rustc_mir_transform crate, the MirPass trait itself is +found in the rustc_middle crate, and it basically consists of one primary method, +run_pass, that simply gets an &mut Body (along with the tcx). +The MIR is therefore modified in place (which helps to keep things efficient).

    +

    A basic example of a MIR pass is RemoveStorageMarkers, which walks +the MIR and removes all storage marks if they won't be emitted during codegen. As you +can see from its source, a MIR pass is defined by first defining a +dummy type, a struct with no fields:

    +
    #![allow(unused)]
    +fn main() {
    +pub struct RemoveStorageMarkers;
    +}
    +

    for which we implement the MirPass trait. We can then insert +this pass into the appropriate list of passes found in a query like +mir_built, optimized_mir, etc. (If this is an optimization, it +should go into the optimized_mir list.)

    +

    Another example of a simple MIR pass is CleanupPostBorrowck, which walks +the MIR and removes all statements that are not relevant to code generation. As you can see from +its source, it is defined by first defining a dummy type, a struct with no +fields:

    +
    #![allow(unused)]
    +fn main() {
    +pub struct CleanupPostBorrowck;
    +}
    +

    for which we implement the MirPass trait:

    +
    #![allow(unused)]
    +fn main() {
    +impl<'tcx> MirPass<'tcx> for CleanupPostBorrowck {
    +    fn run_pass(&self, tcx: TyCtxt<'tcx>, body: &mut Body<'tcx>) {
    +        ...
    +    }
    +}
    +}
    +

    We register this pass inside the mir_drops_elaborated_and_const_checked query. +(If this is an optimization, it should go into the optimized_mir list.)

    +

    If you are writing a pass, there's a good chance that you are going to +want to use a MIR visitor. MIR visitors are a handy way to walk all +the parts of the MIR, either to search for something or to make small +edits.

    +

    Stealing

    +

    The intermediate queries mir_const() and mir_promoted() yield up +a &'tcx Steal<Body<'tcx>>, allocated using tcx.alloc_steal_mir(). +This indicates that the result may be stolen by a subsequent query – this is an +optimization to avoid cloning the MIR. Attempting to use a stolen +result will cause a panic in the compiler. Therefore, it is important +that you do not accidentally read from these intermediate queries without +the consideration of the dependency in the MIR processing pipeline.

    +

    Because of this stealing mechanism, some care must be taken to +ensure that, before the MIR at a particular phase in the processing +pipeline is stolen, anyone who may want to read from it has already +done so.

    +

    Concretely, this means that if you have a query foo(D) +that wants to access the result of mir_promoted(D), you need to have foo(D) +calling the mir_const(D) query first. This will force it +to execute even though you don't directly require its result.

    +
    +

    This mechanism is a bit dodgy. There is a discussion of more elegant +alternatives in rust-lang/rust#41710.

    +
    +

    Overview

    +

    Below is an overview of the stealing dependency in the MIR processing pipeline2:

    +
    flowchart BT
    +  mir_for_ctfe* --borrow--> id40
    +  id5 --steal--> id40
    +
    +  mir_borrowck* --borrow--> id3
    +  id41 --steal part 1--> id3
    +  id40 --steal part 0--> id3
    +
    +  mir_const_qualif* -- borrow --> id2
    +  id3 -- steal --> id2
    +
    +  id2 -- steal --> id1
    +
    +  id1([mir_built])
    +  id2([mir_const])
    +  id3([mir_promoted])
    +  id40([mir_drops_elaborated_and_const_checked])
    +  id41([promoted_mir])
    +  id5([optimized_mir])
    +
    +  style id1 fill:#bbf
    +  style id2 fill:#bbf
    +  style id3 fill:#bbf
    +  style id40 fill:#bbf
    +  style id41 fill:#bbf
    +  style id5 fill:#bbf
    +
    +

    The stadium-shape queries (e.g., mir_built) with a deep color are the primary queries in the +pipeline, while the rectangle-shape queries (e.g., mir_const_qualif*3) with a shallow color +are those subsequent queries that need to read the results from &'tcx Steal<Body<'tcx>>. With the +stealing mechanism, the rectangle-shape queries must be performed before any stadium-shape queries, +that have an equal or larger height in the dependency tree, ever do.

    +

    Example

    +

    As an example, consider MIR const qualification. It wants to read the result produced by the +mir_const query. However, that result will be stolen by the mir_promoted query at some +time in the pipeline. Before mir_promoted is ever queried, calling the mir_const_qualif query +will succeed since mir_const will produce (if queried the first time) or cache (if queried +multiple times) the Steal result and the result is not stolen yet. After mir_promoted is +queried, the result would be stolen and calling the mir_const_qualif query to read the result +would cause a panic.

    +

    Therefore, with this stealing mechanism, mir_promoted should guarantee any mir_const_qualif* +queries are called before it actually steals, thus ensuring that the reads have already happened +(remember that queries are memoized, so executing a query twice +simply loads from a cache the second time).

    +
    +
    1. +

      See the Queries chapter for the general concept of query.

      +
    2. +
    3. +

      The mir_promoted query will yield up a tuple +(&'tcx Steal<Body<'tcx>>, &'tcx Steal<IndexVec<Promoted, Body<'tcx>>>), promoted_mir will steal +part 1 (&'tcx Steal<IndexVec<Promoted, Body<'tcx>>>) and mir_drops_elaborated_and_const_checked +will steal part 0 (&'tcx Steal<Body<'tcx>>). And their stealing is irrelevant to each other, +i.e., can be performed separately.

      +
    4. +
    5. +

      Note that the * suffix in the queries represent a set of queries with the same prefix. +For example, mir_borrowck* represents mir_borrowck, mir_borrowck_const_arg and +mir_borrowck_opt_const_arg.

      +
    6. +

    Inline assembly

    + +

    Overview

    +

    Inline assembly in rustc mostly revolves around taking an asm! macro invocation and plumbing it +through all of the compiler layers down to LLVM codegen. Throughout the various stages, an +InlineAsm generally consists of 3 components:

    +
      +
    • +

      The template string, which is stored as an array of InlineAsmTemplatePiece. Each piece +represents either a literal or a placeholder for an operand (just like format strings).

      +
      #![allow(unused)]
      +fn main() {
      +pub enum InlineAsmTemplatePiece {
      +    String(String),
      +    Placeholder { operand_idx: usize, modifier: Option<char>, span: Span },
      +}
      +}
      +
    • +
    • +

      The list of operands to the asm! (in, [late]out, in[late]out, sym, const). These are +represented differently at each stage of lowering, but follow a common pattern:

      +
        +
      • in, out and inout all have an associated register class (reg) or explicit register +("eax").
      • +
      • inout has 2 forms: one with a single expression that is both read from and written to, and +one with two separate expressions for the input and output parts.
      • +
      • out and inout have a late flag (lateout / inlateout) to indicate that the register +allocator is allowed to reuse an input register for this output.
      • +
      • out and the split variant of inout allow _ to be specified for an output, which means +that the output is discarded. This is used to allocate scratch registers for assembly code.
      • +
      • const refers to an anonymous constants and generally works like an inline const.
      • +
      • sym is a bit special since it only accepts a path expression, which must point to a static +or a fn.
      • +
      +
    • +
    • +

      The options set at the end of the asm! macro. The only ones that are of particular interest to +rustc are NORETURN which makes asm! return ! instead of (), and RAW which disables format +string parsing. The remaining options are mostly passed through to LLVM with little processing.

      +
      #![allow(unused)]
      +fn main() {
      +bitflags::bitflags! {
      +    pub struct InlineAsmOptions: u16 {
      +        const PURE = 1 << 0;
      +        const NOMEM = 1 << 1;
      +        const READONLY = 1 << 2;
      +        const PRESERVES_FLAGS = 1 << 3;
      +        const NORETURN = 1 << 4;
      +        const NOSTACK = 1 << 5;
      +        const ATT_SYNTAX = 1 << 6;
      +        const RAW = 1 << 7;
      +        const MAY_UNWIND = 1 << 8;
      +    }
      +}
      +}
      +
    • +
    +

    AST

    +

    InlineAsm is represented as an expression in the AST with the ast::InlineAsm type.

    +

    The asm! macro is implemented in rustc_builtin_macros and outputs an InlineAsm AST node. The +template string is parsed using fmt_macros, positional and named operands are resolved to +explicit operand indices. Since target information is not available to macro invocations, +validation of the registers and register classes is deferred to AST lowering.

    +

    HIR

    +

    InlineAsm is represented as an expression in the HIR with the hir::InlineAsm type.

    +

    AST lowering is where InlineAsmRegOrRegClass is converted from Symbols to an actual register or +register class. If any modifiers are specified for a template string placeholder, these are +validated against the set allowed for that operand type. Finally, explicit registers for inputs and +outputs are checked for conflicts (same register used for different operands).

    +

    Type checking

    +

    Each register class has a whitelist of types that it may be used with. After the types of all +operands have been determined, the intrinsicck pass will check that these types are in the +whitelist. It also checks that split inout operands have compatible types and that const +operands are integers or floats. Suggestions are emitted where needed if a template modifier should +be used for an operand based on the type that was passed into it.

    +

    THIR

    +

    InlineAsm is represented as an expression in the THIR with the InlineAsmExpr type.

    +

    The only significant change compared to HIR is that Sym has been lowered to either a SymFn +whose expr is a Literal ZST of the fn, or a SymStatic which points to the DefId of a +static.

    +

    MIR

    +

    InlineAsm is represented as a Terminator in the MIR with the TerminatorKind::InlineAsm variant

    +

    As part of THIR lowering, InOut and SplitInOut operands are lowered to a split form with a +separate in_value and out_place.

    +

    Semantically, the InlineAsm terminator is similar to the Call terminator except that it has +multiple output places where a Call only has a single return place output.

    +

    Codegen

    +

    Operands are lowered one more time before being passed to LLVM codegen, this is represented by the InlineAsmOperandRef type from rustc_codegen_ssa.

    +

    The operands are lowered to LLVM operands and constraint codes as follows:

    +
      +
    • out and the output part of inout operands are added first, as required by LLVM. Late output +operands have a = prefix added to their constraint code, non-late output operands have a =& +prefix added to their constraint code.
    • +
    • in operands are added normally.
    • +
    • inout operands are tied to the matching output operand.
    • +
    • sym operands are passed as function pointers or pointers, using the "s" constraint.
    • +
    • const operands are formatted to a string and directly inserted in the template string.
    • +
    +

    The template string is converted to LLVM form:

    +
      +
    • $ characters are escaped as $$.
    • +
    • const operands are converted to strings and inserted directly.
    • +
    • Placeholders are formatted as ${X:M} where X is the operand index and M is the modifier +character. Modifiers are converted from the Rust form to the LLVM form.
    • +
    +

    The various options are converted to clobber constraints or LLVM attributes, refer to the +RFC +for more details.

    +

    Note that LLVM is sometimes rather picky about what types it accepts for certain constraint codes +so we sometimes need to insert conversions to/from a supported type. See the target-specific +ISelLowering.cpp files in LLVM for details of what types are supported for each register class.

    +

    Adding support for new architectures

    +

    Adding inline assembly support to an architecture is mostly a matter of defining the registers and +register classes for that architecture. All the definitions for register classes are located in +compiler/rustc_target/asm/.

    +

    Additionally you will need to implement lowering of these register classes to LLVM constraint codes +in compiler/rustc_codegen_llvm/asm.rs.

    +

    When adding a new architecture, make sure to cross-reference with the LLVM source code:

    +
      +
    • LLVM has restrictions on which types can be used with a particular constraint code. Refer to the +getRegForInlineAsmConstraint function in lib/Target/${ARCH}/${ARCH}ISelLowering.cpp.
    • +
    • LLVM reserves certain registers for its internal use, which causes them to not be saved/restored +properly around inline assembly blocks. These registers are listed in the getReservedRegs +function in lib/Target/${ARCH}/${ARCH}RegisterInfo.cpp. Any "conditionally" reserved register +such as the frame/base pointer must always be treated as reserved for Rust purposes because we +can't know ahead of time whether a function will require a frame/base pointer.
    • +
    +

    Tests

    +

    Various tests for inline assembly are available:

    +
      +
    • tests/assembly/asm
    • +
    • tests/ui/asm
    • +
    • tests/codegen/asm-*
    • +
    +

    Every architecture supported by inline assembly must have exhaustive tests in +tests/assembly/asm which test all combinations of register classes and types.

    +

    Command-line Arguments

    +

    Command-line flags are documented in the rustc book. All stable +flags should be documented there. Unstable flags should be documented in the +unstable book.

    +

    See the forge guide for new options for details on the procedure for +adding a new command-line argument.

    +

    Guidelines

    +
      +
    • Flags should be orthogonal to each other. For example, if we'd have a +json-emitting variant of multiple actions foo and bar, an additional +--json flag is better than adding --foo-json and --bar-json.
    • +
    • Avoid flags with the no- prefix. Instead, use the parse_bool function, +such as -C embed-bitcode=no.
    • +
    • Consider the behavior if the flag is passed multiple times. In some +situations, the values should be accumulated (in order!). In other +situations, subsequent flags should override previous flags (for example, +the lint-level flags). And some flags (like -o) should generate an error +if it is too ambiguous what multiple flags would mean.
    • +
    • Always give options a long descriptive name, if only for more understandable +compiler scripts.
    • +
    • The --verbose flag is for adding verbose information to rustc +output. For example, using it with the --version +flag gives information about the hashes of the compiler code.
    • +
    • Experimental flags and options must be guarded behind the -Z unstable-options flag.
    • +
    +

    rustc_driver and rustc_interface

    +

    rustc_driver

    +

    The rustc_driver is essentially rustc's main function. +It acts as the glue for running the various phases of the compiler in the correct order, +using the interface defined in the rustc_interface crate. Where possible, using rustc_driver rather than rustc_interface is recommended.

    +

    The main entry point of rustc_driver is rustc_driver::run_compiler. +This builder accepts the same command-line args as rustc as well as an implementation of Callbacks and a couple of other optional options. +Callbacks is a trait that allows for custom compiler configuration, +as well as allowing custom code to run after different phases of the compilation.

    +

    rustc_interface

    +

    The rustc_interface crate provides a low level API to external users for manually driving the compilation process, +allowing third parties to effectively use rustc's internals as a library for analyzing a crate or for ad hoc emulating of the compiler for cases where rustc_driver is not flexible enough (i.e. rustdoc compiling code and serving output).

    +

    The main entry point of rustc_interface (rustc_interface::run_compiler) takes a configuration variable for the compiler +and a closure taking a yet unresolved Compiler. +run_compiler creates a Compiler from the configuration and passes it to the closure. +Inside the closure you can use the Compiler to call various functions to compile a crate and get the results. +You can see a minimal example of how to use rustc_interface here.

    +

    You can see an example of how to use the various functions using rustc_interface needs by looking at the rustc_driver implementation, +specifically rustc_driver_impl::run_compiler +(not to be confused with rustc_interface::run_compiler).

    +
    +

    Warning: By its very nature, the internal compiler APIs are always going +to be unstable. That said, we do try not to break things unnecessarily.

    +
    +

    Remarks on perma unstable features

    +

    rustc_private

    +

    Overview

    +

    The rustc_private feature allows external crates to use compiler internals.

    +

    Using rustc-private with Official Toolchains

    +

    When using the rustc_private feature with official Rust toolchains distributed via rustup, you need to install two additional components:

    +
      +
    1. rustc-dev: Provides compiler libraries
    2. +
    3. llvm-tools: Provides LLVM libraries required for linking
    4. +
    +

    Installation Steps

    +

    Install both components using rustup:

    +
    rustup component add rustc-dev llvm-tools
    +
    +

    Common Error

    +

    Without the llvm-tools component, you'll encounter linking errors like:

    +
    error: linking with `cc` failed: exit status: 1
    +  |
    +  = note: rust-lld: error: unable to find library -lLLVM-{version}
    +
    +

    Using rustc-private with Custom Toolchains

    +

    For custom-built toolchains or environments not using rustup, additional configuration is typically required:

    +

    Requirements

    +
      +
    • LLVM libraries must be available in your system's library search paths
    • +
    • The LLVM version must match the one used to build your Rust toolchain
    • +
    +

    Troubleshooting Steps

    +
      +
    1. Check LLVM installation: Verify LLVM is installed and accessible
    2. +
    3. Configure library paths: You may need to set environment variables: +
      export LD_LIBRARY_PATH=/path/to/llvm/lib:$LD_LIBRARY_PATH
      +
      +
    4. +
    5. Check version compatibility: Ensure your LLVM version is compatible with your Rust toolchain
    6. +
    +

    Additional Resources

    +
      +
    • GitHub Issue #137421: Explains that rustc_private linker failures often occur because llvm-tools is not installed
    • +
    +

    Example: Type checking through rustc_driver

    +

    rustc_driver allows you to interact with Rust code at various stages of compilation.

    +

    Getting the type of an expression

    +

    To get the type of an expression, use the after_analysis callback to get a TyCtxt.

    +
    // Tested with nightly-2025-03-28
    +
    +#![feature(rustc_private)]
    +
    +extern crate rustc_ast;
    +extern crate rustc_ast_pretty;
    +extern crate rustc_data_structures;
    +extern crate rustc_driver;
    +extern crate rustc_error_codes;
    +extern crate rustc_errors;
    +extern crate rustc_hash;
    +extern crate rustc_hir;
    +extern crate rustc_interface;
    +extern crate rustc_middle;
    +extern crate rustc_session;
    +extern crate rustc_span;
    +
    +use std::io;
    +use std::path::Path;
    +use std::sync::Arc;
    +
    +use rustc_ast_pretty::pprust::item_to_string;
    +use rustc_driver::{Compilation, run_compiler};
    +use rustc_interface::interface::{Compiler, Config};
    +use rustc_middle::ty::TyCtxt;
    +
    +struct MyFileLoader;
    +
    +impl rustc_span::source_map::FileLoader for MyFileLoader {
    +    fn file_exists(&self, path: &Path) -> bool {
    +        path == Path::new("main.rs")
    +    }
    +
    +    fn read_file(&self, path: &Path) -> io::Result<String> {
    +        if path == Path::new("main.rs") {
    +            Ok(r#"
    +fn main() {
    +    let message = "Hello, World!";
    +    println!("{message}");
    +}
    +"#
    +            .to_string())
    +        } else {
    +            Err(io::Error::other("oops"))
    +        }
    +    }
    +
    +    fn read_binary_file(&self, _path: &Path) -> io::Result<Arc<[u8]>> {
    +        Err(io::Error::other("oops"))
    +    }
    +}
    +
    +struct MyCallbacks;
    +
    +impl rustc_driver::Callbacks for MyCallbacks {
    +    fn config(&mut self, config: &mut Config) {
    +        config.file_loader = Some(Box::new(MyFileLoader));
    +    }
    +
    +    fn after_crate_root_parsing(
    +        &mut self,
    +        _compiler: &Compiler,
    +        krate: &mut rustc_ast::Crate,
    +    ) -> Compilation {
    +        for item in &krate.items {
    +            println!("{}", item_to_string(&item));
    +        }
    +
    +        Compilation::Continue
    +    }
    +
    +    fn after_analysis(&mut self, _compiler: &Compiler, tcx: TyCtxt<'_>) -> Compilation {
    +        // Iterate over the top-level items in the crate, looking for the main function.
    +        for id in tcx.hir_free_items() {
    +            let item = &tcx.hir_item(id);
    +            // Use pattern-matching to find a specific node inside the main function.
    +            if let rustc_hir::ItemKind::Fn { body, .. } = item.kind {
    +                let expr = &tcx.hir_body(body).value;
    +                if let rustc_hir::ExprKind::Block(block, _) = expr.kind {
    +                    if let rustc_hir::StmtKind::Let(let_stmt) = block.stmts[0].kind {
    +                        if let Some(expr) = let_stmt.init {
    +                            let hir_id = expr.hir_id; // hir_id identifies the string "Hello, world!"
    +                            let def_id = item.hir_id().owner.def_id; // def_id identifies the main function
    +                            let ty = tcx.typeck(def_id).node_type(hir_id);
    +                            println!("{expr:#?}: {ty:?}");
    +                        }
    +                    }
    +                }
    +            }
    +        }
    +
    +        Compilation::Stop
    +    }
    +}
    +
    +fn main() {
    +    run_compiler(
    +        &[
    +            // The first argument, which in practice contains the name of the binary being executed
    +            // (i.e. "rustc") is ignored by rustc.
    +            "ignored".to_string(),
    +            "main.rs".to_string(),
    +        ],
    +        &mut MyCallbacks,
    +    );
    +}
    +

    Example: Getting diagnostic through rustc_interface

    +

    The rustc_interface allows you to intercept diagnostics that would +otherwise be printed to stderr.

    +

    Getting diagnostics

    +

    To get diagnostics from the compiler, +configure rustc_interface::Config to output diagnostic to a buffer, +and run rustc_hir_typeck::typeck for each item.

    +
    // Tested with nightly-2025-03-28
    +
    +#![feature(rustc_private)]
    +
    +extern crate rustc_data_structures;
    +extern crate rustc_driver;
    +extern crate rustc_error_codes;
    +extern crate rustc_errors;
    +extern crate rustc_hash;
    +extern crate rustc_hir;
    +extern crate rustc_interface;
    +extern crate rustc_session;
    +extern crate rustc_span;
    +
    +use std::sync::{Arc, Mutex};
    +
    +use rustc_errors::emitter::Emitter;
    +use rustc_errors::registry::{self, Registry};
    +use rustc_errors::translation::Translate;
    +use rustc_errors::{DiagInner, FluentBundle};
    +use rustc_session::config;
    +use rustc_span::source_map::SourceMap;
    +
    +struct DebugEmitter {
    +    source_map: Arc<SourceMap>,
    +    diagnostics: Arc<Mutex<Vec<DiagInner>>>,
    +}
    +
    +impl Translate for DebugEmitter {
    +    fn fluent_bundle(&self) -> Option<&FluentBundle> {
    +        None
    +    }
    +
    +    fn fallback_fluent_bundle(&self) -> &FluentBundle {
    +        panic!("this emitter should not translate message")
    +    }
    +}
    +
    +impl Emitter for DebugEmitter {
    +    fn emit_diagnostic(&mut self, diag: DiagInner, _: &Registry) {
    +        self.diagnostics.lock().unwrap().push(diag);
    +    }
    +
    +    fn source_map(&self) -> Option<&SourceMap> {
    +        Some(&self.source_map)
    +    }
    +}
    +
    +fn main() {
    +    let buffer: Arc<Mutex<Vec<DiagInner>>> = Arc::default();
    +    let diagnostics = buffer.clone();
    +    let config = rustc_interface::Config {
    +        opts: config::Options::default(),
    +        // This program contains a type error.
    +        input: config::Input::Str {
    +            name: rustc_span::FileName::Custom("main.rs".into()),
    +            input: "
    +fn main() {
    +    let x: &str = 1;
    +}
    +"
    +            .into(),
    +        },
    +        crate_cfg: Vec::new(),
    +        crate_check_cfg: Vec::new(),
    +        output_dir: None,
    +        output_file: None,
    +        file_loader: None,
    +        locale_resources: rustc_driver::DEFAULT_LOCALE_RESOURCES.to_owned(),
    +        lint_caps: rustc_hash::FxHashMap::default(),
    +        psess_created: Some(Box::new(|parse_sess| {
    +            parse_sess.dcx().set_emitter(Box::new(DebugEmitter {
    +                source_map: parse_sess.clone_source_map(),
    +                diagnostics,
    +            }));
    +        })),
    +        register_lints: None,
    +        override_queries: None,
    +        registry: registry::Registry::new(rustc_errors::codes::DIAGNOSTICS),
    +        make_codegen_backend: None,
    +        expanded_args: Vec::new(),
    +        ice_file: None,
    +        hash_untracked_state: None,
    +        using_internal_features: &rustc_driver::USING_INTERNAL_FEATURES,
    +    };
    +    rustc_interface::run_compiler(config, |compiler| {
    +        let krate = rustc_interface::passes::parse(&compiler.sess);
    +        rustc_interface::create_and_enter_global_ctxt(&compiler, krate, |tcx| {
    +            // Iterate all the items defined and perform type checking.
    +            tcx.par_hir_body_owners(|item_def_id| {
    +                tcx.ensure_ok().typeck(item_def_id);
    +            });
    +        });
    +        // If the compiler has encountered errors when this closure returns, it will abort (!) the program.
    +        // We avoid this by resetting the error count before returning
    +        compiler.sess.dcx().reset_err_count();
    +    });
    +    // Read buffered diagnostics.
    +    buffer.lock().unwrap().iter().for_each(|diagnostic| {
    +        println!("{diagnostic:#?}");
    +    });
    +}
    +

    Errors and lints

    + +

    A lot of effort has been put into making rustc have great error messages. +This chapter is about how to emit compile errors and lints from the compiler.

    +

    Diagnostic structure

    +

    The main parts of a diagnostic error are the following:

    +
    error[E0000]: main error message
    +  --> file.rs:LL:CC
    +   |
    +LL | <code>
    +   | -^^^^- secondary label
    +   |  |
    +   |  primary label
    +   |
    +   = note: note without a `Span`, created with `.note`
    +note: sub-diagnostic message for `.span_note`
    +  --> file.rs:LL:CC
    +   |
    +LL | more code
    +   |      ^^^^
    +
    +
      +
    • Level (error, warning, etc.). It indicates the severity of the message. +(See diagnostic levels)
    • +
    • Code (for example, for "mismatched types", it is E0308). It helps +users get more information about the current error through an extended +description of the problem in the error code index. Not all diagnostic have a +code. For example, diagnostics created by lints don't have one.
    • +
    • Message. It is the main description of the problem. It should be general and +able to stand on its own, so that it can make sense even in isolation.
    • +
    • Diagnostic window. This contains several things: +
        +
      • The path, line number and column of the beginning of the primary span.
      • +
      • The users' affected code and its surroundings.
      • +
      • Primary and secondary spans underlying the users' code. These spans can +optionally contain one or more labels. +
          +
        • Primary spans should have enough text to describe the problem in such a +way that if it were the only thing being displayed (for example, in an +IDE) it would still make sense. Because it is "spatially aware" (it +points at the code), it can generally be more succinct than the error +message.
        • +
        • If cluttered output can be foreseen in cases when multiple span labels +overlap, it is a good idea to tweak the output appropriately. For +example, the if/else arms have incompatible types error uses different +spans depending on whether the arms are all in the same line, if one of +the arms is empty and if none of those cases applies.
        • +
        +
      • +
      +
    • +
    • Sub-diagnostics. Any error can have multiple sub-diagnostics that look +similar to the main part of the error. These are used for cases where the +order of the explanation might not correspond with the order of the code. If +the order of the explanation can be "order free", leveraging secondary labels +in the main diagnostic is preferred, as it is typically less verbose.
    • +
    +

    The text should be matter of fact and avoid capitalization and periods, unless +multiple sentences are needed:

    +
    error: the fobrulator needs to be krontrificated
    +
    +

    When code or an identifier must appear in a message or label, it should be +surrounded with backticks:

    +
    error: the identifier `foo.bar` is invalid
    +
    +

    Error codes and explanations

    +

    Most errors have an associated error code. Error codes are linked to long-form +explanations which contains an example of how to trigger the error and in-depth +details about the error. They may be viewed with the --explain flag, or via +the error index.

    +

    As a general rule, give an error a code (with an associated explanation) if the +explanation would give more information than the error itself. A lot of the time +it's better to put all the information in the emitted error itself. However, +sometimes that would make the error verbose or there are too many possible +triggers to include useful information for all cases in the error, in which case +it's a good idea to add an explanation.1 +As always, if you are not sure, just ask your reviewer!

    +

    If you decide to add a new error with an associated error code, please read +this section for a guide and important details about the +process.

    +

    Lints versus fixed diagnostics

    +

    Some messages are emitted via lints, where the user can control the +level. Most diagnostics are hard-coded such that the user cannot control the +level.

    +

    Usually it is obvious whether a diagnostic should be "fixed" or a lint, but +there are some grey areas.

    +

    Here are a few examples:

    +
      +
    • Borrow checker errors: these are fixed errors. The user cannot adjust the +level of these diagnostics to silence the borrow checker.
    • +
    • Dead code: this is a lint. While the user probably doesn't want dead code in +their crate, making this a hard error would make refactoring and development +very painful.
    • +
    • future-incompatible lints: +these are silenceable lints. +It was decided that making them fixed errors would cause too much breakage, +so warnings are instead emitted, +and will eventually be turned into fixed (hard) errors.
    • +
    +

    Hard-coded warnings (those using methods like span_warn) should be avoided +for normal code, preferring to use lints instead. Some cases, such as warnings +with CLI flags, will require the use of hard-coded warnings.

    +

    See the deny lint level below for guidelines when to +use an error-level lint instead of a fixed error.

    +

    Diagnostic output style guide

    +
      +
    • Write in plain simple English. If your message, when shown on a – possibly +small – screen (which hasn't been cleaned for a while), cannot be understood +by a normal programmer, who just came out of bed after a night partying, +it's too complex.
    • +
    • Error, Warning, Note, and Help messages start with a lowercase +letter and do not end with punctuation.
    • +
    • Error messages should be succinct. Users will see these error messages many +times, and more verbose descriptions can be viewed with the --explain +flag. That said, don't make it so terse that it's hard to understand.
    • +
    • The word "illegal" is illegal. Prefer "invalid" or a more specific word +instead.
    • +
    • Errors should document the span of code where they occur (use +rustc_errors::DiagCtxt's +span_* methods or a diagnostic struct's #[primary_span] to easily do +this). Also note other spans that have contributed to the error if the span +isn't too large.
    • +
    • When emitting a message with span, try to reduce the span to the smallest +amount possible that still signifies the issue
    • +
    • Try not to emit multiple error messages for the same error. This may require +detecting duplicates.
    • +
    • When the compiler has too little information for a specific error message, +consult with the compiler team to add new attributes for library code that +allow adding more information. For example see +#[rustc_on_unimplemented]. Use these +annotations when available!
    • +
    • Keep in mind that Rust's learning curve is rather steep, and that the +compiler messages are an important learning tool.
    • +
    • When talking about the compiler, call it the compiler, not Rust or +rustc.
    • +
    • Use the Oxford comma when +writing lists of items.
    • +
    +

    Lint naming

    +

    From RFC 0344, lint names should be consistent, with the following +guidelines:

    +

    The basic rule is: the lint name should make sense when read as "allow +lint-name" or "allow lint-name items". For example, "allow +deprecated items" and "allow dead_code" makes sense, while "allow +unsafe_block" is ungrammatical (should be plural).

    +
      +
    • +

      Lint names should state the bad thing being checked for, e.g. deprecated, +so that #[allow(deprecated)] (items) reads correctly. Thus ctypes is not +an appropriate name; improper_ctypes is.

      +
    • +
    • +

      Lints that apply to arbitrary items (like the stability lints) should just +mention what they check for: use deprecated rather than +deprecated_items. This keeps lint names short. (Again, think "allow +lint-name items".)

      +
    • +
    • +

      If a lint applies to a specific grammatical class, mention that class and +use the plural form: use unused_variables rather than unused_variable. +This makes #[allow(unused_variables)] read correctly.

      +
    • +
    • +

      Lints that catch unnecessary, unused, or useless aspects of code should use +the term unused, e.g. unused_imports, unused_typecasts.

      +
    • +
    • +

      Use snake case in the same way you would for function names.

      +
    • +
    +

    Diagnostic levels

    +

    Guidelines for different diagnostic levels:

    +
      +
    • +

      error: emitted when the compiler detects a problem that makes it unable to +compile the program, either because the program is invalid or the programmer +has decided to make a specific warning into an error.

      +
    • +
    • +

      warning: emitted when the compiler detects something odd about a program. +Care should be taken when adding warnings to avoid warning fatigue, and +avoid false-positives where there really isn't a problem with the code. Some +examples of when it is appropriate to issue a warning:

      +
        +
      • A situation where the user should take action, such as swap out a +deprecated item, or use a Result, but otherwise doesn't prevent +compilation.
      • +
      • Unnecessary syntax that can be removed without affecting the semantics of +the code. For example, unused code, or unnecessary unsafe.
      • +
      • Code that is very likely to be incorrect, dangerous, or confusing, but the +language technically allows, and is not ready or confident enough to make +an error. For example unused_comparisons (out of bounds comparisons) or +bindings_with_variant_name (the user likely did not intend to create a +binding in a pattern).
      • +
      • Future-incompatible lints, where something was +accidentally or erroneously accepted in the past, but rejecting would +cause excessive breakage in the ecosystem.
      • +
      • Stylistic choices. For example, camel or snake case, or the dyn trait +warning in the 2018 edition. These have a high bar to be added, and should +only be used in exceptional circumstances. Other stylistic choices should +either be allow-by-default lints, or part of other tools like Clippy or +rustfmt.
      • +
      +
    • +
    • +

      help: emitted following an error or warning to give additional +information to the user about how to solve their problem. These messages +often include a suggestion string and rustc_errors::Applicability +confidence level to guide automated source fixes by tools. See the +Suggestions section for more details.

      +

      The error or warning portion should not suggest how to fix the problem, +only the "help" sub-diagnostic should.

      +
    • +
    • +

      note: emitted to given more context and identify additional circumstances +and parts of the code that caused the warning or error. For example, the +borrow checker will note any previous conflicting borrows.

      +

      help vs note: help should be used to show changes the user can +possibly make to fix the problem. note should be used for everything else, +such as other context, information and facts, online resources to read, etc.

      +
    • +
    +

    Not to be confused with lint levels, whose guidelines are:

    +
      +
    • +

      forbid: Lints should never default to forbid.

      +
    • +
    • +

      deny: Equivalent to error diagnostic level. Some examples:

      +
        +
      • A future-incompatible or edition-based lint that has graduated from the +warning level.
      • +
      • Something that has an extremely high confidence that is incorrect, but +still want an escape hatch to allow it to pass.
      • +
      +
    • +
    • +

      warn: Equivalent to the warning diagnostic level. See warning above +for guidelines.

      +
    • +
    • +

      allow: Examples of the kinds of lints that should default to allow:

      +
        +
      • The lint has a too high false positive rate.
      • +
      • The lint is too opinionated.
      • +
      • The lint is experimental.
      • +
      • The lint is used for enforcing something that is not normally enforced. +For example, the unsafe_code lint can be used to prevent usage of unsafe +code.
      • +
      +
    • +
    +

    More information about lint levels can be found in the rustc +book and the reference.

    +

    Helpful tips and options

    +

    Finding the source of errors

    +

    There are three main ways to find where a given error is emitted:

    +
      +
    • +

      grep for either a sub-part of the error message/label or error code. This +usually works well and is straightforward, but there are some cases where +the code emitting the error is removed from the code where the error is +constructed behind a relatively deep call-stack. Even then, it is a good way +to get your bearings.

      +
    • +
    • +

      Invoking rustc with the nightly-only flag -Z treat-err-as-bug=1 +will treat the first error being emitted as an Internal Compiler Error, which +allows you to get a +stack trace at the point the error has been emitted. Change the 1 to +something else if you wish to trigger on a later error.

      +

      There are limitations with this approach:

      +
        +
      • Some calls get elided from the stack trace because they get inlined in the compiled rustc.
      • +
      • The construction of the error is far away from where it is emitted, +a problem similar to the one we faced with the grep approach. +In some cases, we buffer multiple errors in order to emit them in order.
      • +
      +
    • +
    • +

      Invoking rustc with -Z track-diagnostics will print error creation +locations alongside the error.

      +
    • +
    +

    The regular development practices apply: judicious use of debug!() statements +and use of a debugger to trigger break points in order to figure out in what +order things are happening.

    +

    Span

    +

    Span is the primary data structure in rustc used to represent a +location in the code being compiled. Spans are attached to most constructs in +HIR and MIR, allowing for more informative error reporting.

    +

    A Span can be looked up in a SourceMap to get a "snippet" +useful for displaying errors with span_to_snippet and other +similar methods on the SourceMap.

    +

    Error messages

    +

    The rustc_errors crate defines most of the utilities used for +reporting errors.

    +

    Diagnostics can be implemented as types which implement the Diagnostic +trait. This is preferred for new diagnostics as it enforces a separation +between diagnostic emitting logic and the main code paths. For less-complex +diagnostics, the Diagnostic trait can be derived -- see Diagnostic +structs. Within the trait implementation, the APIs +described below can be used as normal.

    +

    DiagCtxt has methods that create and emit errors. These methods +usually have names like span_err or struct_span_err or span_warn, etc... +There are lots of them; they emit different types of "errors", such as +warnings, errors, fatal errors, suggestions, etc.

    +

    In general, there are two classes of such methods: ones that emit an error +directly and ones that allow finer control over what to emit. For example, +span_err emits the given error message at the given Span, but +struct_span_err instead returns a +Diag.

    +

    Most of these methods will accept strings, but it is recommended that typed +identifiers for translatable diagnostics be used for new diagnostics (see +Translation).

    +

    Diag allows you to add related notes and suggestions to an error +before emitting it by calling the emit method. (Failing to either +emit or cancel a Diag will result in an ICE.) See the +docs for more info on what you can do.

    +
    // Get a `Diag`. This does _not_ emit an error yet.
    +let mut err = sess.dcx.struct_span_err(sp, fluent::example::example_error);
    +
    +// In some cases, you might need to check if `sp` is generated by a macro to
    +// avoid printing weird errors about macro-generated code.
    +
    +if let Ok(snippet) = sess.source_map().span_to_snippet(sp) {
    +    // Use the snippet to generate a suggested fix
    +    err.span_suggestion(suggestion_sp, fluent::example::try_qux_suggestion, format!("qux {}", snippet));
    +} else {
    +    // If we weren't able to generate a snippet, then emit a "help" message
    +    // instead of a concrete "suggestion". In practice this is unlikely to be
    +    // reached.
    +    err.span_help(suggestion_sp, fluent::example::qux_suggestion);
    +}
    +
    +// emit the error
    +err.emit();
    +
    example-example-error = oh no! this is an error!
    +  .try-qux-suggestion = try using a qux here
    +  .qux-suggestion = you could use a qux here instead
    +
    +

    Suggestions

    +

    In addition to telling the user exactly why their code is wrong, it's +oftentimes furthermore possible to tell them how to fix it. To this end, +Diag offers a structured suggestions API, which formats code +suggestions pleasingly in the terminal, or (when the --error-format json flag +is passed) as JSON for consumption by tools like rustfix.

    +

    Not all suggestions should be applied mechanically, they have a degree of +confidence in the suggested code, from high +(Applicability::MachineApplicable) to low (Applicability::MaybeIncorrect). +Be conservative when choosing the level. Use the +span_suggestion method of Diag to +make a suggestion. The last argument provides a hint to tools whether +the suggestion is mechanically applicable or not.

    +

    Suggestions point to one or more spans with corresponding code that will +replace their current content.

    +

    The message that accompanies them should be understandable in the following +contexts:

    +
      +
    • shown as an independent sub-diagnostic (this is the default output)
    • +
    • shown as a label pointing at the affected span (this is done automatically if +some heuristics for verbosity are met)
    • +
    • shown as a help sub-diagnostic with no content (used for cases where the +suggestion is obvious from the text, but we still want to let tools to apply +them)
    • +
    • not shown (used for very obvious cases, but we still want to allow tools to +apply them)
    • +
    +

    For example, to make our qux suggestion machine-applicable, we would do:

    +
    let mut err = sess.dcx.struct_span_err(sp, fluent::example::message);
    +
    +if let Ok(snippet) = sess.source_map().span_to_snippet(sp) {
    +    err.span_suggestion(
    +        suggestion_sp,
    +        fluent::example::try_qux_suggestion,
    +        format!("qux {}", snippet),
    +        Applicability::MachineApplicable,
    +    );
    +} else {
    +    err.span_help(suggestion_sp, fluent::example::qux_suggestion);
    +}
    +
    +err.emit();
    +

    This might emit an error like

    +
    $ rustc mycode.rs
    +error[E0999]: oh no! this is an error!
    + --> mycode.rs:3:5
    +  |
    +3 |     sad()
    +  |     ^ help: try using a qux here: `qux sad()`
    +
    +error: aborting due to previous error
    +
    +For more information about this error, try `rustc --explain E0999`.
    +
    +

    In some cases, like when the suggestion spans multiple lines or when there are +multiple suggestions, the suggestions are displayed on their own:

    +
    error[E0999]: oh no! this is an error!
    + --> mycode.rs:3:5
    +  |
    +3 |     sad()
    +  |     ^
    +help: try using a qux here:
    +  |
    +3 |     qux sad()
    +  |     ^^^
    +
    +error: aborting due to previous error
    +
    +For more information about this error, try `rustc --explain E0999`.
    +
    +

    The possible values of Applicability are:

    +
      +
    • MachineApplicable: Can be applied mechanically.
    • +
    • HasPlaceholders: Cannot be applied mechanically because it has placeholder +text in the suggestions. For example: try adding a type: `let x: <type>` .
    • +
    • MaybeIncorrect: Cannot be applied mechanically because the suggestion may +or may not be a good one.
    • +
    • Unspecified: Cannot be applied mechanically because we don't know which +of the above cases it falls into.
    • +
    +

    Suggestion Style Guide

    +
      +
    • +

      Suggestions should not be a question. In particular, language like "did you +mean" should be avoided. Sometimes, it's unclear why a particular suggestion +is being made. In these cases, it's better to be upfront about what the +suggestion is.

      +

      Compare "did you mean: Foo" vs. "there is a struct with a similar name: Foo".

      +
    • +
    • +

      The message should not contain any phrases like "the following", "as shown", +etc. Use the span to convey what is being talked about.

      +
    • +
    • +

      The message may contain further instruction such as "to do xyz, use" or "to do +xyz, use abc".

      +
    • +
    • +

      The message may contain a name of a function, variable, or type, but avoid +whole expressions.

      +
    • +
    +

    Lints

    +

    The compiler linting infrastructure is defined in the rustc_middle::lint +module.

    +

    When do lints run?

    +

    Different lints will run at different times based on what information the lint +needs to do its job. Some lints get grouped into passes where the lints +within a pass are processed together via a single visitor. Some of the passes +are:

    +
      +
    • +

      Pre-expansion pass: Works on AST nodes before macro expansion. This +should generally be avoided.

      +
        +
      • Example: keyword_idents checks for identifiers that will become +keywords in future editions, but is sensitive to identifiers used in +macros.
      • +
      +
    • +
    • +

      Early lint pass: Works on AST nodes after macro expansion and name +resolution, just before AST lowering. These lints are for purely +syntactical lints.

      +
        +
      • Example: The unused_parens lint checks for parenthesized-expressions +in situations where they are not needed, like an if condition.
      • +
      +
    • +
    • +

      Late lint pass: Works on HIR nodes, towards the end of analysis (after +borrow checking, etc.). These lints have full type information available. +Most lints are late.

      +
        +
      • Example: The invalid_value lint (which checks for obviously invalid +uninitialized values) is a late lint because it needs type information to +figure out whether a type allows being left uninitialized.
      • +
      +
    • +
    • +

      MIR pass: Works on MIR nodes. This isn't quite the same as other passes; +lints that work on MIR nodes have their own methods for running.

      +
        +
      • Example: The arithmetic_overflow lint is emitted when it detects a +constant value that may overflow.
      • +
      +
    • +
    +

    Most lints work well via the pass systems, and they have a fairly +straightforward interface and easy way to integrate (mostly just implementing +a specific check function). However, some lints are easier to write when +they live on a specific code path anywhere in the compiler. For example, the +unused_mut lint is implemented in the borrow checker as it requires some +information and state in the borrow checker.

    +

    Some of these inline lints fire before the linting system is ready. Those +lints will be buffered where they are held until later phases of the +compiler when the linting system is ready. See Linting early in the +compiler.

    +

    Lint definition terms

    +

    Lints are managed via the LintStore and get registered in +various ways. The following terms refer to the different classes of lints +generally based on how they are registered.

    +
      +
    • Built-in lints are defined inside the compiler source.
    • +
    • Driver-registered lints are registered when the compiler driver is created +by an external driver. This is the mechanism used by Clippy, for example.
    • +
    • Tool lints are lints with a path prefix like clippy:: or rustdoc::.
    • +
    • Internal lints are the rustc:: scoped tool lints that only run on the +rustc source tree itself and are defined in the compiler source like a +regular built-in lint.
    • +
    +

    More information about lint registration can be found in the LintStore +chapter.

    +

    Declaring a lint

    +

    The built-in compiler lints are defined in the rustc_lint +crate. Lints that need to be implemented in other crates are defined in +rustc_lint_defs. You should prefer to place lints in rustc_lint if +possible. One benefit is that it is close to the dependency root, so it can be +much faster to work on.

    +

    Every lint is implemented via a struct that implements the LintPass trait +(you can also implement one of the more specific lint pass traits, either +EarlyLintPass or LateLintPass depending on when is best for your lint to run). +The trait implementation allows you to check certain syntactic constructs +as the linter walks the AST. You can then choose to emit lints in a +very similar way to compile errors.

    +

    You also declare the metadata of a particular lint via the declare_lint! +macro. This macro includes the name, the default level, a short description, and some +more details.

    +

    Note that the lint and the lint pass must be registered with the compiler.

    +

    For example, the following lint checks for uses +of while true { ... } and suggests using loop { ... } instead.

    +
    // Declare a lint called `WHILE_TRUE`
    +declare_lint! {
    +    WHILE_TRUE,
    +
    +    // warn-by-default
    +    Warn,
    +
    +    // This string is the lint description
    +    "suggest using `loop { }` instead of `while true { }`"
    +}
    +
    +// This declares a struct and a lint pass, providing a list of associated lints. The
    +// compiler currently doesn't use the associated lints directly (e.g., to not
    +// run the pass or otherwise check that the pass emits the appropriate set of
    +// lints). However, it's good to be accurate here as it's possible that we're
    +// going to register the lints via the get_lints method on our lint pass (that
    +// this macro generates).
    +declare_lint_pass!(WhileTrue => [WHILE_TRUE]);
    +
    +// Helper function for `WhileTrue` lint.
    +// Traverse through any amount of parenthesis and return the first non-parens expression.
    +fn pierce_parens(mut expr: &ast::Expr) -> &ast::Expr {
    +    while let ast::ExprKind::Paren(sub) = &expr.kind {
    +        expr = sub;
    +    }
    +    expr
    +}
    +
    +// `EarlyLintPass` has lots of methods. We only override the definition of
    +// `check_expr` for this lint because that's all we need, but you could
    +// override other methods for your own lint. See the rustc docs for a full
    +// list of methods.
    +impl EarlyLintPass for WhileTrue {
    +    fn check_expr(&mut self, cx: &EarlyContext<'_>, e: &ast::Expr) {
    +        if let ast::ExprKind::While(cond, ..) = &e.kind
    +            && let ast::ExprKind::Lit(ref lit) = pierce_parens(cond).kind
    +            && let ast::LitKind::Bool(true) = lit.kind
    +            && !lit.span.from_expansion()
    +        {
    +            let condition_span = cx.sess.source_map().guess_head_span(e.span);
    +            cx.struct_span_lint(WHILE_TRUE, condition_span, |lint| {
    +                lint.build(fluent::example::use_loop)
    +                    .span_suggestion_short(
    +                        condition_span,
    +                        fluent::example::suggestion,
    +                        "loop".to_owned(),
    +                        Applicability::MachineApplicable,
    +                    )
    +                    .emit();
    +            })
    +        }
    +    }
    +}
    +
    example-use-loop = denote infinite loops with `loop {"{"} ... {"}"}`
    +  .suggestion = use `loop`
    +
    +

    Edition-gated lints

    +

    Sometimes we want to change the behavior of a lint in a new edition. To do this, +we just add the transition to our invocation of declare_lint!:

    +
    declare_lint! {
    +    pub ANONYMOUS_PARAMETERS,
    +    Allow,
    +    "detects anonymous parameters",
    +    Edition::Edition2018 => Warn,
    +}
    +

    This makes the ANONYMOUS_PARAMETERS lint allow-by-default in the 2015 edition +but warn-by-default in the 2018 edition.

    +

    See Edition-specific lints for more information.

    +

    Feature-gated lints

    +

    Lints belonging to a feature should only be usable if the feature is enabled in the +crate. To support this, lint declarations can contain a feature gate like so:

    +
    declare_lint! {
    +    pub SOME_LINT_NAME,
    +    Warn,
    +    "a new and useful, but feature gated lint",
    +    @feature_gate = sym::feature_name;
    +}
    +

    Future-incompatible lints

    +

    The use of the term future-incompatible within the compiler has a slightly +broader meaning than what rustc exposes to users of the compiler.

    +

    Inside rustc, future-incompatible lints are for signalling to the user that code they have +written may not compile in the future. In general, future-incompatible code +exists for two reasons:

    +
      +
    • The user has written unsound code that the compiler mistakenly accepted. While +it is within Rust's backwards compatibility guarantees to fix the soundness hole +(breaking the user's code), the lint is there to warn the user that this will happen +in some upcoming version of rustc regardless of which edition the code uses. This is the +meaning that rustc exclusively exposes to users as "future incompatible".
    • +
    • The user has written code that will either no longer compiler or will change +meaning in an upcoming edition. These are often called "edition lints" and can be +typically seen in the various "edition compatibility" lint groups (e.g., rust_2021_compatibility) +that are used to lint against code that will break if the user updates the crate's edition. +See migration lints for more details.
    • +
    +

    A future-incompatible lint should be declared with the @future_incompatible +additional "field":

    +
    declare_lint! {
    +    pub ANONYMOUS_PARAMETERS,
    +    Allow,
    +    "detects anonymous parameters",
    +    @future_incompatible = FutureIncompatibleInfo {
    +        reference: "issue #41686 <https://github.com/rust-lang/rust/issues/41686>",
    +        reason: FutureIncompatibilityReason::EditionError(Edition::Edition2018),
    +    };
    +}
    +

    Notice the reason field which describes why the future incompatible change is happening. +This will change the diagnostic message the user receives as well as determine which +lint groups the lint is added to. In the example above, the lint is an "edition lint" +(since its "reason" is EditionError), signifying to the user that the use of anonymous +parameters will no longer compile in Rust 2018 and beyond.

    +

    Inside LintStore::register_lints, lints with future_incompatible +fields get placed into either edition-based lint groups (if their reason is tied to +an edition) or into the future_incompatibility lint group.

    +

    If you need a combination of options that's not supported by the +declare_lint! macro, you can always change the declare_lint! macro +to support this.

    +

    Renaming or removing a lint

    +

    If it is determined that a lint is either improperly named or no longer needed, +the lint must be registered for renaming or removal, which will trigger a warning if a user tries +to use the old lint name. To declare a rename/remove, add a line with +store.register_renamed or store.register_removed to the code of the +rustc_lint::register_builtins function.

    +
    store.register_renamed("single_use_lifetime", "single_use_lifetimes");
    +

    Lint groups

    +

    Lints can be turned on in groups. These groups are declared in the +register_builtins function in rustc_lint::lib. The +add_lint_group! macro is used to declare a new group.

    +

    For example,

    +
    add_lint_group!(sess,
    +    "nonstandard_style",
    +    NON_CAMEL_CASE_TYPES,
    +    NON_SNAKE_CASE,
    +    NON_UPPER_CASE_GLOBALS);
    +

    This defines the nonstandard_style group which turns on the listed lints. A +user can turn on these lints with a !#[warn(nonstandard_style)] attribute in +the source code, or by passing -W nonstandard-style on the command line.

    +

    Some lint groups are created automatically in LintStore::register_lints. For instance, +any lint declared with FutureIncompatibleInfo where the reason is +FutureIncompatibilityReason::FutureReleaseError (the default when +@future_incompatible is used in declare_lint!), will be added to +the future_incompatible lint group. Editions also have their own lint groups +(e.g., rust_2021_compatibility) automatically generated for any lints signaling +future-incompatible code that will break in the specified edition.

    +

    Linting early in the compiler

    +

    On occasion, you may need to define a lint that runs before the linting system +has been initialized (e.g. during parsing or macro expansion). This is +problematic because we need to have computed lint levels to know whether we +should emit a warning or an error or nothing at all.

    +

    To solve this problem, we buffer the lints until the linting system is +processed. Session and ParseSess both have +buffer_lint methods that allow you to buffer a lint for later. The linting +system automatically takes care of handling buffered lints later.

    +

    Thus, to define a lint that runs early in the compilation, one defines a lint +like normal but invokes the lint with buffer_lint.

    +

    Linting even earlier in the compiler

    +

    The parser (rustc_ast) is interesting in that it cannot have dependencies on +any of the other rustc* crates. In particular, it cannot depend on +rustc_middle::lint or rustc_lint, where all of the compiler linting +infrastructure is defined. That's troublesome!

    +

    To solve this, rustc_ast defines its own buffered lint type, which +ParseSess::buffer_lint uses. After macro expansion, these buffered lints are +then dumped into the Session::buffered_lints used by the rest of the compiler.

    +

    JSON diagnostic output

    +

    The compiler accepts an --error-format json flag to output +diagnostics as JSON objects (for the benefit of tools such as cargo fix). It looks like this:

    +
    $ rustc json_error_demo.rs --error-format json
    +{"message":"cannot add `&str` to `{integer}`","code":{"code":"E0277","explanation":"\nYou tried to use a type which doesn't implement some trait in a place which\nexpected that trait. Erroneous code example:\n\n```compile_fail,E0277\n// here we declare the Foo trait with a bar method\ntrait Foo {\n    fn bar(&self);\n}\n\n// we now declare a function which takes an object implementing the Foo trait\nfn some_func<T: Foo>(foo: T) {\n    foo.bar();\n}\n\nfn main() {\n    // we now call the method with the i32 type, which doesn't implement\n    // the Foo trait\n    some_func(5i32); // error: the trait bound `i32 : Foo` is not satisfied\n}\n```\n\nIn order to fix this error, verify that the type you're using does implement\nthe trait. Example:\n\n```\ntrait Foo {\n    fn bar(&self);\n}\n\nfn some_func<T: Foo>(foo: T) {\n    foo.bar(); // we can now use this method since i32 implements the\n               // Foo trait\n}\n\n// we implement the trait on the i32 type\nimpl Foo for i32 {\n    fn bar(&self) {}\n}\n\nfn main() {\n    some_func(5i32); // ok!\n}\n```\n\nOr in a generic context, an erroneous code example would look like:\n\n```compile_fail,E0277\nfn some_func<T>(foo: T) {\n    println!(\"{:?}\", foo); // error: the trait `core::fmt::Debug` is not\n                           //        implemented for the type `T`\n}\n\nfn main() {\n    // We now call the method with the i32 type,\n    // which *does* implement the Debug trait.\n    some_func(5i32);\n}\n```\n\nNote that the error here is in the definition of the generic function: Although\nwe only call it with a parameter that does implement `Debug`, the compiler\nstill rejects the function: It must work with all possible input types. In\norder to make this example compile, we need to restrict the generic type we're\naccepting:\n\n```\nuse std::fmt;\n\n// Restrict the input type to types that implement Debug.\nfn some_func<T: fmt::Debug>(foo: T) {\n    println!(\"{:?}\", foo);\n}\n\nfn main() {\n    // Calling the method is still fine, as i32 implements Debug.\n    some_func(5i32);\n\n    // This would fail to compile now:\n    // struct WithoutDebug;\n    // some_func(WithoutDebug);\n}\n```\n\nRust only looks at the signature of the called function, as such it must\nalready specify all requirements that will be used for every type parameter.\n"},"level":"error","spans":[{"file_name":"json_error_demo.rs","byte_start":50,"byte_end":51,"line_start":4,"line_end":4,"column_start":7,"column_end":8,"is_primary":true,"text":[{"text":"    a + b","highlight_start":7,"highlight_end":8}],"label":"no implementation for `{integer} + &str`","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"the trait `std::ops::Add<&str>` is not implemented for `{integer}`","code":null,"level":"help","spans":[],"children":[],"rendered":null}],"rendered":"error[E0277]: cannot add `&str` to `{integer}`\n --> json_error_demo.rs:4:7\n  |\n4 |     a + b\n  |       ^ no implementation for `{integer} + &str`\n  |\n  = help: the trait `std::ops::Add<&str>` is not implemented for `{integer}`\n\n"}
    +{"message":"aborting due to previous error","code":null,"level":"error","spans":[],"children":[],"rendered":"error: aborting due to previous error\n\n"}
    +{"message":"For more information about this error, try `rustc --explain E0277`.","code":null,"level":"","spans":[],"children":[],"rendered":"For more information about this error, try `rustc --explain E0277`.\n"}
    +
    +

    Note that the output is a series of lines, each of which is a JSON +object, but the series of lines taken together is, unfortunately, not +valid JSON, thwarting tools and tricks (such as piping to python3 -m json.tool) +that require such. (One speculates that this was intentional for LSP +performance purposes, so that each line/object can be sent as +it is flushed?)

    +

    Also note the "rendered" field, which contains the "human" output as a +string; this was introduced so that UI tests could both make use of +the structured JSON and see the "human" output (well, sans colors) +without having to compile everything twice.

    +

    The "human" readable and the json format emitter can be found under +rustc_errors, both were moved from the rustc_ast crate to the +rustc_errors crate.

    +

    The JSON emitter defines its own Diagnostic +struct +(and sub-structs) for the JSON serialization. Don't confuse this with +errors::Diag!

    +

    #[rustc_on_unimplemented]

    +

    This attribute allows trait definitions to modify error messages when an implementation was +expected but not found. The string literals in the attribute are format strings and can be +formatted with named parameters. See the Formatting +section below for what parameters are permitted.

    +
    #[rustc_on_unimplemented(message = "an iterator over \
    +    elements of type `{A}` cannot be built from a \
    +    collection of type `{Self}`")]
    +trait MyIterator<A> {
    +    fn next(&mut self) -> A;
    +}
    +
    +fn iterate_chars<I: MyIterator<char>>(i: I) {
    +    // ...
    +}
    +
    +fn main() {
    +    iterate_chars(&[1, 2, 3][..]);
    +}
    +

    When the user compiles this, they will see the following;

    +
    error[E0277]: an iterator over elements of type `char` cannot be built from a collection of type `&[{integer}]`
    +  --> src/main.rs:13:19
    +   |
    +13 |     iterate_chars(&[1, 2, 3][..]);
    +   |     ------------- ^^^^^^^^^^^^^^ the trait `MyIterator<char>` is not implemented for `&[{integer}]`
    +   |     |
    +   |     required by a bound introduced by this call
    +   |
    +note: required by a bound in `iterate_chars`
    +
    +

    You can modify the contents of:

    +
      +
    • the main error message (message)
    • +
    • the label (label)
    • +
    • the note(s) (note)
    • +
    +

    For example, the following attribute

    +
    #[rustc_on_unimplemented(message = "message", label = "label", note = "note")]
    +trait MyIterator<A> {
    +    fn next(&mut self) -> A;
    +}
    +

    Would generate the following output:

    +
    error[E0277]: message
    +  --> <file>:10:19
    +   |
    +10 |     iterate_chars(&[1, 2, 3][..]);
    +   |     ------------- ^^^^^^^^^^^^^^ label
    +   |     |
    +   |     required by a bound introduced by this call
    +   |
    +   = help: the trait `MyIterator<char>` is not implemented for `&[{integer}]`
    +   = note: note
    +note: required by a bound in `iterate_chars`
    +
    +

    The functionality discussed so far is also available with +#[diagnostic::on_unimplemented]. +If you can, you should use that instead.

    +

    Filtering

    +

    To allow more targeted error messages, it is possible to filter the +application of these fields with on.

    +

    You can filter on the following boolean flags:

    +
      +
    • crate_local: whether the code causing the trait bound to not be +fulfilled is part of the user's crate. This is used to avoid suggesting +code changes that would require modifying a dependency.
    • +
    • direct: whether this is an user-specified rather than derived obligation.
    • +
    • from_desugaring: whether we are in some kind of desugaring, like ? +or a try block for example. This flag can also be matched on, see below.
    • +
    +

    You can match on the following names and values, using name = "value":

    +
      +
    • cause: Match against one variant of the ObligationCauseCode +enum. Only "MainFunctionType" is supported.
    • +
    • from_desugaring: Match against a particular variant of the DesugaringKind +enum. The desugaring is identified by its variant name, for example +"QuestionMark" for ? desugaring or "TryBlock" for try blocks.
    • +
    • Self and any generic arguments of the trait, like Self = "alloc::string::String" +or Rhs="i32".
    • +
    +

    The compiler can provide several values to match on, for example:

    +
      +
    • the self_ty, pretty printed with and without type arguments resolved.
    • +
    • "{integral}", if self_ty is an integral of which the type is known.
    • +
    • "[]", "[{ty}]", "[{ty}; _]", "[{ty}; $N]" when applicable.
    • +
    • references to said slices and arrays.
    • +
    • "fn", "unsafe fn" or "#[target_feature] fn" when self is a function.
    • +
    • "{integer}" and "{float}" if the type is a number but we haven't inferred it yet.
    • +
    • combinations of the above, like "[{integral}; _]".
    • +
    +

    For example, the Iterator trait can be filtered in the following way:

    +
    #[rustc_on_unimplemented(
    +    on(Self = "&str", note = "call `.chars()` or `.as_bytes()` on `{Self}`"),
    +    message = "`{Self}` is not an iterator",
    +    label = "`{Self}` is not an iterator",
    +    note = "maybe try calling `.iter()` or a similar method"
    +)]
    +pub trait Iterator {}
    +

    Which would produce the following outputs:

    +
    error[E0277]: `Foo` is not an iterator
    + --> src/main.rs:4:16
    +  |
    +4 |     for foo in Foo {}
    +  |                ^^^ `Foo` is not an iterator
    +  |
    +  = note: maybe try calling `.iter()` or a similar method
    +  = help: the trait `std::iter::Iterator` is not implemented for `Foo`
    +  = note: required by `std::iter::IntoIterator::into_iter`
    +
    +error[E0277]: `&str` is not an iterator
    + --> src/main.rs:5:16
    +  |
    +5 |     for foo in "" {}
    +  |                ^^ `&str` is not an iterator
    +  |
    +  = note: call `.chars()` or `.bytes() on `&str`
    +  = help: the trait `std::iter::Iterator` is not implemented for `&str`
    +  = note: required by `std::iter::IntoIterator::into_iter`
    +
    +

    The on filter accepts all, any and not predicates similar to the cfg attribute:

    +
    #[rustc_on_unimplemented(on(
    +    all(Self = "&str", T = "alloc::string::String"),
    +    note = "you can coerce a `{T}` into a `{Self}` by writing `&*variable`"
    +))]
    +pub trait From<T>: Sized {
    +    /* ... */
    +}
    +

    Formatting

    +

    The string literals are format strings that accept parameters wrapped in braces +but positional and listed parameters and format specifiers are not accepted. +The following parameter names are valid:

    +
      +
    • Self and all generic parameters of the trait.
    • +
    • This: the name of the trait the attribute is on, without generics.
    • +
    • Trait: the name of the "sugared" trait. See TraitRefPrintSugared.
    • +
    • ItemContext: the kind of hir::Node we're in, things like "an async block", +"a function", "an async function", etc.
    • +
    +

    Something like:

    +
    #![feature(rustc_attrs)]
    +
    +#[rustc_on_unimplemented(message = "Self = `{Self}`, \
    +    T = `{T}`, this = `{This}`, trait = `{Trait}`, \
    +    context = `{ItemContext}`")]
    +pub trait From<T>: Sized {
    +    fn from(x: T) -> Self;
    +}
    +
    +fn main() {
    +    let x: i8 = From::from(42_i32);
    +}
    +

    Will format the message into

    +
    "Self = `i8`, T = `i32`, this = `From`, trait = `From<i32>`, context = `a function`"
    +
    +
    +
    1. +

      This rule of thumb was suggested by @estebank here.

      +
    2. +

    Diagnostic and subdiagnostic structs

    +

    rustc has three diagnostic traits that can be used to create diagnostics: +Diagnostic, LintDiagnostic, and Subdiagnostic. For simple diagnostics, +instead of using the Diag API to create and emit diagnostics, +derived impls can be used. They are only suitable for simple diagnostics that +don't require much logic in deciding whether or not to add additional +subdiagnostics.

    +

    Such diagnostic can be translated into +different languages and each has a slug that uniquely identifies the +diagnostic.

    +

    #[derive(Diagnostic)] and #[derive(LintDiagnostic)]

    +

    Consider the definition of the "field already declared" diagnostic +shown below:

    +
    #[derive(Diagnostic)]
    +#[diag(hir_analysis_field_already_declared, code = E0124)]
    +pub struct FieldAlreadyDeclared {
    +    pub field_name: Ident,
    +    #[primary_span]
    +    #[label]
    +    pub span: Span,
    +    #[label(previous_decl_label)]
    +    pub prev_span: Span,
    +}
    +

    Diagnostic can only be derived on structs and enums. +Attributes that are placed on the type for structs are placed on each +variants for enums (or vice versa). Each Diagnostic has to have one +attribute, #[diag(...)], applied to the struct or each enum variant.

    +

    If an error has an error code (e.g. "E0624"), then that can be specified using +the code sub-attribute. Specifying a code isn't mandatory, but if you are +porting a diagnostic that uses Diag to use Diagnostic +then you should keep the code if there was one.

    +

    #[diag(..)] must provide a slug as the first positional argument (a path to an +item in rustc_errors::fluent::*). A slug uniquely identifies the diagnostic +and is also how the compiler knows what error message to emit (in the default +locale of the compiler, or in the locale requested by the user). See +translation documentation to learn more about how +translatable error messages are written and how slug items are generated.

    +

    In our example, the Fluent message for the "field already declared" diagnostic +looks like this:

    +
    hir_analysis_field_already_declared =
    +    field `{$field_name}` is already declared
    +    .label = field already declared
    +    .previous_decl_label = `{$field_name}` first declared here
    +
    +

    hir_analysis_field_already_declared is the slug from our example and is followed +by the diagnostic message.

    +

    Every field of the Diagnostic which does not have an annotation is +available in Fluent messages as a variable, like field_name in the example +above. Fields can be annotated #[skip_arg] if this is undesired.

    +

    Using the #[primary_span] attribute on a field (that has type Span) +indicates the primary span of the diagnostic which will have the main message +of the diagnostic.

    +

    Diagnostics are more than just their primary message, they often include +labels, notes, help messages and suggestions, all of which can also be +specified on a Diagnostic.

    +

    #[label], #[help], #[warning] and #[note] can all be applied to fields which have the +type Span. Applying any of these attributes will create the corresponding +subdiagnostic with that Span. These attributes will look for their +diagnostic message in a Fluent attribute attached to the primary Fluent +message. In our example, #[label] will look for +hir_analysis_field_already_declared.label (which has the message "field already +declared"). If there is more than one subdiagnostic of the same type, then +these attributes can also take a value that is the attribute name to look for +(e.g. previous_decl_label in our example).

    +

    Other types have special behavior when used in a Diagnostic derive:

    +
      +
    • Any attribute applied to an Option<T> will only emit a +subdiagnostic if the option is Some(..).
    • +
    • Any attribute applied to a Vec<T> will be repeated for each element of the +vector.
    • +
    +

    #[help], #[warning] and #[note] can also be applied to the struct itself, in which case +they work exactly like when applied to fields except the subdiagnostic won't +have a Span. These attributes can also be applied to fields of type () for +the same effect, which when combined with the Option type can be used to +represent optional #[note]/#[help]/#[warning] subdiagnostics.

    +

    Suggestions can be emitted using one of four field attributes:

    +
      +
    • #[suggestion(slug, code = "...", applicability = "...")]
    • +
    • #[suggestion_hidden(slug, code = "...", applicability = "...")]
    • +
    • #[suggestion_short(slug, code = "...", applicability = "...")]
    • +
    • #[suggestion_verbose(slug, code = "...", applicability = "...")]
    • +
    +

    Suggestions must be applied on either a Span field or a (Span, MachineApplicability) field. Similarly to other field attributes, the slug +specifies the Fluent attribute with the message and defaults to the equivalent +of .suggestion. code specifies the code that should be suggested as a +replacement and is a format string (e.g. {field_name} would be replaced by +the value of the field_name field of the struct), not a Fluent identifier. +applicability can be used to specify the applicability in the attribute, it +cannot be used when the field's type contains an Applicability.

    +

    In the end, the Diagnostic derive will generate an implementation of +Diagnostic that looks like the following:

    +
    impl<'a, G: EmissionGuarantee> Diagnostic<'a> for FieldAlreadyDeclared {
    +    fn into_diag(self, dcx: &'a DiagCtxt, level: Level) -> Diag<'a, G> {
    +        let mut diag = Diag::new(dcx, level, fluent::hir_analysis_field_already_declared);
    +        diag.set_span(self.span);
    +        diag.span_label(
    +            self.span,
    +            fluent::hir_analysis_label
    +        );
    +        diag.span_label(
    +            self.prev_span,
    +            fluent::hir_analysis_previous_decl_label
    +        );
    +        diag
    +    }
    +}
    +

    Now that we've defined our diagnostic, how do we use it? It's quite +straightforward, just create an instance of the struct and pass it to +emit_err (or emit_warning):

    +
    tcx.dcx().emit_err(FieldAlreadyDeclared {
    +    field_name: f.ident,
    +    span: f.span,
    +    prev_span,
    +});
    +

    Reference

    +

    #[derive(Diagnostic)] and #[derive(LintDiagnostic)] support the +following attributes:

    +
      +
    • #[diag(slug, code = "...")] +
        +
      • Applied to struct or enum variant.
      • +
      • Mandatory
      • +
      • Defines the text and error code to be associated with the diagnostic.
      • +
      • Slug (Mandatory) +
          +
        • Uniquely identifies the diagnostic and corresponds to its Fluent message, +mandatory.
        • +
        • A path to an item in rustc_errors::fluent, e.g. +rustc_errors::fluent::hir_analysis_field_already_declared +(rustc_errors::fluent is implicit in the attribute, so just +hir_analysis_field_already_declared).
        • +
        • See translation documentation.
        • +
        +
      • +
      • code = "..." (Optional) +
          +
        • Specifies the error code.
        • +
        +
      • +
      +
    • +
    • #[note] or #[note(slug)] (Optional) +
        +
      • Applied to struct or struct fields of type Span, Option<()> or ().
      • +
      • Adds a note subdiagnostic.
      • +
      • Value is a path to an item in rustc_errors::fluent for the note's +message. +
          +
        • Defaults to equivalent of .note.
        • +
        +
      • +
      • If applied to a Span field, creates a spanned note.
      • +
      +
    • +
    • #[help] or #[help(slug)] (Optional) +
        +
      • Applied to struct or struct fields of type Span, Option<()> or ().
      • +
      • Adds a help subdiagnostic.
      • +
      • Value is a path to an item in rustc_errors::fluent for the note's +message. +
          +
        • Defaults to equivalent of .help.
        • +
        +
      • +
      • If applied to a Span field, creates a spanned help.
      • +
      +
    • +
    • #[label] or #[label(slug)] (Optional) +
        +
      • Applied to Span fields.
      • +
      • Adds a label subdiagnostic.
      • +
      • Value is a path to an item in rustc_errors::fluent for the note's +message. +
          +
        • Defaults to equivalent of .label.
        • +
        +
      • +
      +
    • +
    • #[warning] or #[warning(slug)] (Optional) +
        +
      • Applied to struct or struct fields of type Span, Option<()> or ().
      • +
      • Adds a warning subdiagnostic.
      • +
      • Value is a path to an item in rustc_errors::fluent for the note's +message. +
          +
        • Defaults to equivalent of .warn.
        • +
        +
      • +
      +
    • +
    • #[suggestion{,_hidden,_short,_verbose}(slug, code = "...", applicability = "...")] +(Optional) +
        +
      • Applied to (Span, MachineApplicability) or Span fields.
      • +
      • Adds a suggestion subdiagnostic.
      • +
      • Slug (Mandatory) +
          +
        • A path to an item in rustc_errors::fluent, e.g. +rustc_errors::fluent::hir_analysis_field_already_declared +(rustc_errors::fluent is implicit in the attribute, so just +hir_analysis_field_already_declared). Fluent attributes for all messages +exist as top-level items in that module (so hir_analysis_message.attr is just +attr).
        • +
        • See translation documentation.
        • +
        • Defaults to rustc_errors::fluent::_subdiag::suggestion (or
        • +
        • .suggestion in Fluent).
        • +
        +
      • +
      • code = "..."/code("...", ...) (Mandatory) +
          +
        • One or multiple format strings indicating the code to be suggested as a +replacement. Multiple values signify multiple possible replacements.
        • +
        +
      • +
      • applicability = "..." (Optional) +
          +
        • String which must be one of machine-applicable, maybe-incorrect, +has-placeholders or unspecified.
        • +
        +
      • +
      +
    • +
    • #[subdiagnostic] +
        +
      • Applied to a type that implements Subdiagnostic (from +#[derive(Subdiagnostic)]).
      • +
      • Adds the subdiagnostic represented by the subdiagnostic struct.
      • +
      +
    • +
    • #[primary_span] (Optional) +
        +
      • Applied to Span fields on Subdiagnostics. Not used for LintDiagnostics.
      • +
      • Indicates the primary span of the diagnostic.
      • +
      +
    • +
    • #[skip_arg] (Optional) +
        +
      • Applied to any field.
      • +
      • Prevents the field from being provided as a diagnostic argument.
      • +
      +
    • +
    +

    #[derive(Subdiagnostic)]

    +

    It is common in the compiler to write a function that conditionally adds a +specific subdiagnostic to an error if it is applicable. Oftentimes these +subdiagnostics could be represented using a diagnostic struct even if the +overall diagnostic could not. In this circumstance, the Subdiagnostic +derive can be used to represent a partial diagnostic (e.g a note, label, help or +suggestion) as a struct.

    +

    Consider the definition of the "expected return type" label +shown below:

    +
    #![allow(unused)]
    +fn main() {
    +#[derive(Subdiagnostic)]
    +pub enum ExpectedReturnTypeLabel<'tcx> {
    +    #[label(hir_analysis_expected_default_return_type)]
    +    Unit {
    +        #[primary_span]
    +        span: Span,
    +    },
    +    #[label(hir_analysis_expected_return_type)]
    +    Other {
    +        #[primary_span]
    +        span: Span,
    +        expected: Ty<'tcx>,
    +    },
    +}
    +}
    +

    Like Diagnostic, Subdiagnostic can be derived for structs or +enums. Attributes that are placed on the type for structs are placed on each +variants for enums (or vice versa). Each Subdiagnostic should have one +attribute applied to the struct or each variant, one of:

    +
      +
    • #[label(..)] for defining a label
    • +
    • #[note(..)] for defining a note
    • +
    • #[help(..)] for defining a help
    • +
    • #[warning(..)] for defining a warning
    • +
    • #[suggestion{,_hidden,_short,_verbose}(..)] for defining a suggestion
    • +
    +

    All of the above must provide a slug as the first positional argument (a path +to an item in rustc_errors::fluent::*). A slug uniquely identifies the +diagnostic and is also how the compiler knows what error message to emit (in +the default locale of the compiler, or in the locale requested by the user). +See translation documentation to learn more about how +translatable error messages are written and how slug items are generated.

    +

    In our example, the Fluent message for the "expected return type" label +looks like this:

    +
    hir_analysis_expected_default_return_type = expected `()` because of default return type
    +
    +hir_analysis_expected_return_type = expected `{$expected}` because of return type
    +
    +

    Using the #[primary_span] attribute on a field (with type Span) will denote +the primary span of the subdiagnostic. A primary span is only necessary for a +label or suggestion, which can not be spanless.

    +

    Every field of the type/variant which does not have an annotation is available +in Fluent messages as a variable. Fields can be annotated #[skip_arg] if this +is undesired.

    +

    Like Diagnostic, Subdiagnostic supports Option<T> and +Vec<T> fields.

    +

    Suggestions can be emitted using one of four attributes on the type/variant:

    +
      +
    • #[suggestion(..., code = "...", applicability = "...")]
    • +
    • #[suggestion_hidden(..., code = "...", applicability = "...")]
    • +
    • #[suggestion_short(..., code = "...", applicability = "...")]
    • +
    • #[suggestion_verbose(..., code = "...", applicability = "...")]
    • +
    +

    Suggestions require #[primary_span] be set on a field and can have the +following sub-attributes:

    +
      +
    • The first positional argument specifies the path to a item in +rustc_errors::fluent corresponding to the Fluent attribute with the message +and defaults to the equivalent of .suggestion.
    • +
    • code specifies the code that should be suggested as a replacement and is a +format string (e.g. {field_name} would be replaced by the value of the +field_name field of the struct), not a Fluent identifier.
    • +
    • applicability can be used to specify the applicability in the attribute, it +cannot be used when the field's type contains an Applicability.
    • +
    +

    Applicabilities can also be specified as a field (of type Applicability) +using the #[applicability] attribute.

    +

    In the end, the Subdiagnostic derive will generate an implementation +of Subdiagnostic that looks like the following:

    +
    #![allow(unused)]
    +fn main() {
    +impl<'tcx> Subdiagnostic for ExpectedReturnTypeLabel<'tcx> {
    +    fn add_to_diag(self, diag: &mut rustc_errors::Diagnostic) {
    +        use rustc_errors::{Applicability, IntoDiagArg};
    +        match self {
    +            ExpectedReturnTypeLabel::Unit { span } => {
    +                diag.span_label(span, rustc_errors::fluent::hir_analysis_expected_default_return_type)
    +            }
    +            ExpectedReturnTypeLabel::Other { span, expected } => {
    +                diag.set_arg("expected", expected);
    +                diag.span_label(span, rustc_errors::fluent::hir_analysis_expected_return_type)
    +            }
    +        }
    +    }
    +}
    +}
    +

    Once defined, a subdiagnostic can be used by passing it to the subdiagnostic +function (example and example) on a +diagnostic or by assigning it to a #[subdiagnostic]-annotated field of a +diagnostic struct.

    +

    Reference

    +

    #[derive(Subdiagnostic)] supports the following attributes:

    +
      +
    • #[label(slug)], #[help(slug)], #[warning(slug)] or #[note(slug)] +
        +
      • Applied to struct or enum variant. Mutually exclusive with struct/enum variant attributes.
      • +
      • Mandatory
      • +
      • Defines the type to be representing a label, help or note.
      • +
      • Slug (Mandatory) +
          +
        • Uniquely identifies the diagnostic and corresponds to its Fluent message, +mandatory.
        • +
        • A path to an item in rustc_errors::fluent, e.g. +rustc_errors::fluent::hir_analysis_field_already_declared +(rustc_errors::fluent is implicit in the attribute, so just +hir_analysis_field_already_declared).
        • +
        • See translation documentation.
        • +
        +
      • +
      +
    • +
    • #[suggestion{,_hidden,_short,_verbose}(slug, code = "...", applicability = "...")] +
        +
      • Applied to struct or enum variant. Mutually exclusive with struct/enum variant attributes.
      • +
      • Mandatory
      • +
      • Defines the type to be representing a suggestion.
      • +
      • Slug (Mandatory) +
          +
        • A path to an item in rustc_errors::fluent, e.g. +rustc_errors::fluent::hir_analysis_field_already_declared +(rustc_errors::fluent is implicit in the attribute, so just +hir_analysis::field_already_declared). Fluent attributes for all messages +exist as top-level items in that module (so hir_analysis_message.attr is just +hir_analysis::attr).
        • +
        • See translation documentation.
        • +
        • Defaults to rustc_errors::fluent::_subdiag::suggestion (or
        • +
        • .suggestion in Fluent).
        • +
        +
      • +
      • code = "..."/code("...", ...) (Mandatory) +
          +
        • One or multiple format strings indicating the code to be suggested as a +replacement. Multiple values signify multiple possible replacements.
        • +
        +
      • +
      • applicability = "..." (Optional) +
          +
        • Mutually exclusive with #[applicability] on a field.
        • +
        • Value is the applicability of the suggestion.
        • +
        • String which must be one of: +
            +
          • machine-applicable
          • +
          • maybe-incorrect
          • +
          • has-placeholders
          • +
          • unspecified
          • +
          +
        • +
        +
      • +
      +
    • +
    • #[multipart_suggestion{,_hidden,_short,_verbose}(slug, applicability = "...")] +
        +
      • Applied to struct or enum variant. Mutually exclusive with struct/enum variant attributes.
      • +
      • Mandatory
      • +
      • Defines the type to be representing a multipart suggestion.
      • +
      • Slug (Mandatory): see #[suggestion]
      • +
      • applicability = "..." (Optional): see #[suggestion]
      • +
      +
    • +
    • #[primary_span] (Mandatory for labels and suggestions; optional otherwise; not applicable +to multipart suggestions) +
        +
      • Applied to Span fields.
      • +
      • Indicates the primary span of the subdiagnostic.
      • +
      +
    • +
    • #[suggestion_part(code = "...")] (Mandatory; only applicable to multipart suggestions) +
        +
      • Applied to Span fields.
      • +
      • Indicates the span to be one part of the multipart suggestion.
      • +
      • code = "..." (Mandatory) +
          +
        • Value is a format string indicating the code to be suggested as a +replacement.
        • +
        +
      • +
      +
    • +
    • #[applicability] (Optional; only applicable to (simple and multipart) suggestions) +
        +
      • Applied to Applicability fields.
      • +
      • Indicates the applicability of the suggestion.
      • +
      +
    • +
    • #[skip_arg] (Optional) +
        +
      • Applied to any field.
      • +
      • Prevents the field from being provided as a diagnostic argument.
      • +
      +
    • +
    +

    Translation

    +
    +rustc's current diagnostics translation infrastructure (as of + October 2024 +) unfortunately causes some friction for compiler contributors, and the current +infrastructure is mostly pending a redesign that better addresses needs of both +compiler contributors and translation teams. Note that there is no current +active redesign proposals (as of + October 2024 +)! +

    Please see the tracking issue https://github.com/rust-lang/rust/issues/132181 +for status updates.

    +

    We have downgraded the internal lints untranslatable_diagnostic and +diagnostic_outside_of_impl. Those internal lints previously required new code +to use the current translation infrastructure. However, because the translation +infra is waiting for a yet-to-be-proposed redesign and thus rework, we are not +mandating usage of current translation infra. Use the infra if you want to or +otherwise makes the code cleaner, but otherwise sidestep the translation infra +if you need more flexibility.

    +
    +

    rustc's diagnostic infrastructure supports translatable diagnostics using +Fluent.

    +

    Writing translatable diagnostics

    +

    There are two ways of writing translatable diagnostics:

    +
      +
    1. For simple diagnostics, using a diagnostic (or subdiagnostic) derive. +("Simple" diagnostics being those that don't require a lot of logic in +deciding to emit subdiagnostics and can therefore be represented as +diagnostic structs). See the diagnostic and subdiagnostic structs +documentation.
    2. +
    3. Using typed identifiers with Diag APIs (in +Diagnostic or Subdiagnostic or LintDiagnostic implementations).
    4. +
    +

    When adding or changing a translatable diagnostic, +you don't need to worry about the translations. +Only updating the original English message is required. +Currently, +each crate which defines translatable diagnostics has its own Fluent resource, +which is a file named messages.ftl, +located in the root of the crate +(such ascompiler/rustc_expand/messages.ftl).

    +

    Fluent

    +

    Fluent is built around the idea of "asymmetric localization", which aims to +decouple the expressiveness of translations from the grammar of the source +language (English in rustc's case). Prior to translation, rustc's diagnostics +relied heavily on interpolation to build the messages shown to the users. +Interpolated strings are hard to translate because writing a natural-sounding +translation might require more, less, or just different interpolation than the +English string, all of which would require changes to the compiler's source +code to support.

    +

    Diagnostic messages are defined in Fluent resources. A combined set of Fluent +resources for a given locale (e.g. en-US) is known as Fluent bundle.

    +
    typeck_address_of_temporary_taken = cannot take address of a temporary
    +
    +

    In the above example, typeck_address_of_temporary_taken is the identifier for +a Fluent message and corresponds to the diagnostic message in English. Other +Fluent resources can be written which would correspond to a message in another +language. Each diagnostic therefore has at least one Fluent message.

    +
    typeck_address_of_temporary_taken = cannot take address of a temporary
    +    .label = temporary value
    +
    +

    By convention, diagnostic messages for subdiagnostics are specified as +"attributes" on Fluent messages (additional related messages, denoted by the +.<attribute-name> syntax). In the above example, label is an attribute of +typeck_address_of_temporary_taken which corresponds to the message for the +label added to this diagnostic.

    +

    Diagnostic messages often interpolate additional context into the message shown +to the user, such as the name of a type or of a variable. Additional context to +Fluent messages is provided as an "argument" to the diagnostic.

    +
    typeck_struct_expr_non_exhaustive =
    +    cannot create non-exhaustive {$what} using struct expression
    +
    +

    In the above example, the Fluent message refers to an argument named what +which is expected to exist (how arguments are provided to diagnostics is +discussed in detail later).

    +

    You can consult the Fluent documentation for other usage examples of Fluent +and its syntax.

    +

    Guideline for message naming

    +

    Usually, fluent uses - for separating words inside a message name. However, +_ is accepted by fluent as well. As _ fits Rust's use cases better, due to +the identifiers on the Rust side using _ as well, inside rustc, - is not +allowed for separating words, and instead _ is recommended. The only exception +is for leading -s, for message names like -passes_see_issue.

    +

    Guidelines for writing translatable messages

    +

    For a message to be translatable into different languages, all of the +information required by any language must be provided to the diagnostic as an +argument (not just the information required in the English message).

    +

    As the compiler team gain more experience writing diagnostics that have all of +the information necessary to be translated into different languages, this page +will be updated with more guidance. For now, the Fluent documentation has +excellent examples of translating messages into different locales and the +information that needs to be provided by the code to do so.

    +

    Compile-time validation and typed identifiers

    +

    rustc's fluent_messages macro performs compile-time validation of Fluent +resources and generates code to make it easier to refer to Fluent messages in +diagnostics.

    +

    Compile-time validation of Fluent resources will emit any parsing errors +from Fluent resources while building the compiler, preventing invalid Fluent +resources from causing panics in the compiler. Compile-time validation also +emits an error if multiple Fluent messages have the same identifier.

    +

    Internals

    +

    Various parts of rustc's diagnostic internals are modified in order to support +translation.

    +

    Messages

    +

    All of rustc's traditional diagnostic APIs (e.g. struct_span_err or note) +take any message that can be converted into a DiagMessage (or +SubdiagMessage).

    +

    rustc_error_messages::DiagMessage can represent legacy non-translatable +diagnostic messages and translatable messages. Non-translatable messages are +just Strings. Translatable messages are just a &'static str with the +identifier of the Fluent message (sometimes with an additional &'static str +with an attribute).

    +

    DiagMessage never needs to be interacted with directly: +DiagMessage constants are created for each diagnostic message in a +Fluent resource (described in more detail below), or DiagMessages will +either be created in the macro-generated code of a diagnostic derive.

    +

    rustc_error_messages::SubdiagMessage is similar, it can correspond to a +legacy non-translatable diagnostic message or the name of an attribute to a +Fluent message. Translatable SubdiagMessages must be combined with a +DiagMessage (using DiagMessage::with_subdiagnostic_message) to +be emitted (an attribute name on its own is meaningless without a corresponding +message identifier, which is what DiagMessage provides).

    +

    Both DiagMessage and SubdiagMessage implement Into for any +type that can be converted into a string, and converts these into +non-translatable diagnostics - this keeps all existing diagnostic calls +working.

    +

    Arguments

    +

    Additional context for Fluent messages which are interpolated into message +contents needs to be provided to translatable diagnostics.

    +

    Diagnostics have a set_arg function that can be used to provide this +additional context to a diagnostic.

    +

    Arguments have both a name (e.g. "what" in the earlier example) and a value. +Argument values are represented using the DiagArgValue type, which is +just a string or a number. rustc types can implement IntoDiagArg with +conversion into a string or a number, and common types like Ty<'tcx> already +have such implementations.

    +

    set_arg calls are handled transparently by diagnostic derives but need to be +added manually when using diagnostic builder APIs.

    +

    Loading

    +

    rustc makes a distinction between the "fallback bundle" for en-US that is used +by default and when another locale is missing a message; and the primary fluent +bundle which is requested by the user.

    +

    Diagnostic emitters implement the Emitter trait which has two functions for +accessing the fallback and primary fluent bundles (fallback_fluent_bundle and +fluent_bundle respectively).

    +

    Emitter also has member functions with default implementations for performing +translation of a DiagMessage using the results of +fallback_fluent_bundle and fluent_bundle.

    +

    All of the emitters in rustc load the fallback Fluent bundle lazily, only +reading Fluent resources and parsing them when an error message is first being +translated (for performance reasons - it doesn't make sense to do this if no +error is being emitted). rustc_error_messages::fallback_fluent_bundle returns +a std::lazy::Lazy<FluentBundle> which is provided to emitters and evaluated +in the first call to Emitter::fallback_fluent_bundle.

    +

    The primary Fluent bundle (for the user's desired locale) is expected to be +returned by Emitter::fluent_bundle. This bundle is used preferentially when +translating messages, the fallback bundle is only used if the primary bundle is +missing a message or not provided.

    +

    There are no locale bundles distributed with the compiler, +but mechanisms are implemented for loading them.

    +
      +
    • -Ztranslate-additional-ftl can be used to load a specific resource as the +primary bundle for testing purposes.
    • +
    • -Ztranslate-lang can be provided a language identifier (something like +en-US) and will load any Fluent resources found in +$sysroot/share/locale/$locale/ directory (both the user provided +sysroot and any sysroot candidates).
    • +
    +

    Primary bundles are not currently loaded lazily and if requested will be loaded +at the start of compilation regardless of whether an error occurs. Lazily +loading primary bundles is possible if it can be assumed that loading a bundle +won't fail. Bundle loading can fail if a requested locale is missing, Fluent +files are malformed, or a message is duplicated in multiple resources.

    +

    Lints

    +

    This page documents some of the machinery around lint registration and how we +run lints in the compiler.

    +

    The LintStore is the central piece of infrastructure, around which +everything rotates. The LintStore is held as part of the Session, and it +gets populated with the list of lints shortly after the Session is created.

    +

    Lints vs. lint passes

    +

    There are two parts to the linting mechanism within the compiler: lints and +lint passes. Unfortunately, a lot of the documentation we have refers to both +of these as just "lints."

    +

    First, we have the lint declarations themselves, +and this is where the name and default lint level and other metadata come from. +These are normally defined by way of the declare_lint! macro, +which boils down to a static with type &rustc_lint_defs::Lint +(although this may change in the future, +as the macro is somewhat unwieldy to add new fields to, +like all macros).

    +

    As of Aug 2022, +we lint against direct declarations without the use of the macro.

    +

    Lint declarations don't carry any "state" - they are merely global identifiers +and descriptions of lints. We assert at runtime that they are not registered +twice (by lint name).

    +

    Lint passes are the meat of any lint. Notably, there is not a one-to-one +relationship between lints and lint passes; a lint might not have any lint pass +that emits it, it could have many, or just one -- the compiler doesn't track +whether a pass is in any way associated with a particular lint, and frequently +lints are emitted as part of other work (e.g., type checking, etc.).

    +

    Registration

    +

    High-level overview

    +

    In rustc_interface::run_compiler, +the LintStore is created, +and all lints are registered.

    +

    There are three 'sources' of lints:

    +
      +
    • internal lints: lints only used by the rustc codebase
    • +
    • builtin lints: lints built into the compiler and not provided by some outside +source
    • +
    • rustc_interface::Configregister_lints: lints passed into the compiler +during construction
    • +
    +

    Lints are registered via the LintStore::register_lint function. This should +happen just once for any lint, or an ICE will occur.

    +

    Once the registration is complete, we "freeze" the lint store by placing it in +an Arc.

    +

    Lint passes are registered separately into one of the categories +(pre-expansion, early, late, late module). Passes are registered as a closure +-- i.e., impl Fn() -> Box<dyn X>, where dyn X is either an early or late +lint pass trait object. When we run the lint passes, we run the closure and +then invoke the lint pass methods. The lint pass methods take &mut self so +they can keep track of state internally.

    +

    Internal lints

    +

    These are lints used just by the compiler or drivers like clippy. They can be +found in rustc_lint::internal.

    +

    An example of such a lint is the check that lint passes are implemented using +the declare_lint_pass! macro and not by hand. This is accomplished with the +LINT_PASS_IMPL_WITHOUT_MACRO lint.

    +

    Registration of these lints happens in the rustc_lint::register_internals +function which is called when constructing a new lint store inside +rustc_lint::new_lint_store.

    +

    Builtin Lints

    +

    These are primarily described in two places, +rustc_lint_defs::builtin and rustc_lint::builtin. +Often the first provides the definitions for the lints themselves, +and the latter provides the lint pass definitions (and implementations), +but this is not always true.

    +

    The builtin lint registration happens in +the rustc_lint::register_builtins function. +Just like with internal lints, +this happens inside of rustc_lint::new_lint_store.

    +

    Driver lints

    +

    These are the lints provided by drivers via the rustc_interface::Config +register_lints field, which is a callback. Drivers should, if finding it +already set, call the function currently set within the callback they add. The +best way for drivers to get access to this is by overriding the +Callbacks::config function which gives them direct access to the Config +structure.

    +

    Compiler lint passes are combined into one pass

    +

    Within the compiler, for performance reasons, we usually do not register dozens +of lint passes. Instead, we have a single lint pass of each variety (e.g., +BuiltinCombinedModuleLateLintPass) which will internally call all of the +individual lint passes; this is because then we get the benefits of static over +dynamic dispatch for each of the (often empty) trait methods.

    +

    Ideally, we'd not have to do this, since it adds to the complexity of +understanding the code. However, with the current type-erased lint store +approach, it is beneficial to do so for performance reasons.

    +

    Error codes

    +

    We generally try to assign each error message a unique code like E0123. These +codes are defined in the compiler in the diagnostics.rs files found in each +crate, which basically consist of macros. All error codes have an associated +explanation: new error codes must include them. Note that not all historical +(no longer emitted) error codes have explanations.

    +

    Error explanations

    +

    The explanations are written in Markdown (see the CommonMark Spec for +specifics around syntax), and all of them are linked in the rustc_error_codes +crate. Please read RFC 1567 for details on how to format and write long error +codes. As of February 2023, there is an +effort1 to replace this largely outdated RFC with a new more +flexible standard.

    +

    Error explanations should expand on the error message and provide details about +why the error occurs. It is not helpful for users to copy-paste a quick fix; +explanations should help users understand why their code cannot be accepted by +the compiler. Rust prides itself on helpful error messages and long-form +explanations are no exception. However, before error explanations are +overhauled1 it is a bit open as to how exactly they should be +written, as always: ask your reviewer or ask around on the Rust Discord or Zulip.

    +

    Allocating a fresh code

    +

    Error codes are stored in compiler/rustc_error_codes.

    +

    To create a new error, you first need to find the next available +code. You can find it with tidy:

    +
    ./x test tidy
    +
    +

    This will invoke the tidy script, which generally checks that your code obeys +our coding conventions. Some of these jobs check error codes and ensure that +there aren't duplicates, etc (the tidy check is defined in +src/tools/tidy/src/error_codes.rs). Once it is finished with that, tidy will +print out the highest used error code:

    +
    ...
    +tidy check
    +Found 505 error codes
    +Highest error code: `E0591`
    +...
    +
    +

    Here we see the highest error code in use is E0591, so we probably want +E0592. To be sure, run rg E0592 and check, you should see no references.

    +

    You will have to write an extended description for your error, +which will go in rustc_error_codes/src/error_codes/E0592.md. +To register the error, open rustc_error_codes/src/error_codes.rs and add the +code (in its proper numerical order) into register_diagnostics! macro, like +this:

    +
    #![allow(unused)]
    +fn main() {
    +register_diagnostics! {
    +    ...
    +    E0592: include_str!("./error_codes/E0592.md"),
    +}
    +}
    +

    To actually issue the error, you can use the struct_span_code_err! macro:

    +
    #![allow(unused)]
    +fn main() {
    +struct_span_code_err!(self.dcx(), // some path to the `DiagCtxt` here
    +                 span, // whatever span in the source you want
    +                 E0592, // your new error code
    +                 fluent::example::an_error_message)
    +    .emit() // actually issue the error
    +}
    +

    If you want to add notes or other snippets, you can invoke methods before you +call .emit():

    +
    #![allow(unused)]
    +fn main() {
    +struct_span_code_err!(...)
    +    .span_label(another_span, fluent::example::example_label)
    +    .span_note(another_span, fluent::example::separate_note)
    +    .emit()
    +}
    +

    For an example of a PR adding an error code, see #76143.

    +

    Running error code doctests

    +

    To test the examples added in rustc_error_codes/src/error_codes, run the +error index generator using:

    +
    ./x test ./src/tools/error_index_generator
    +
    +
    +
    1. +

      See the draft RFC here. ↩2

      +
    2. +

    Diagnostic Items

    +

    While writing lints it's common to check for specific types, traits and +functions. This raises the question on how to check for these. Types can be +checked by their complete type path. However, this requires hard coding paths +and can lead to misclassifications in some edge cases. To counteract this, +rustc has introduced diagnostic items that are used to identify types via +Symbols.

    +

    Finding diagnostic items

    +

    Diagnostic items are added to items inside rustc/std/core/alloc with the +rustc_diagnostic_item attribute. The item for a specific type can be found by +opening the source code in the documentation and looking for this attribute. +Note that it's often added with the cfg_attr attribute to avoid compilation +errors during tests. A definition often looks like this:

    +
    // This is the diagnostic item for this type   vvvvvvv
    +#[cfg_attr(not(test), rustc_diagnostic_item = "Penguin")]
    +struct Penguin;
    +
    +

    Diagnostic items are usually only added to traits, +types, +and standalone functions. +If the goal is to check for an associated type or method, +please use the diagnostic item of the item and reference +Using Diagnostic Items.

    +

    Adding diagnostic items

    +

    A new diagnostic item can be added with these two steps:

    +
      +
    1. +

      Find the target item inside the Rust repo. Now add the diagnostic item as a +string via the rustc_diagnostic_item attribute. This can sometimes cause +compilation errors while running tests. These errors can be avoided by using +the cfg_attr attribute with the not(test) condition (it's fine adding +then for all rustc_diagnostic_item attributes as a preventive manner). At +the end, it should look like this:

      +
      // This will be the new diagnostic item        vvv
      +#[cfg_attr(not(test), rustc_diagnostic_item = "Cat")]
      +struct Cat;
      +
      +

      For the naming conventions of diagnostic items, please refer to +Naming Conventions.

      +
    2. +
    3. +

      Diagnostic items in code are accessed via symbols in +rustc_span::symbol::sym. +To add your newly-created diagnostic item, +simply open the module file, +and add the name (In this case Cat) at the correct point in the list.

      +
    4. +
    +

    Now you can create a pull request with your changes. :tada:

    +
    +

    NOTE: +When using diagnostic items in other projects like Clippy, +it might take some time until the repos get synchronized.

    +
    +

    Naming conventions

    +

    Diagnostic items don't have a naming convention yet. +Following are some guidelines that should be used in future, +but might differ from existing names:

    +
      +
    • Types, traits, and enums are named using UpperCamelCase +(Examples: Iterator and HashMap)
    • +
    • For type names that are used multiple times, +like Writer, +it's good to choose a more precise name, +maybe by adding the module to it +(Example: IoWriter)
    • +
    • Associated items should not get their own diagnostic items, +but instead be accessed indirectly by the diagnostic item +of the type they're originating from.
    • +
    • Freestanding functions like std::mem::swap() should be named using +snake_case with one important (export) module as a prefix +(Examples: mem_swap and cmp_max)
    • +
    • Modules should usually not have a diagnostic item attached to them. +Diagnostic items were added to avoid the usage of paths, +and using them on modules would therefore most likely be counterproductive.
    • +
    +

    Using diagnostic items

    +

    In rustc, diagnostic items are looked up via Symbols from inside the +rustc_span::symbol::sym module. These can then be mapped to DefIds +using TyCtxt::get_diagnostic_item() or checked if they match a DefId +using TyCtxt::is_diagnostic_item(). When mapping from a diagnostic item to +a DefId, the method will return a Option<DefId>. This can be None if +either the symbol isn't a diagnostic item or the type is not registered, for +instance when compiling with #[no_std]. +All the following examples are based on DefIds and their usage.

    +

    Example: Checking for a type

    +
    #![allow(unused)]
    +fn main() {
    +use rustc_span::symbol::sym;
    +
    +/// This example checks if the given type (`ty`) has the type `HashMap` using
    +/// `TyCtxt::is_diagnostic_item()`
    +fn example_1(cx: &LateContext<'_>, ty: Ty<'_>) -> bool {
    +    match ty.kind() {
    +        ty::Adt(adt, _) => cx.tcx.is_diagnostic_item(sym::HashMap, adt.did()),
    +        _ => false,
    +    }
    +}
    +}
    +

    Example: Checking for a trait implementation

    +
    #![allow(unused)]
    +fn main() {
    +/// This example checks if a given [`DefId`] from a method is part of a trait
    +/// implementation defined by a diagnostic item.
    +fn is_diag_trait_item(
    +    cx: &LateContext<'_>,
    +    def_id: DefId,
    +    diag_item: Symbol
    +) -> bool {
    +    if let Some(trait_did) = cx.tcx.trait_of_item(def_id) {
    +        return cx.tcx.is_diagnostic_item(diag_item, trait_did);
    +    }
    +    false
    +}
    +}
    +

    Associated Types

    +

    Associated types of diagnostic items can be accessed indirectly by first +getting the DefId of the trait and then calling +TyCtxt::associated_items(). This returns an AssocItems object which can +be used for further checks. Checkout +clippy_utils::ty::get_iterator_item_ty() for an example usage of this.

    +

    Usage in Clippy

    +

    Clippy tries to use diagnostic items where possible and has developed some +wrapper and utility functions. Please also refer to its documentation when +using diagnostic items in Clippy. (See Common tools for writing +lints.)

    + +

    These are probably only interesting to people +who really want to take a deep dive into the topic :)

    +
      +
    • rust#60966: The Rust PR that introduced diagnostic items
    • +
    • rust-clippy#5393: Clippy's tracking issue for moving away from hard coded paths to +diagnostic item
    • +
    + +

    ErrorGuaranteed

    +

    The previous sections have been about the error message that a user of the +compiler sees. But emitting an error can also have a second important side +effect within the compiler source code: it generates an +ErrorGuaranteed.

    +

    ErrorGuaranteed is a zero-sized type that is unconstructable outside of the +rustc_errors crate. It is generated whenever an error is reported +to the user, so that if your compiler code ever encounters a value of type +ErrorGuaranteed, the compilation is statically guaranteed to fail. This is +useful for avoiding unsoundness bugs because you can statically check that an +error code path leads to a failure.

    +

    There are some important considerations about the usage of ErrorGuaranteed:

    +
      +
    • It does not convey information about the kind of error. For example, the +error may be due (indirectly) to a delayed bug or other compiler error. +Thus, you should not rely on +ErrorGuaranteed when deciding whether to emit an error, or what kind of error +to emit.
    • +
    • ErrorGuaranteed should not be used to indicate that a compilation will +emit an error in the future. It should be used to indicate that an error +has already been emitted -- that is, the emit() function has +already been called. For example, if we detect that a future part of the +compiler will error, we cannot use ErrorGuaranteed unless we first emit +an error or delayed bug ourselves.
    • +
    +

    Thankfully, in most cases, it should be statically impossible to abuse +ErrorGuaranteed.

    +

    Analysis

    +

    This part discusses the many analyses that the compiler uses to check various +properties of the code and to inform later stages. Typically, this is what people +mean when they talk about "Rust's type system". This includes the +representation, inference, and checking of types, the trait system, and the +borrow checker. These analyses do not happen as one big pass or set of +contiguous passes. Rather, they are spread out throughout various parts of the +compilation process and use different intermediate representations. For example, +type checking happens on the HIR, while borrow checking happens on the MIR. +Nonetheless, for the sake of presentation, we will discuss all of these +analyses in this part of the guide.

    +

    Generic parameter definitions

    +

    This chapter will discuss how rustc tracks what generic parameters are introduced. For example given some struct Foo<T> how does rustc track that Foo defines some type parameter T (and no other generic parameters).

    +

    This will not cover how we track generic parameters introduced via for<'a> syntax (e.g. in where clauses or fn types), which is covered elsewhere in the chapter on Binders .

    +

    ty::Generics

    +

    The generic parameters introduced by an item are tracked by the ty::Generics struct. Sometimes items allow usage of generics defined on parent items, this is accomplished via the ty::Generics struct having an optional field to specify a parent item to inherit generic parameters of. For example given the following code:

    +
    trait Trait<T> {
    +    fn foo<U>(&self);
    +}
    +

    The ty::Generics used for foo would contain [U] and a parent of Some(Trait). Trait would have a ty::Generics containing [Self, T] with a parent of None.

    +

    The GenericParamDef struct is used to represent each individual generic parameter in a ty::Generics listing. The GenericParamDef struct contains information about the generic parameter, for example its name, defid, what kind of parameter it is (i.e. type, const, lifetime).

    +

    GenericParamDef also contains a u32 index representing what position the parameter is (starting from the outermost parent), this is the value used to represent usages of generic parameters (more on this in the chapter on representing types).

    +

    Interestingly, ty::Generics does not currently contain every generic parameter defined on an item. In the case of functions it only contains the early bound parameters.

    +

    EarlyBinder and instantiating parameters

    +

    Given an item that introduces a generic parameter T, whenever we refer to types inside of foo (i.e. the return type or argument types) from outside of foo we must take care to handle the generic parameters defined on foo. As an example:

    +
    fn foo<T, U>(a: T, _b: U) -> T { a }
    +
    +fn main() {
    +    let c = foo::<i32, u128>(1, 2);
    +}
    +

    When type checking main we cannot just naively look at the return type of foo and assign the type T to the variable c, The function main does not define any generic parameters, T is completely meaningless in this context. More generally whenever an item introduces (binds) generic parameters, when accessing types inside the item from outside, the generic parameters must be instantiated with values from the outer item.

    +

    In rustc we track this via the EarlyBinder type, the return type of foo is represented as an EarlyBinder<Ty> with the only way to access Ty being to provide arguments for any generic parameters Ty might be using. This is implemented via the EarlyBinder::instantiate method which discharges the binder returning the inner value with all the generic parameters replaced by the provided arguments.

    +

    To go back to our example, when type checking main the return type of foo would be represented as EarlyBinder(T/#0). Then, because we called the function with i32, u128 for the generic arguments, we would call EarlyBinder::instantiate on the return type with [i32, u128] for the args. This would result in an instantiated return type of i32 that we can use as the type of the local c.

    +

    Here are some more examples:

    +
    fn foo<T>() -> Vec<(u32, T)> { Vec::new() }
    +fn bar() {
    +    // the return type of `foo` before instantiating it would be:
    +    // `EarlyBinder(Adt(Vec, &[Tup(&[u32, T/#=0])]))`
    +    // we then instantiate the binder with `[u64]` resulting in the type:
    +    // `Adt(Vec, &[Tup(&[u32, u64])])`
    +    let a = foo::<u64>();
    +}
    +
    struct Foo<A, B> {
    +    x: Vec<A>,
    +    ..
    +}
    +
    +fn bar(foo: Foo<u32, f32>) { 
    +    // the type of `foo`'s `x` field before instantiating it would be:
    +    // `EarlyBinder(Vec<A/#0>)`
    +    // we then instantiate the binder with `[u32, f32]` as those are the
    +    // generic arguments to the `Foo` struct. This results in a type of:
    +    // `Vec<u32>`
    +    let y = foo.x;
    +}
    +

    In the compiler the instantiate call for this is done in FieldDef::ty (src), at some point during type checking bar we will wind up calling FieldDef::ty(x, &[u32, f32]) in order to obtain the type of foo.x.

    +

    Note on indices: It is a bug if the index of a Param does not match what the EarlyBinder binds. For +example, if the index is out of bounds or the index of a lifetime corresponds to a type parameter. +These sorts of errors are caught earlier in the compiler during name resolution where we disallow references +to generics parameters introduced by items that should not be nameable by the inner item.

    +
    +

    As mentioned previously when outside of an item, it is important to instantiate the EarlyBinder with generic arguments before accessing the value inside, but the setup for when we are conceptually inside of the binder already is a bit different.

    +

    For example:

    +
    #![allow(unused)]
    +fn main() {
    +impl<T> Trait for Vec<T> {
    +    fn foo(&self, b: Self) {}
    +}
    +}
    +

    When constructing a Ty to represent the b parameter's type we need to get the type of Self on the impl that we are inside. This can be acquired by calling the type_of query with the impl's DefId, however, this will return a EarlyBinder<Ty> as the impl block binds generic parameters that may have to be discharged if we are outside of the impl.

    +

    The EarlyBinder type provides an instantiate_identity function for discharging the binder when you are "already inside of it". This is effectively a more performant version of writing EarlyBinder::instantiate(GenericArgs::identity_for_item(..)). Conceptually this discharges the binder by instantiating it with placeholders in the root universe (we will talk about what this means in the next few chapters). In practice though it simply returns the inner value with no modification taking place.

    +

    Binder and Higher ranked regions

    +

    Sometimes we define generic parameters not on an item but as part of a type or a where clause. As an example the type for<'a> fn(&'a u32) or the where clause for<'a> T: Trait<'a> both introduce a generic lifetime named 'a. Currently there is no stable syntax for for<T> or for<const N: usize> but on nightly feature(non_lifetime_binders) can be used to write where clauses (but not types) using for<T>/for<const N: usize>.

    +

    The for is referred to as a "binder" because it brings new names into scope. In rustc we use the Binder type to track where these parameters are introduced and what the parameters are (i.e. how many and whether the parameter is a type/const/region). A type such as for<'a> fn(&'a u32) would be +represented in rustc as:

    +
    Binder(
    +    fn(&RegionKind::Bound(DebruijnIndex(0), BoundVar(0)) u32) -> (),
    +    &[BoundVariableKind::Region(...)],
    +)
    +
    +

    Usages of these parameters is represented by the RegionKind::Bound (or TyKind::Bound/ConstKind::Bound variants). These bound regions/types/consts are composed of two main pieces of data:

    +
      +
    • A DebruijnIndex to specify which binder we are referring to.
    • +
    • A BoundVar which specifies which of the parameters that the Binder introduces we are referring to.
    • +
    +

    We also sometimes store some extra information for diagnostics reasons via the BoundTyKind/BoundRegionKind but this is not important for type equality or more generally the semantics of Ty. (omitted from the above example)

    +

    In debug output (and also informally when talking to each other) we tend to write these bound variables in the format of ^DebruijnIndex_BoundVar. The above example would instead be written as Binder(fn(&'^0_0), &[BoundVariableKind::Region]). Sometimes when the DebruijnIndex is 0 we just omit it and would write ^0.

    +

    Another concrete example, this time a mixture of for<'a> in a where clause and a type:

    +
    where
    +    for<'a> Foo<for<'b> fn(&'a &'b T)>: Trait,
    +
    +

    This would be represented as

    +
    Binder(
    +    Foo<Binder(
    +        fn(&'^1_0 &'^0 T/#0),
    +        [BoundVariableKind::Region(...)]
    +    )>: Trait,
    +    [BoundVariableKind::Region(...)]
    +)
    +
    +

    Note how the '^1_0 refers to the 'a parameter. We use a DebruijnIndex of 1 to refer to the binder one level up from the innermost one, and a var of 0 to refer to the first parameter bound which is 'a. We also use '^0 to refer to the 'b parameter, the DebruijnIndex is 0 (referring to the innermost binder) so we omit it, leaving only the boundvar of 0 referring to the first parameter bound which is 'b.

    +

    We did not always explicitly track the set of bound vars introduced by each Binder, this caused a number of bugs (read: ICEs #81193, #79949, #83017). By tracking these explicitly we can assert when constructing higher ranked where clauses/types that there are no escaping bound variables or variables from a different binder. See the following example of an invalid type inside of a binder:

    +
    Binder(
    +    fn(&'^1_0 &'^1 T/#0),
    +    &[BoundVariableKind::Region(...)],
    +)
    +
    +

    This would cause all kinds of issues as the region '^1_0 refers to a binder at a higher level than the outermost binder i.e. it is an escaping bound var. The '^1 region (also writeable as '^0_1) is also ill formed as the binder it refers to does not introduce a second parameter. Modern day rustc will ICE when constructing this binder due to both of those reasons, in the past we would have simply allowed this to work and then ran into issues in other parts of the codebase.

    +

    Instantiating Binders

    +

    Much like EarlyBinder, when accessing the inside of a Binder we must first discharge it by replacing the bound vars with some other value. This is for much the same reason as with EarlyBinder, types referencing parameters introduced by the Binder do not make any sense outside of that binder, for example:

    +
    fn foo<'a>(a: &'a u32) -> &'a u32 {
    +    a
    +}
    +fn bar<T>(a: fn(&u32) -> T) -> T {
    +    a(&10)
    +}
    +
    +fn main() {
    +    let higher_ranked_fn_ptr = foo as for<'a> fn(&'a u32) -> &'a u32;
    +    let references_bound_vars = bar(higher_ranked_fn_ptr);
    +}
    +

    In this example we are providing an argument of type for<'a> fn(&'^0 u32) -> &'^0 u32 to bar, we do not want to allow T to be inferred to the type &'^0 u32 as it would be rather nonsensical (and likely unsound if we did not happen to ICE, main has no idea what 'a is so how would the borrow checker handle a borrow with lifetime 'a).

    +

    Unlike EarlyBinder we typically do not instantiate Binder with some concrete set of arguments from the user, i.e. ['b, 'static] as arguments to a for<'a1, 'a2> fn(&'a1 u32, &'a2 u32). Instead we usually instantiate the binder with inference variables or placeholders.

    +

    Instantiating with inference variables

    +

    We instantiate binders with inference variables when we are trying to infer a possible instantiation of the binder, e.g. calling higher ranked function pointers or attempting to use a higher ranked where-clause to prove some bound. For example, given the higher_ranked_fn_ptr from the example above, if we were to call it with &10_u32 we would:

    +
      +
    • Instantiate the binder with infer vars yielding a signature of fn(&'?0 u32) -> &'?0 u32)
    • +
    • Equate the type of the provided argument &10_u32 (&'static u32) with the type in the signature, &'?0 u32, inferring '?0 = 'static
    • +
    • The provided arguments were correct as we were successfully able to unify the types of the provided arguments with the types of the arguments in fn ptr signature
    • +
    +

    As another example of instantiating with infer vars, given some for<'a> T: Trait<'a> where-clause, if we were attempting to prove that T: Trait<'static> holds we would:

    +
      +
    • Instantiate the binder with infer vars yielding a where clause of T: Trait<'?0>
    • +
    • Equate the goal of T: Trait<'static> with the instantiated where clause, inferring '?0 = 'static
    • +
    • The goal holds because we were successfully able to unify T: Trait<'static> with T: Trait<'?0>
    • +
    +

    Instantiating binders with inference variables can be accomplished by using the instantiate_binder_with_fresh_vars method on InferCtxt. Binders should be instantiated with infer vars when we only care about one specific instantiation of the binder, if instead we wish to reason about all possible instantiations of the binder then placeholders should be used instead.

    +

    Instantiating with placeholders

    +

    Placeholders are very similar to Ty/ConstKind::Param/ReEarlyParam, they represent some unknown type that is only equal to itself. Ty/Const and Region all have a Placeholder variant that is comprised of a Universe and a BoundVar.

    +

    The Universe tracks which binder the placeholder originated from, and the BoundVar tracks which parameter on said binder that this placeholder corresponds to. Equality of placeholders is determined solely by whether the universes are equal and the BoundVars are equal. See the chapter on Placeholders and Universes for more information.

    +

    When talking with other rustc devs or seeing Debug formatted Ty/Const/Regions, Placeholder will often be written as '!UNIVERSE_BOUNDVARS. For example given some type for<'a> fn(&'a u32, for<'b> fn(&'b &'a u32)), after instantiating both binders (assuming the Universe in the current InferCtxt was U0 beforehand), the type of &'b &'a u32 would be represented as &'!2_0 &!1_0 u32.

    +

    When the universe of the placeholder is 0, it will be entirely omitted from the debug output, i.e. !0_2 would be printed as !2. This rarely happens in practice though as we increase the universe in the InferCtxt when instantiating a binder with placeholders so usually the lowest universe placeholders encounterable are ones in U1.

    +

    Binders can be instantiated with placeholders via the enter_forall method on InferCtxt. It should be used whenever the compiler should care about any possible instantiation of the binder instead of one concrete instantiation.

    +

    Note: in the original example of this chapter it was mentioned that we should not infer a local variable to have type &'^0 u32. This code is prevented from compiling via universes (as explained in the linked chapter)

    +

    Why have both RePlaceholder and ReBound?

    +

    You may be wondering why we have both of these variants, afterall the data stored in Placeholder is effectively equivalent to that of ReBound: something to track which binder, and an index to track which parameter the Binder introduced.

    +

    The main reason for this is that Bound is a more syntactic representation of bound variables whereas Placeholder is a more semantic representation. As a concrete example:

    +
    #![allow(unused)]
    +fn main() {
    +impl<'a> Other<'a> for &'a u32 { }
    +
    +impl<T> Trait for T
    +where
    +    for<'a> T: Other<'a>,
    +{ ... }
    +
    +impl<T> Bar for T
    +where
    +    for<'a> &'a T: Trait
    +{ ... }
    +}
    +

    Given these trait implementations u32: Bar should not hold. &'a u32 only implements Other<'a> when the lifetime of the borrow and the lifetime on the trait are equal. However if we only used ReBound and did not have placeholders it may be easy to accidentally believe that trait bound does hold. To explain this let's walk through an example of trying to prove u32: Bar in a world where rustc did not have placeholders:

    +
      +
    • We start by trying to prove u32: Bar
    • +
    • We find the impl<T> Bar for T impl, we would wind up instantiating the EarlyBinder with u32 (note: this is not quite accurate as we first instantiate the binder with an inference variable that we then infer to be u32 but that distinction is not super important here)
    • +
    • There is a where clause for<'a> &'^0 T: Trait on the impl, as we instantiated the early binder with u32 we actually have to prove for<'a> &'^0 u32: Trait
    • +
    • We find the impl<T> Trait for T impl, we would wind up instantiating the EarlyBinder with &'^0 u32
    • +
    • There is a where clause for<'a> T: Other<'^0>, as we instantiated the early binder with &'^0 u32 we actually have to prove for<'a> &'^0 u32: Other<'^0>
    • +
    • We find the impl<'a> Other<'a> for &'a u32 and this impl is enough to prove the bound as the lifetime on the borrow and on the trait are both '^0
    • +
    +

    This end result is incorrect as we had two separate binders introducing their own generic parameters, the trait bound should have ended up as something like for<'a1, 'a2> &'^1 u32: Other<'^0> which is not satisfied by the impl<'a> Other<'a> for &'a u32.

    +

    While in theory we could make this work it would be quite involved and more complex than the current setup, we would have to:

    +
      +
    • "rewrite" bound variables to have a higher DebruijnIndex whenever instantiating a Binder/EarlyBinder with a Bound ty/const/region
    • +
    • When inferring an inference variable to a bound var, if that bound var is from a binder enterred after creating the infer var, we would have to lower the DebruijnIndex of the var.
    • +
    • Separately track what binder an inference variable was created inside of, also what the innermost binder it can name parameters from (currently we only have to track the latter)
    • +
    • When resolving inference variables rewrite any bound variables according to the current binder depth of the infcx
    • +
    • Maybe more (while writing this list items kept getting added so it seems naive to think this is exhaustive)
    • +
    +

    Fundamentally all of this complexity is because Bound ty/const/regions have a different representation for a given parameter on a Binder depending on how many other Binders there are between the binder introducing the parameter, and its usage. For example given the following code:

    +
    #![allow(unused)]
    +fn main() {
    +fn foo<T>()
    +where
    +    for<'a> T: Trait<'a, for<'b> fn(&'b T, &'a u32)>
    +{ ... }
    +}
    +

    That where clause would be written as:
    +for<'a> T: Trait<'^0, for<'b> fn(&'^0 T, &'^1_0 u32)>
    +Despite there being two references to the 'a parameter they are both represented differently: ^0 and ^1_0, due to the fact that the latter usage is nested under a second Binder for the inner function pointer type.

    +

    This is in contrast to Placeholder ty/const/regions which do not have this limitation due to the fact that Universes are specific to the current InferCtxt not the usage site of the parameter.

    +

    It is trivially possible to instantiate EarlyBinders and unify inference variables with existing Placeholders as no matter what context the Placeholder is in, it will have the same representation. As an example if we were to instantiate the binder on the higher ranked where clause from above, it would be represented like so:
    +T: Trait<'!1_0, for<'b> fn(&'^0 T, &'!1_0 u32)>
    +the RePlaceholder representation for both usages of 'a are the same despite one being underneath another Binder.

    +

    If we were to then instantiate the binder on the function pointer we would get a type such as:
    +fn(&'!2_0 T, ^'!1_0 u32)
    +the RePlaceholder for the 'b parameter is in a higher universe to track the fact that its binder was instantiated after the binder for 'a.

    +

    Instantiating with ReLateParam

    +

    As discussed in the chapter about representing types, RegionKind has two variants for representing generic parameters, ReLateParam and ReEarlyParam. +ReLateParam is conceptually a Placeholder that is always in the root universe (U0). It is used when instantiating late bound parameters of functions/closures while inside of them. Its actual representation is relatively different from both ReEarlyParam and RePlaceholder:

    +
      +
    • A DefId for the item that introduced the late bound generic parameter
    • +
    • A BoundRegionKind which either specifies the DefId of the generic parameter and its name (via a Symbol), or that this placeholder is representing the anonymous lifetime of a Fn/FnMut closure's self borrow. There is also a variant for BrAnon but this is not used for ReLateParam.
    • +
    +

    For example, given the following code:

    +
    impl Trait for Whatever {
    +    fn foo<'a>(a: &'a u32) -> &'a u32 {
    +        let b: &'a u32 = a;
    +        b
    +    }
    +}
    +

    the lifetime 'a in the type &'a u32 in the function body would be represented as:

    +
    ReLateParam(
    +    {impl#0}::foo,
    +    BoundRegionKind::BrNamed({impl#0}::foo::'a, "'a")
    +)
    +
    +

    In this specific case of referencing late bound generic parameters of a function from inside the body this is done implicitly during hir_ty_lowering rather than explicitly when instantiating a Binder somewhere. In some cases however, we do explicitly instantiate a Binder with ReLateParams.

    +

    Generally whenever we have a Binder for late bound parameters on a function/closure and we are conceptually inside of the binder already, we use liberate_late_bound_regions to instantiate it with ReLateParams. That makes this operation the Binder equivalent to EarlyBinder's instantiate_identity.

    +

    As a concrete example, accessing the signature of a function we are type checking will be represented as EarlyBinder<Binder<FnSig>>. As we are already "inside" of these binders, we would call instantiate_identity followed by liberate_late_bound_regions.

    +

    Early vs Late bound parameters

    + +
    +

    NOTE: This chapter largely talks about early/late bound as being solely relevant when discussing function item types/function definitions. This is potentially not completely true, async blocks and closures should likely be discussed somewhat in this chapter.

    +
    +

    What does it mean to be "early" bound or "late" bound

    +

    Every function definition has a corresponding ZST that implements the Fn* traits known as a function item type. This part of the chapter will talk a little bit about the "desugaring" of function item types as it is useful context for explaining the difference between early bound and late bound generic parameters.

    +

    Let's start with a very trivial example involving no generic parameters:

    +
    #![allow(unused)]
    +fn main() {
    +fn foo(a: String) -> u8 {
    +    1
    +    /* snip */
    +}
    +}
    +

    If we explicitly wrote out the definitions for the function item type corresponding to foo and its associated Fn impl it would look something like this:

    +
    struct FooFnItem;
    +
    +impl Fn<(String,)> for FooFnItem {
    +    type Output = u8;
    +    /* fn call(&self, ...) -> ... { ... } */
    +}
    +

    The builtin impls for the FnMut/FnOnce traits as well as the impls for Copy and Clone were omitted for brevity reasons (although these traits are implemented for function item types).

    +

    A slightly more complicated example would involve introducing generic parameters to the function:

    +
    #![allow(unused)]
    +fn main() {
    +fn foo<T: Sized>(a: T) -> T { 
    +    a
    +    /* snip */
    +}
    +}
    +

    Writing out the definitions would look something like this:

    +
    struct FooFnItem<T: Sized>(PhantomData<fn(T) -> T>);
    +
    +impl<T: Sized> Fn<(T,)> for FooFnItem<T> {
    +    type Output = T;
    +    /* fn call(&self, ...) -> ... { ... } */
    +}
    +

    Note that the function item type FooFnItem is generic over some type parameter T as defined on the function foo. However, not all generic parameters defined on functions are also defined on the function item type as demonstrated here:

    +
    #![allow(unused)]
    +fn main() {
    +fn foo<'a, T: Sized>(a: &'a T) -> &'a T {
    +    a
    +    /* snip */
    +}
    +}
    +

    With its "desugared" form looking like so:

    +
    struct FooFnItem<T: Sized>(PhantomData<for<'a> fn(&'a T) -> &'a T>);
    +
    +impl<'a, T: Sized> Fn<(&'a T,)> for FooFnItem<T> {
    +    type Output = &'a T;
    +    /* fn call(&self, ...) -> ... { ... } */
    +}
    +

    The lifetime parameter 'a from the function foo is not present on the function item type FooFnItem and is instead introduced on the builtin impl solely for use in representing the argument types.

    +

    Generic parameters not all being defined on the function item type means that there are two steps where generic arguments are provided when calling a function.

    +
      +
    1. Naming the function (e.g. let a = foo;) the arguments for FooFnItem are provided.
    2. +
    3. Calling the function (e.g. a(&10);) any parameters defined on the builtin impl are provided.
    4. +
    +

    This two-step system is where the early vs late naming scheme comes from, early bound parameters are provided in the earliest step (naming the function), whereas late bound parameters are provided in the latest step (calling the function).

    +

    Looking at the desugaring from the previous example we can tell that T is an early bound type parameter and 'a is a late bound lifetime parameter as T is present on the function item type but 'a is not. See this example of calling foo annotated with where each generic parameter has an argument provided:

    +
    #![allow(unused)]
    +fn main() {
    +fn foo<'a, T: Sized>(a: &'a T) -> &'a T {
    +    a
    +    /* snip */
    +}
    +
    +// Here we provide a type argument `String` to the
    +// type parameter `T` on the function item type
    +let my_func = foo::<String>;
    +
    +// Here (implicitly) a lifetime argument is provided
    +// to the lifetime parameter `'a` on the builtin impl.
    +my_func(&String::new());
    +}
    +

    Differences between early and late bound parameters

    +

    Higher ranked function pointers and trait bounds

    +

    A generic parameter being late bound allows for more flexible usage of the function item. For example if we have some function foo with an early bound lifetime parameter and some function bar with a late bound lifetime parameter 'a we would have the following builtin Fn impls:

    +
    impl<'a> Fn<(&'a String,)> for FooFnItem<'a> { /* ... */ }
    +impl<'a> Fn<(&'a String,)> for BarFnItem { /* ... */ }
    +

    The bar function has a strictly more flexible signature as the function item type can be called with a borrow with any lifetime, whereas the foo function item type would only be callable with a borrow with the same lifetime on the function item type. We can show this by simply trying to call foo's function item type multiple times with different lifetimes:

    +
    #![allow(unused)]
    +fn main() {
    +// The `'a: 'a` bound forces this lifetime to be early bound.
    +fn foo<'a: 'a>(b: &'a String) -> &'a String { b }
    +fn bar<'a>(b: &'a String) -> &'a String { b }
    +
    +// Early bound generic parameters are instantiated here when naming
    +// the function `foo`. As `'a` is early bound an argument is provided.
    +let f = foo::<'_>;
    +
    +// Both function arguments are required to have the same lifetime as
    +// the lifetime parameter being early bound means that `f` is only
    +// callable for one specific lifetime.
    +//
    +// As we call this with borrows of different lifetimes, the borrow checker
    +// will error here.
    +f(&String::new());
    +f(&String::new());
    +}
    +

    In this example we call foo's function item type twice, each time with a borrow of a temporary. These two borrows could not possible have lifetimes that overlap as the temporaries are only alive during the function call, not after. The lifetime parameter on foo being early bound requires all callers of f to provide a borrow with the same lifetime, as this is not possible the borrow checker errors.

    +

    If the lifetime parameter on foo was late bound this would be able to compile as each caller could provide a different lifetime argument for its borrow. See the following example which demonstrates this using the bar function defined above:

    +
    #![allow(unused)]
    +fn main() {
    +fn foo<'a: 'a>(b: &'a String) -> &'a String { b }
    +fn bar<'a>(b: &'a String) -> &'a String { b }
    +
    +// Early bound parameters are instantiated here, however as `'a` is
    +// late bound it is not provided here.
    +let b = bar;
    +
    +// Late bound parameters are instantiated separately at each call site
    +// allowing different lifetimes to be used by each caller.
    +b(&String::new());
    +b(&String::new());
    +}
    +

    This is reflected in the ability to coerce function item types to higher ranked function pointers and prove higher ranked Fn trait bounds. We can demonstrate this with the following example:

    +
    #![allow(unused)]
    +fn main() {
    +// The `'a: 'a` bound forces this lifetime to be early bound.
    +fn foo<'a: 'a>(b: &'a String) -> &'a String { b }
    +fn bar<'a>(b: &'a String) -> &'a String { b }
    +
    +fn accepts_hr_fn(_: impl for<'a> Fn(&'a String) -> &'a String) {}
    +
    +fn higher_ranked_trait_bound() {
    +    let bar_fn_item = bar;
    +    accepts_hr_fn(bar_fn_item);
    +
    +    let foo_fn_item = foo::<'_>;
    +    // errors
    +    accepts_hr_fn(foo_fn_item);
    +}
    +
    +fn higher_ranked_fn_ptr() {
    +    let bar_fn_item = bar;
    +    let fn_ptr: for<'a> fn(&'a String) -> &'a String = bar_fn_item;
    +    
    +    let foo_fn_item = foo::<'_>;
    +    // errors
    +    let fn_ptr: for<'a> fn(&'a String) -> &'a String = foo_fn_item;
    +}
    +}
    +

    In both of these cases the borrow checker errors as it does not consider foo_fn_item to be callable with a borrow of any lifetime. This is due to the fact that the lifetime parameter on foo is early bound, causing foo_fn_item to have a type of FooFnItem<'_> which (as demonstrated by the desugared Fn impl) is only callable with a borrow of the same lifetime '_.

    +

    Turbofishing in the presence of late bound parameters

    +

    As mentioned previously, the distinction between early and late bound parameters means that there are two places where generic parameters are instantiated:

    +
      +
    • When naming a function (early)
    • +
    • When calling a function (late)
    • +
    +

    There is currently no syntax for explicitly specifying generic arguments for late bound parameters during the call step; generic arguments can only be specified for early bound parameters when naming a function. +The syntax foo::<'static>();, despite being part of a function call, behaves as (foo::<'static>)(); and instantiates the early bound generic parameters on the function item type.

    +

    See the following example:

    +
    #![allow(unused)]
    +fn main() {
    +fn foo<'a>(b: &'a u32) -> &'a u32 { b }
    +
    +let f /* : FooFnItem<????> */ = foo::<'static>;
    +}
    +

    The above example errors as the lifetime parameter 'a is late bound and so cannot be instantiated as part of the "naming a function" step. If we make the lifetime parameter early bound we will see this code start to compile:

    +
    #![allow(unused)]
    +fn main() {
    +fn foo<'a: 'a>(b: &'a u32) -> &'a u32 { b }
    +
    +let f /* : FooFnItem<'static> */ = foo::<'static>;
    +}
    +

    What the current implementation of the compiler aims to do is error when specifying lifetime arguments to a function that has both early and late bound lifetime parameters. In practice, due to excessive breakage, some cases are actually only future compatibility warnings (#42868):

    +
      +
    • When the amount of lifetime arguments is the same as the number of early bound lifetime parameters a FCW is emitted instead of an error
    • +
    • An error is always downgraded to a FCW when using method call syntax
    • +
    +

    To demonstrate this we can write out the different kinds of functions and give them both a late and early bound lifetime:

    +
    fn free_function<'a: 'a, 'b>(_: &'a (), _: &'b ()) {}
    +
    +struct Foo;
    +
    +trait Trait: Sized {
    +    fn trait_method<'a: 'a, 'b>(self, _: &'a (), _: &'b ());
    +    fn trait_function<'a: 'a, 'b>(_: &'a (), _: &'b ());
    +}
    +
    +impl Trait for Foo {
    +    fn trait_method<'a: 'a, 'b>(self, _: &'a (), _: &'b ()) {}
    +    fn trait_function<'a: 'a, 'b>(_: &'a (), _: &'b ()) {}
    +}
    +
    +impl Foo {
    +    fn inherent_method<'a: 'a, 'b>(self, _: &'a (), _: &'b ()) {}
    +    fn inherent_function<'a: 'a, 'b>(_: &'a (), _: &'b ()) {}
    +}
    +

    Then, for the first case, we can call each function with a single lifetime argument (corresponding to the one early bound lifetime parameter) and note that it only results in a FCW rather than a hard error.

    +
    #![allow(unused)]
    +#![deny(late_bound_lifetime_arguments)]
    +
    +fn main() {
    +fn free_function<'a: 'a, 'b>(_: &'a (), _: &'b ()) {}
    +
    +struct Foo;
    +
    +trait Trait: Sized {
    +    fn trait_method<'a: 'a, 'b>(self, _: &'a (), _: &'b ());
    +    fn trait_function<'a: 'a, 'b>(_: &'a (), _: &'b ());
    +}
    +
    +impl Trait for Foo {
    +    fn trait_method<'a: 'a, 'b>(self, _: &'a (), _: &'b ()) {}
    +    fn trait_function<'a: 'a, 'b>(_: &'a (), _: &'b ()) {}
    +}
    +
    +impl Foo {
    +    fn inherent_method<'a: 'a, 'b>(self, _: &'a (), _: &'b ()) {}
    +    fn inherent_function<'a: 'a, 'b>(_: &'a (), _: &'b ()) {}
    +}
    +
    +// Specifying as many arguments as there are early
    +// bound parameters is always a future compat warning
    +Foo.trait_method::<'static>(&(), &());
    +Foo::trait_method::<'static>(Foo, &(), &());
    +Foo::trait_function::<'static>(&(), &());
    +Foo.inherent_method::<'static>(&(), &());
    +Foo::inherent_function::<'static>(&(), &());
    +free_function::<'static>(&(), &());
    +}
    +

    For the second case we call each function with more lifetime arguments than there are lifetime parameters (be it early or late bound) and note that method calls result in a FCW as opposed to the free/associated functions which result in a hard error:

    +
    #![allow(unused)]
    +fn main() {
    +fn free_function<'a: 'a, 'b>(_: &'a (), _: &'b ()) {}
    +
    +struct Foo;
    +
    +trait Trait: Sized {
    +    fn trait_method<'a: 'a, 'b>(self, _: &'a (), _: &'b ());
    +    fn trait_function<'a: 'a, 'b>(_: &'a (), _: &'b ());
    +}
    +
    +impl Trait for Foo {
    +    fn trait_method<'a: 'a, 'b>(self, _: &'a (), _: &'b ()) {}
    +    fn trait_function<'a: 'a, 'b>(_: &'a (), _: &'b ()) {}
    +}
    +
    +impl Foo {
    +    fn inherent_method<'a: 'a, 'b>(self, _: &'a (), _: &'b ()) {}
    +    fn inherent_function<'a: 'a, 'b>(_: &'a (), _: &'b ()) {}
    +}
    +
    +// Specifying more arguments than there are early
    +// bound parameters is a future compat warning when
    +// using method call syntax.
    +Foo.trait_method::<'static, 'static, 'static>(&(), &());
    +Foo.inherent_method::<'static, 'static, 'static>(&(), &());
    +// However, it is a hard error when not using method call syntax.
    +Foo::trait_method::<'static, 'static, 'static>(Foo, &(), &());
    +Foo::trait_function::<'static, 'static, 'static>(&(), &());
    +Foo::inherent_function::<'static, 'static, 'static>(&(), &());
    +free_function::<'static, 'static, 'static>(&(), &());
    +}
    +

    Even when specifying enough lifetime arguments for both the late and early bound lifetime parameter, these arguments are not actually used to annotate the lifetime provided to late bound parameters. We can demonstrate this by turbofishing 'static to a function while providing a non-static borrow:

    +
    #![allow(unused)]
    +fn main() {
    +struct Foo;
    +
    +impl Foo {
    +    fn inherent_method<'a: 'a, 'b>(self, _: &'a (), _: &'b String ) {}
    +}
    +
    +Foo.inherent_method::<'static, 'static>(&(), &String::new());
    +}
    +

    This compiles even though the &String::new() function argument does not have a 'static lifetime, this is because "extra" lifetime arguments are discarded rather than taken into account for late bound parameters when actually calling the function.

    +

    Liveness of types with late bound parameters

    +

    When checking type outlives bounds involving function item types we take into account early bound parameters. For example:

    +
    #![allow(unused)]
    +fn main() {
    +fn foo<T>(_: T) {}
    +
    +fn requires_static<T: 'static>(_: T) {}
    +
    +fn bar<T>() {
    +    let f /* : FooFnItem<T> */ = foo::<T>;
    +    requires_static(f);
    +}
    +}
    +

    As the type parameter T is early bound, the desugaring of the function item type for foo would look something like struct FooFnItem<T>. Then in order for FooFnItem<T>: 'static to hold we must also require T: 'static to hold as otherwise we would wind up with soundness bugs.

    +

    Unfortunately, due to bugs in the compiler, we do not take into account early bound lifetimes, which is the cause of the open soundness bug #84366. This means that it's impossible to demonstrate a "difference" between early/late bound parameters for liveness/type outlives bounds as the only kind of generic parameters that are able to be late bound are lifetimes which are handled incorrectly.

    +

    Regardless, in theory the code example below should demonstrate such a difference once #84366 is fixed:

    +
    #![allow(unused)]
    +fn main() {
    +fn early_bound<'a: 'a>(_: &'a String) {}
    +fn late_bound<'a>(_: &'a String) {}
    +
    +fn requires_static<T: 'static>(_: T) {}
    +
    +fn bar<'b>() {
    +    let e = early_bound::<'b>;
    +    // this *should* error but does not
    +    requires_static(e);
    +
    +    let l = late_bound;
    +    // this correctly does not error
    +    requires_static(l);
    +}
    +}
    +

    Requirements for a parameter to be late bound

    +

    Must be a lifetime parameter

    +

    Type and Const parameters are not able to be late bound as we do not have a way to support types such as dyn for<T> Fn(Box<T>) or for<T> fn(Box<T>). Calling such types requires being able to monomorphize the underlying function which is not possible with indirection through dynamic dispatch.

    +

    Must not be used in a where clause

    +

    Currently when a generic parameter is used in a where clause it must be early bound. For example:

    +
    #![allow(unused)]
    +fn main() {
    +trait Trait<'a> {}
    +fn foo<'a, T: Trait<'a>>(_: &'a String, _: T) {}
    +}
    +

    In this example the lifetime parameter 'a is considered to be early bound as it appears in the where clause T: Trait<'a>. This is true even for "trivial" where clauses such as 'a: 'a or those implied by wellformedness of function arguments, for example:

    +
    #![allow(unused)]
    +fn main() {
    +fn foo<'a: 'a>(_: &'a String) {}
    +fn bar<'a, T: 'a>(_: &'a T) {}
    +}
    +

    In both of these functions the lifetime parameter 'a would be considered to be early bound even though the where clauses they are used in arguably do not actually impose any constraints on the caller.

    +

    The reason for this restriction is a combination of two things:

    +
      +
    • We cannot prove bounds on late bound parameters until they have been instantiated
    • +
    • Function pointers and trait objects do not have a way to represent yet to be proven where clauses from the underlying function
    • +
    +

    Take the following example:

    +
    #![allow(unused)]
    +fn main() {
    +trait Trait<'a> {}
    +fn foo<'a, T: Trait<'a>>(_: &'a T) {}
    +
    +let f = foo::<String>;
    +let f = f as for<'a> fn(&'a String);
    +f(&String::new());
    +}
    +

    At some point during type checking an error should be emitted for this code as String does not implement Trait for any lifetime.

    +

    If the lifetime 'a were late bound then this becomes difficult to check. When naming foo we do not know what lifetime should be used as part of the T: Trait<'a> trait bound as it has not yet been instantiated. When coercing the function item type to a function pointer we have no way of tracking the String: Trait<'a> trait bound that must be proven when calling the function.

    +

    If the lifetime 'a is early bound (which it is in the current implementation in rustc), then the trait bound can be checked when naming the function foo. Requiring parameters used in where clauses to be early bound gives a natural place to check where clauses defined on the function.

    +

    Finally, we do not require lifetimes to be early bound if they are used in implied bounds, for example:

    +
    #![allow(unused)]
    +fn main() {
    +fn foo<'a, T>(_: &'a T) {}
    +
    +let f = foo;
    +f(&String::new());
    +f(&String::new());
    +}
    +

    This code compiles, demonstrating that the lifetime parameter is late bound, even though 'a is used in the type &'a T which implicitly requires T: 'a to hold. Implied bounds can be treated specially as any types introducing implied bounds are in the signature of the function pointer type, which means that when calling the function we know to prove T: 'a.

    +

    Must be constrained by argument types

    +

    It is important that builtin impls on function item types do not wind up with unconstrained generic parameters as this can lead to unsoundness. This is the same kind of restriction as applies to user written impls, for example the following code results in an error:

    +
    #![allow(unused)]
    +fn main() {
    +trait Trait {
    +    type Assoc;
    +}
    +
    +impl<'a> Trait for u8 {
    +    type Assoc = &'a String;
    +}
    +}
    +

    The analogous example for builtin impls on function items would be the following:

    +
    fn foo<'a>() -> &'a String { /* ... */ }
    +

    If the lifetime parameter 'a were to be late bound we would wind up with a builtin impl with an unconstrained lifetime, we can manually write out the desugaring for the function item type and its impls with 'a being late bound to demonstrate this:

    +
    // NOTE: this is just for demonstration, in practice `'a` is early bound
    +struct FooFnItem;
    +
    +impl<'a> Fn<()> for FooFnItem {
    +    type Output = &'a String;
    +    /* fn call(...) -> ... { ... } */
    +}
    +

    In order to avoid such a situation we consider 'a to be early bound which causes the lifetime on the impl to be constrained by the self type:

    +
    struct FooFnItem<'a>(PhantomData<fn() -> &'a String>);
    +
    +impl<'a> Fn<()> for FooFnItem<'a> {
    +    type Output = &'a String;
    +    /* fn call(...) -> ... { ... } */
    +}
    +

    The ty module: representing types

    + +

    The ty module defines how the Rust compiler represents types internally. It also defines the +typing context (tcx or TyCtxt), which is the central data structure in the compiler.

    +

    ty::Ty

    +

    When we talk about how rustc represents types, we usually refer to a type called Ty . There are +quite a few modules and types for Ty in the compiler (Ty documentation).

    +

    The specific Ty we are referring to is rustc_middle::ty::Ty (and not +rustc_hir::Ty). The distinction is important, so we will discuss it first before going +into the details of ty::Ty.

    +

    rustc_hir::Ty vs ty::Ty

    +

    The HIR in rustc can be thought of as the high-level intermediate representation. It is more or less +the AST (see this chapter) as it represents the +syntax that the user wrote, and is obtained after parsing and some desugaring. It has a +representation of types, but in reality it reflects more of what the user wrote, that is, what they +wrote so as to represent that type.

    +

    In contrast, ty::Ty represents the semantics of a type, that is, the meaning of what the user +wrote. For example, rustc_hir::Ty would record the fact that a user used the name u32 twice +in their program, but the ty::Ty would record the fact that both usages refer to the same type.

    +

    Example: fn foo(x: u32) → u32 { x }

    +

    In this function, we see that u32 appears twice. We know +that that is the same type, +i.e. the function takes an argument and returns an argument of the same type, +but from the point of view of the HIR, +there would be two distinct type instances because these +are occurring in two different places in the program. +That is, they have two different Spans (locations).

    +

    Example: fn foo(x: &u32) -> &u32

    +

    In addition, HIR might have information left out. This type +&u32 is incomplete, since in the full Rust type there is actually a lifetime, but we didn’t need +to write those lifetimes. There are also some elision rules that insert information. The result may +look like fn foo<'a>(x: &'a u32) -> &'a u32.

    +

    In the HIR level, these things are not spelled out and you can say the picture is rather incomplete. +However, at the ty::Ty level, these details are added and it is complete. Moreover, we will have +exactly one ty::Ty for a given type, like u32, and that ty::Ty is used for all u32s in the +whole program, not a specific usage, unlike rustc_hir::Ty.

    +

    Here is a summary:

    +
    + + + + + +
    rustc_hir::Tyty::Ty
    Describe the syntax of a type: what the user wrote (with some desugaring).Describe the semantics of a type: the meaning of what the user wrote.
    Each rustc_hir::Ty has its own spans corresponding to the appropriate place in the program.Doesn’t correspond to a single place in the user’s program.
    rustc_hir::Ty has generics and lifetimes; however, some of those lifetimes are special markers like LifetimeKind::Implicit.ty::Ty has the full type, including generics and lifetimes, even if the user left them out
    fn foo(x: u32) → u32 { } - Two rustc_hir::Ty representing each usage of u32, each has its own Spans, and rustc_hir::Ty doesn’t tell us that both are the same typefn foo(x: u32) → u32 { } - One ty::Ty for all instances of u32 throughout the program, and ty::Ty tells us that both usages of u32 mean the same type.
    fn foo(x: &u32) -> &u32) - Two rustc_hir::Ty again. Lifetimes for the references show up in the rustc_hir::Tys using a special marker, LifetimeKind::Implicit.fn foo(x: &u32) -> &u32)- A single ty::Ty. The ty::Ty has the hidden lifetime param.
    +
    +

    Order

    +

    HIR is built directly from the AST, so it happens before any ty::Ty is produced. After +HIR is built, some basic type inference and type checking is done. During the type inference, we +figure out what the ty::Ty of everything is and we also check if the type of something is +ambiguous. The ty::Ty is then used for type checking while making sure everything has the +expected type. The hir_ty_lowering module is where the code responsible for +lowering a rustc_hir::Ty to a ty::Ty is located. The main routine used is lower_ty. +This occurs during the type-checking phase, but also in other parts of the compiler that want to ask +questions like "what argument types does this function expect?"

    +

    How semantics drive the two instances of Ty

    +

    You can think of HIR as the perspective +of the type information that assumes the least. We assume two things are distinct until they are +proven to be the same thing. In other words, we know less about them, so we should assume less about +them.

    +

    They are syntactically two strings: "u32" at line N column 20 and "u32" at line N column 35. We +don’t know that they are the same yet. So, in the HIR we treat them as if they are different. Later, +we determine that they semantically are the same type and that’s the ty::Ty we use.

    +

    Consider another example: fn foo<T>(x: T) -> u32. Suppose that someone invokes foo::<u32>(0). +This means that T and u32 (in this invocation) actually turns out to be the same type, so we +would eventually end up with the same ty::Ty in the end, but we have distinct rustc_hir::Ty. +(This is a bit over-simplified, though, since during type checking, we would check the function +generically and would still have a T distinct from u32. Later, when doing code generation, +we would always be handling "monomorphized" (fully substituted) versions of each function, +and hence we would know what T represents (and specifically that it is u32).)

    +

    Here is one more example:

    +
    #![allow(unused)]
    +fn main() {
    +mod a {
    +    type X = u32;
    +    pub fn foo(x: X) -> u32 { 22 }
    +}
    +mod b {
    +    type X = i32;
    +    pub fn foo(x: X) -> i32 { x }
    +}
    +}
    +

    Here the type X will vary depending on context, clearly. If you look at the rustc_hir::Ty, +you will get back that X is an alias in both cases (though it will be mapped via name resolution +to distinct aliases). But if you look at the ty::Ty signature, it will be either fn(u32) -> u32 +or fn(i32) -> i32 (with type aliases fully expanded).

    +

    ty::Ty implementation

    +

    rustc_middle::ty::Ty is actually a wrapper around +Interned<WithCachedTypeInfo<TyKind>>. +You can ignore Interned in general; you will basically never access it explicitly. +We always hide them within Ty and skip over it via Deref impls or methods. +TyKind is a big enum +with variants to represent many different Rust types +(e.g. primitives, references, algebraic data types, generics, lifetimes, etc). +WithCachedTypeInfo has a few cached values like flags and outer_exclusive_binder. They +are convenient hacks for efficiency and summarize information about the type that we may want to +know, but they don’t come into the picture as much here. Finally, Interned allows +the ty::Ty to be a thin pointer-like +type. This allows us to do cheap comparisons for equality, along with the other +benefits of interning.

    +

    Allocating and working with types

    +

    To allocate a new type, you can use the various new_* methods defined on +Ty. +These have names +that correspond mostly to the various kinds of types. For example:

    +
    let array_ty = Ty::new_array_with_const_len(tcx, ty, count);
    +

    These methods all return a Ty<'tcx> – note that the lifetime you get back is the lifetime of the +arena that this tcx has access to. Types are always canonicalized and interned (so we never +allocate exactly the same type twice).

    +

    You can also find various common types in the tcx itself by accessing its fields: +tcx.types.bool, tcx.types.char, etc. (See CommonTypes for more.)

    + +

    Comparing types

    +

    Because types are interned, it is possible to compare them for equality efficiently using == +– however, this is almost never what you want to do unless you happen to be hashing and looking +for duplicates. This is because often in Rust there are multiple ways to represent the same type, +particularly once inference is involved.

    +

    For example, the type {integer} (ty::Infer(ty::IntVar(..)) an integer inference variable, +the type of an integer literal like 0) and u8 (ty::UInt(..)) should often be treated as +equal when testing whether they can be assigned to each other (which is a common operation in +diagnostics code). == on them will return false though, since they are different types.

    +

    The simplest way to compare two types correctly requires an inference context (infcx). +If you have one, you can use infcx.can_eq(param_env, ty1, ty2) +to check whether the types can be made equal. +This is typically what you want to check during diagnostics, which is concerned with questions such +as whether two types can be assigned to each other, not whether they're represented identically in +the compiler's type-checking layer.

    +

    When working with an inference context, you have to be careful to ensure that potential inference +variables inside the types actually belong to that inference context. If you are in a function +that has access to an inference context already, this should be the case. Specifically, this is the +case during HIR type checking or MIR borrow checking.

    +

    Another consideration is normalization. Two types may actually be the same, but one is behind an +associated type. To compare them correctly, you have to normalize the types first. This is +primarily a concern during HIR type checking and with all types from a TyCtxt query +(for example from tcx.type_of()).

    +

    When a FnCtxt or an ObligationCtxt is available during type checking, .normalize(ty) +should be used on them to normalize the type. After type checking, diagnostics code can use +tcx.normalize_erasing_regions(ty).

    +

    There are also cases where using == on Ty is fine. This is for example the case in late lints +or after monomorphization, since type checking has been completed, meaning all inference variables +are resolved and all regions have been erased. In these cases, if you know that inference variables +or normalization won't be a concern, #[allow] or #[expect]ing the lint is recommended.

    +

    When diagnostics code does not have access to an inference context, it should be threaded through +the function calls if one is available in some place (like during type checking).

    +

    If no inference context is available at all, then one can be created as described in +type-inference. But this is only useful when the involved types (for example, if +they came from a query like tcx.type_of()) are actually substituted with fresh +inference variables using fresh_args_for_item. This can be used to answer questions +like "can Vec<T> for any T be unified with Vec<u32>?".

    +

    ty::TyKind Variants

    +

    Note: TyKind is NOT the functional programming concept of Kind.

    +

    Whenever working with a Ty in the compiler, it is common to match on the kind of type:

    +
    fn foo(x: Ty<'tcx>) {
    +  match x.kind {
    +    ...
    +  }
    +}
    +

    The kind field is of type TyKind<'tcx>, which is an enum defining all of the different kinds of +types in the compiler.

    +
    +

    N.B. inspecting the kind field on types during type inference can be risky, as there may be +inference variables and other things to consider, or sometimes types are not yet known and will +become known later.

    +
    +

    There are a lot of related types, and we’ll cover them in time (e.g regions/lifetimes, +“substitutions”, etc).

    +

    There are many variants on the TyKind enum, which you can see by looking at its +documentation. Here is a sampling:

    +
      +
    • Algebraic Data Types (ADTs) An algebraic data type is a struct, +enum or union. Under the hood, struct, enum and union are actually implemented +the same way: they are all ty::TyKind::Adt. It’s basically a user defined type. +We will talk more about these later.
    • +
    • Foreign Corresponds to extern type T.
    • +
    • Str Is the type str. When the user writes &str, Str is the how we represent the +str part of that type.
    • +
    • Slice Corresponds to [T].
    • +
    • Array Corresponds to [T; n].
    • +
    • RawPtr Corresponds to *mut T or *const T.
    • +
    • Ref Ref stands for safe references, &'a mut T or &'a T. Ref has some +associated parts, like Ty<'tcx> which is the type that the reference references. +Region<'tcx> is the lifetime or region of the reference and Mutability if the reference +is mutable or not.
    • +
    • Param Represents a type parameter (e.g. the T in Vec<T>).
    • +
    • Error Represents a type error somewhere so that we can print better diagnostics. We +will discuss this more later.
    • +
    • And many more...
    • +
    +

    Import conventions

    +

    Although there is no hard and fast rule, the ty module tends to be used like so:

    +
    use ty::{self, Ty, TyCtxt};
    +

    In particular, since they are so common, the Ty and TyCtxt types are imported directly. Other +types are often referenced with an explicit ty:: prefix (e.g. ty::TraitRef<'tcx>). But some +modules choose to import a larger or smaller set of names explicitly.

    +

    Type errors

    +

    There is a TyKind::Error that is produced when the user makes a type error. The idea is that +we would propagate this type and suppress other errors that come up due to it so as not to overwhelm +the user with cascading compiler error messages.

    +

    There is an important invariant for TyKind::Error. The compiler should +never produce Error unless we know that an error has already been +reported to the user. This is usually +because (a) you just reported it right there or (b) you are propagating an existing Error type (in +which case the error should've been reported when that error type was produced).

    +

    It's important to maintain this invariant because the whole point of the Error type is to suppress +other errors -- i.e., we don't report them. If we were to produce an Error type without actually +emitting an error to the user, then this could cause later errors to be suppressed, and the +compilation might inadvertently succeed!

    +

    Sometimes there is a third case. You believe that an error has been reported, but you believe it +would've been reported earlier in the compilation, not locally. In that case, you can create a +"delayed bug" with delayed_bug or span_delayed_bug. This will make a note that you expect +compilation to yield an error -- if however compilation should succeed, then it will trigger a +compiler bug report.

    +

    For added safety, it's not actually possible to produce a TyKind::Error value +outside of rustc_middle::ty; there is a private member of +TyKind::Error that prevents it from being constructable elsewhere. Instead, +one should use the Ty::new_error or +Ty::new_error_with_message methods. These methods either take an ErrorGuaranteed +or call span_delayed_bug before returning an interned Ty of kind Error. If you +were already planning to use span_delayed_bug, then you can just pass the +span and message to ty_error_with_message instead to avoid +a redundant delayed bug.

    +

    TyKind variant shorthand syntax

    +

    When looking at the debug output of Ty or simply talking about different types in the compiler, you may encounter syntax that is not valid rust but is used to concisely represent internal information about types. Below is a quick reference cheat sheet to tell what the various syntax actually means, these should be covered in more depth in later chapters.

    +
      +
    • Generic parameters: {name}/#{index} e.g. T/#0, where index corresponds to its position in the list of generic parameters
    • +
    • Inference variables: ?{id} e.g. ?x/?0, where id identifies the inference variable
    • +
    • Variables from binders: ^{binder}_{index} e.g. ^0_x/^0_2, where binder and index identify which variable from which binder is being referred to
    • +
    • Placeholders: !{id} or !{id}_{universe} e.g. !x/!0/!x_2/!0_2, representing some unique type in the specified universe. The universe is often elided when it is 0
    • +
    +

    ADTs and Generic Arguments

    +

    The term ADT stands for "Algebraic data type", in rust this refers to a struct, enum, or union.

    +

    ADTs Representation

    +

    Let's consider the example of a type like MyStruct<u32>, where MyStruct is defined like so:

    +
    struct MyStruct<T> { x: u8, y: T }
    +

    The type MyStruct<u32> would be an instance of TyKind::Adt:

    +
    Adt(&'tcx AdtDef, GenericArgs<'tcx>)
    +//  ------------  ---------------
    +//  (1)            (2)
    +//
    +// (1) represents the `MyStruct` part
    +// (2) represents the `<u32>`, or "substitutions" / generic arguments
    +

    There are two parts:

    +
      +
    • The AdtDef references the struct/enum/union but without the values for its type +parameters. In our example, this is the MyStruct part without the argument u32. +(Note that in the HIR, structs, enums and unions are represented differently, but in ty::Ty, +they are all represented using TyKind::Adt.)
    • +
    • The GenericArgs is a list of values that are to be substituted +for the generic parameters. In our example of MyStruct<u32>, we would end up with a list like +[u32]. We’ll dig more into generics and substitutions in a little bit.
    • +
    +

    AdtDef and DefId

    +

    For every type defined in the source code, there is a unique DefId (see this +chapter). This includes ADTs and generics. In the MyStruct<T> +definition we gave above, there are two DefIds: one for MyStruct and one for T. Notice that +the code above does not generate a new DefId for u32 because it is not defined in that code (it +is only referenced).

    +

    AdtDef is more or less a wrapper around DefId with lots of useful helper methods. There is +essentially a one-to-one relationship between AdtDef and DefId. You can get the AdtDef for a +DefId with the tcx.adt_def(def_id) query. AdtDefs are all interned, as shown +by the 'tcx lifetime.

    +

    Question: Why not substitute “inside” the AdtDef?

    +

    Recall that we represent a generic struct with (AdtDef, args). So why bother with this scheme?

    +

    Well, the alternate way we could have chosen to represent types would be to always create a new, +fully-substituted form of the AdtDef where all the types are already substituted. This seems like +less of a hassle. However, the (AdtDef, args) scheme has some advantages over this.

    +

    First, (AdtDef, args) scheme has an efficiency win:

    +
    struct MyStruct<T> {
    +  ... 100s of fields ...
    +}
    +
    +// Want to do: MyStruct<A> ==> MyStruct<B>
    +

    in an example like this, we can instantiate MyStruct<A> as MyStruct<B> (and so on) very cheaply, +by just replacing the one reference to A with B. But if we eagerly instantiated all the fields, +that could be a lot more work because we might have to go through all of the fields in the AdtDef +and update all of their types.

    +

    A bit more deeply, this corresponds to structs in Rust being nominal types — which +means that they are defined by their name (and that their contents are then indexed from the +definition of that name, and not carried along “within” the type itself).

    +

    The GenericArgs type

    +

    Given a generic type MyType<A, B, …>, we have to store the list of generic arguments for MyType.

    +

    In rustc this is done using GenericArgs. GenericArgs is a thin pointer to a slice of GenericArg representing a list of generic arguments for a generic item. For example, given a struct HashMap<K, V> with two type parameters, K and V, the GenericArgs used to represent the type HashMap<i32, u32> would be represented by &'tcx [tcx.types.i32, tcx.types.u32].

    +

    GenericArg is conceptually an enum with three variants, one for type arguments, one for const arguments and one for lifetime arguments. +In practice that is actually represented by GenericArgKind and GenericArg is a more space efficient version that has a method to +turn it into a GenericArgKind.

    +

    The actual GenericArg struct stores the type, lifetime or const as an interned pointer with the discriminant stored in the lower 2 bits. +Unless you are working with the GenericArgs implementation specifically, you should generally not have to deal with GenericArg and instead +make use of the safe GenericArgKind abstraction obtainable via the GenericArg::unpack() method.

    +

    In some cases you may have to construct a GenericArg, this can be done via Ty/Const/Region::into() or GenericArgKind::pack.

    +
    // An example of unpacking and packing a generic argument.
    +fn deal_with_generic_arg<'tcx>(generic_arg: GenericArg<'tcx>) -> GenericArg<'tcx> {
    +    // Unpack a raw `GenericArg` to deal with it safely.
    +    let new_generic_arg: GenericArgKind<'tcx> = match generic_arg.unpack() {
    +        GenericArgKind::Type(ty) => { /* ... */ }
    +        GenericArgKind::Lifetime(lt) => { /* ... */ }
    +        GenericArgKind::Const(ct) => { /* ... */ }
    +    };
    +    // Pack the `GenericArgKind` to store it in a generic args list.
    +    new_generic_arg.pack()
    +}
    +

    So pulling it all together:

    +
    struct MyStruct<T>(T);
    +type Foo = MyStruct<u32>
    +

    For the MyStruct<U> written in the Foo type alias, we would represent it in the following way:

    +
      +
    • There would be an AdtDef (and corresponding DefId) for MyStruct.
    • +
    • There would be a GenericArgs containing the list [GenericArgKind::Type(Ty(u32))]
    • +
    • And finally a TyKind::Adt with the AdtDef and GenericArgs listed above.
    • +
    +

    Parameter Ty/Const/Regions

    +

    When inside of generic items, types can be written that use in scope generic parameters, for example fn foo<'a, T>(_: &'a Vec<T>). In this specific case +the &'a Vec<T> type would be represented internally as:

    +
    TyKind::Ref(
    +  RegionKind::LateParam(DefId(foo), DefId(foo::'a), "'a"),
    +  TyKind::Adt(Vec, &[TyKind::Param("T", 0)])
    +)
    +
    +

    There are three separate ways we represent usages of generic parameters:

    + +

    This chapter only covers TyKind::Param ConstKind::Param and RegionKind::EarlyParam.

    +

    Ty/Const Parameters

    +

    As TyKind::Param and ConstKind::Param are implemented identically this section only refers to TyKind::Param for simplicity. +However you should keep in mind that everything here also is true of ConstKind::Param

    +

    Each TyKind::Param contains two things: the name of the parameter and an index.

    +

    See the following concrete example of a usage of TyKind::Param:

    +
    struct Foo<T>(Vec<T>);
    +

    The Vec<T> type is represented as TyKind::Adt(Vec, &[GenericArgKind::Type(Param("T", 0))]).

    +

    The name is somewhat self explanatory, it's the name of the type parameter. The index of the type parameter is an integer indicating +its order in the list of generic parameters in scope (note: this includes parameters defined on items on outer scopes than the item the parameter is defined on). Consider the following examples:

    +
    struct Foo<A, B> {
    +  // A would have index 0
    +  // B would have index 1
    +
    +  .. // some fields
    +}
    +impl<X, Y> Foo<X, Y> {
    +  fn method<Z>() {
    +    // inside here, X, Y and Z are all in scope
    +    // X has index 0
    +    // Y has index 1
    +    // Z has index 2
    +  }
    +}
    +

    Concretely given the ty::Generics for the item the parameter is defined on, if the index is 2 then starting from the root parent, it will be the third parameter to be introduced. For example in the above example, Z has index 2 and is the third generic parameter to be introduced, starting from the impl block.

    +

    The index fully defines the Ty and is the only part of TyKind::Param that matters for reasoning about the code we are compiling.

    +

    Generally we do not care what the name is and only use the index. The name is included for diagnostics and debug logs as otherwise it would be +incredibly difficult to understand the output, i.e. Vec<Param(0)>: Sized vs Vec<T>: Sized. In debug output, parameter types are +often printed out as {name}/#{index}, for example in the function foo if we were to debug print Vec<T> it would be written as Vec<T/#0>.

    +

    An alternative representation would be to only have the name, however using an index is more efficient as it means we can index into GenericArgs when instantiating generic parameters with some arguments. We would otherwise have to store GenericArgs as a HashMap<Symbol, GenericArg> and do a hashmap lookup everytime we used a generic item.

    +

    In theory an index would also allow for having multiple distinct parameters that use the same name, e.g. +impl<A> Foo<A> { fn bar<A>() { .. } }. +The rules against shadowing make this difficult but those language rules could change in the future.

    +

    Lifetime parameters

    +

    In contrast to Ty/Const's Param singular Param variant, lifetimes have two variants for representing region parameters: RegionKind::EarlyParam and RegionKind::LateParam. The reason for this is due to function's distinguishing between early and late bound parameters which is discussed in an earlier chapter (see link).

    +

    RegionKind::EarlyParam is structured identically to Ty/Const's Param variant, it is simply a u32 index and a Symbol. For lifetime parameters defined on non-function items we always use ReEarlyParam. For functions we use ReEarlyParam for any early bound parameters and ReLateParam for any late bound parameters. Note that just like Ty and Const params we often debug format them as 'SYMBOL/#INDEX, see for example:

    +
    // This function would have its signature represented as:
    +//
    +// ```
    +// fn(
    +//     T/#2,
    +//     Ref('a/#0, Ref(ReLateParam(...), u32))
    +// ) -> Ref(ReLateParam(...), u32)
    +// ```
    +fn foo<'a, 'b, T: 'a>(one: T, two: &'a &'b u32) -> &'b u32 {
    +    ...
    +}
    +

    RegionKind::LateParam is discussed more in the chapter on instantiating binders.

    +
    +

    TypeFoldable and TypeFolder

    +

    In a previous chapter, we discussed instantiating binders. +This involves looking at everything inside of a Early(Binder) +to find any usages of the bound vars in order to replace them. +Binders can wrap an arbitrary Rust type T, not just a Ty. +So, how do we implement the instantiate methods on the Early/Binder types?

    +

    The answer is a couple of traits: +TypeFoldable +and +TypeFolder.

    +
      +
    • TypeFoldable is implemented by types that embed type information. It allows you to recursively +process the contents of the TypeFoldable and do stuff to them.
    • +
    • TypeFolder defines what you want to do with the types you encounter while processing the +TypeFoldable.
    • +
    +

    For example, the TypeFolder trait has a method fold_ty +that takes a type as input and returns a new type as a result. +TypeFoldable invokes the TypeFolder fold_foo methods on itself, +giving the TypeFolder access to its contents (the types, regions, etc that are contained within).

    +

    You can think of it with this analogy to the iterator combinators we have come to love in Rust:

    +
    vec.iter().map(|e1| foo(e2)).collect()
    +//             ^^^^^^^^^^^^ analogous to `TypeFolder`
    +//         ^^^ analogous to `TypeFoldable`
    +

    So to reiterate:

    +
      +
    • TypeFolder is a trait that defines a “map” operation.
    • +
    • TypeFoldable is a trait that is implemented by things that embed types.
    • +
    +

    In the case of subst, we can see that it is implemented as a TypeFolder: ArgFolder. +Looking at its implementation, we see where the actual substitutions are happening.

    +

    However, you might also notice that the implementation calls this super_fold_with method. What is +that? It is a method of TypeFoldable. Consider the following TypeFoldable type MyFoldable:

    +
    struct MyFoldable<'tcx> {
    +  def_id: DefId,
    +  ty: Ty<'tcx>,
    +}
    +

    The TypeFolder can call super_fold_with on MyFoldable if it just wants to replace some of the +fields of MyFoldable with new values. If it instead wants to replace the whole MyFoldable with a +different one, it would call fold_with instead (a different method on TypeFoldable).

    +

    In almost all cases, we don’t want to replace the whole struct; we only want to replace ty::Tys in +the struct, so usually we call super_fold_with. A typical implementation that MyFoldable could +have might do something like this:

    +
    my_foldable: MyFoldable<'tcx>
    +my_foldable.subst(..., subst)
    +
    +impl TypeFoldable for MyFoldable {
    +  fn super_fold_with(&self, folder: &mut impl TypeFolder<'tcx>) -> MyFoldable {
    +    MyFoldable {
    +      def_id: self.def_id.fold_with(folder),
    +      ty: self.ty.fold_with(folder),
    +    }
    +  }
    +
    +  fn super_visit_with(..) { }
    +}
    +

    Notice that here, we implement super_fold_with to go over the fields of MyFoldable and call +fold_with on them. That is, a folder may replace def_id and ty, but not the whole +MyFoldable struct.

    +

    Here is another example to put things together: suppose we have a type like Vec<Vec<X>>. The +ty::Ty would look like: Adt(Vec, &[Adt(Vec, &[Param(X)])]). If we want to do subst(X => u32), +then we would first look at the overall type. We would see that there are no substitutions to be +made at the outer level, so we would descend one level and look at Adt(Vec, &[Param(X)]). There +are still no substitutions to be made here, so we would descend again. Now we are looking at +Param(X), which can be substituted, so we replace it with u32. We can’t descend any more, so we +are done, and the overall result is Adt(Vec, &[Adt(Vec, &[u32])]).

    +

    One last thing to mention: often when folding over a TypeFoldable, we don’t want to change most +things. We only want to do something when we reach a type. That means there may be a lot of +TypeFoldable types whose implementations basically just forward to their fields’ TypeFoldable +implementations. Such implementations of TypeFoldable tend to be pretty tedious to write by hand. +For this reason, there is a derive macro that allows you to #![derive(TypeFoldable)]. It is +defined here.

    +

    subst In the case of substitutions the actual folder +is going to be doing the indexing we’ve already mentioned. +There we define a Folder and call fold_with on the TypeFoldable to process yourself. +Then fold_ty the method that process each type it looks for a ty::Param and for those +it replaces it for something from the list of substitutions, otherwise recursively process the type. +To replace it, calls ty_for_param +and all that does is index into the list of substitutions with the index of the Param.

    +

    Aliases and Normalization

    + +

    Aliases

    +

    In Rust there are a number of types that are considered equal to some "underlying" type, for example inherent associated types, trait associated types, free type aliases (type Foo = u32), and opaque types (-> impl RPIT). We consider such types to be "aliases", alias types are represented by the TyKind::Alias variant, with the kind of alias tracked by the AliasTyKind enum.

    +

    Normalization is the process of taking these alias types and replacing them with the underlying type that they are equal to. For example given some type alias type Foo = u32, normalizing Foo would give u32.

    +

    The concept of an alias is not unique to types and the concept also applies to constants/const generics. However, right now in the compiler we don't really treat const aliases as a "first class concept" so this chapter mostly discusses things in the context of types (even though the concepts transfer just fine).

    +

    Rigid, Ambiguous and Unnormalized Aliases

    +

    Aliases can either be "rigid", "ambiguous", or simply unnormalized.

    +

    We consider types to be rigid if their "shape" isn't going to change, for example Box is rigid as no amount of normalization can turn a Box into a u32, whereas <vec::IntoIter<u32> as Iterator>::Item is not rigid as it can be normalized to u32.

    +

    Aliases are rigid when we will never be able to normalize them further. A concrete example of a rigid alias would be <T as Iterator>::Item in an environment where there is no T: Iterator<Item = ...> bound, only a T: Iterator bound:

    +
    #![allow(unused)]
    +fn main() {
    +fn foo<T: Iterator>() {
    +    // This alias is *rigid*
    +    let _: <T as Iterator>::Item;
    +}
    +
    +fn bar<T: Iterator<Item = u32>>() {
    +    // This alias is *not* rigid as it can be normalized to `u32`
    +    let _: <T as Iterator>::Item;
    +}
    +}
    +

    When an alias can't yet be normalized but may wind up normalizable in the current environment, we consider it to be an "ambiguous" alias. This can occur when an alias contains inference variables which prevent being able to determine how the trait is implemented:

    +
    #![allow(unused)]
    +fn main() {
    +fn foo<T: Iterator, U: Iterator>() {
    +    // This alias is considered to be "ambiguous"
    +    let _: <_ as Iterator>::Item;
    +}
    +}
    +

    The reason we call them "ambiguous" aliases is because its ambiguous whether this is a rigid alias or not.

    +

    The source of the _: Iterator trait impl is ambiguous (i.e. unknown), it could be some impl Iterator for u32 or it could be some T: Iterator trait bound, we don't know yet. Depending on why _: Iterator holds the alias could be an unnormalized alias or it could be a rigid alias; it's ambiguous what kind of alias this is.

    +

    Finally, an alias can just be unnormalized, <Vec<u32> as IntoIterator>::Iter is an unnormalized alias as it can already be normalized to std::vec::IntoIter<u32>, it just hasn't been done yet.

    +
    +

    It is worth noting that Free and Inherent aliases cannot be rigid or ambiguous as naming them also implies having resolved the definition of the alias, which specifies the underlying type of the alias.

    +

    Diverging Aliases

    +

    An alias is considered to "diverge" if its definition does not specify an underlying non-alias type to normalize to. A concrete example of diverging aliases:

    +
    #![allow(unused)]
    +fn main() {
    +type Diverges = Diverges;
    +
    +trait Trait {
    +    type DivergingAssoc;
    +}
    +impl Trait for () {
    +    type DivergingAssoc = <() as Trait>::DivergingAssoc;
    +}
    +}
    +

    In this example both Diverges and DivergingAssoc are "trivial" cases of diverging type aliases where they have been defined as being equal to themselves. There is no underlying type that Diverges can ever be normalized to.

    +

    We generally try to error when diverging aliases are defined, but this is entirely a "best effort" check. In the previous example the definitions are "simple enough" to be detected and so errors are emitted. However, in more complex cases, or cases where only some instantiations of generic parameters would result in a diverging alias, we don't emit an error:

    +
    #![allow(unused)]
    +fn main() {
    +trait Trait {
    +    type DivergingAssoc<U: Trait>;
    +}
    +impl<T: ?Sized> Trait for T {
    +    // This alias always diverges but we don't emit an error because
    +    // the compiler can't "see" that.
    +    type DivergingAssoc<U: Trait> = <U as Trait>::DivergingAssoc<U>;
    +}
    +}
    +

    Ultimately this means that we have no guarantee that aliases in the type system are non-diverging. As aliases may only diverge for some specific generic arguments, it also means that we only know whether an alias diverges once it is fully concrete. This means that codegen/const-evaluation also has to handle diverging aliases:

    +
    trait Trait {
    +    type Diverges<U: Trait>;
    +}
    +impl<T: ?Sized> Trait for T {
    +    type Diverges<U: Trait> = <U as Trait>::Diverges<U>;
    +}
    +
    +fn foo<T: Trait>() {
    +    let a: T::Diverges<T>;
    +}
    +
    +fn main() {
    +    foo::<()>();
    +}
    +

    In this example we only encounter an error from the diverging alias during codegen of foo::<()>, if the call to foo is removed then no compilation error will be emitted.

    +

    Opaque Types

    +

    Opaque types are a relatively special kind of alias, and are covered in their own chapter: Opaque types.

    +

    Const Aliases

    +

    Unlike type aliases, const aliases are not represented directly in the type system, instead const aliases are always an anonymous body containing a path expression to a const item. This means that the only "const alias" in the type system is an anonymous unevaluated const body.

    +

    As such there is no ConstKind::Alias(AliasCtKind::Projection/Inherent/Free, _), instead we only have ConstKind::Unevaluated which is used for representing anonymous constants.

    +
    #![allow(unused)]
    +fn main() {
    +fn foo<const N: usize>() {}
    +
    +const FREE_CONST: usize = 1 + 1;
    +
    +fn bar() {
    +    foo::<{ FREE_CONST }>();
    +    // The const arg is represented with some anonymous constant:
    +    // ```pseudo-rust
    +    // const ANON: usize = FREE_CONST; 
    +    // foo::<ConstKind::Unevaluated(DefId(ANON), [])>();
    +    // ```
    +}
    +}
    +

    This is likely to change as const generics functionality is improved, for example feature(associated_const_equality) and feature(min_generic_const_args) both require handling const aliases similarly to types (without an anonymous constant wrapping all const args).

    +

    What is Normalization

    +

    Structural vs Deep normalization

    +

    There are two forms of normalization, structural (sometimes called shallow) and deep. Structural normalization should be thought of as only normalizing the "outermost" part of a type. On the other hand deep normalization will normalize all aliases in a type.

    +

    In practice structural normalization can result in more than just the outer layer of the type being normalized, but this behaviour should not be relied upon. Unnormalizable non-rigid aliases making use of bound variables (for<'a>) cannot be normalized by either kind of normalization.

    +

    As an example: conceptually, structurally normalizing the type Vec<<u8 as Identity>::Assoc> would be a no-op, whereas deeply normalizing would give Vec<u8>. In practice even structural normalization would give Vec<u8>, though, again, this should not be relied upon.

    +

    Changing the alias to use bound variables will result in different behaviour; Vec<for<'a> fn(<&'a u8 as Identity>::Assoc)> would result in no change when structurally normalized, but would result in Vec<for<'a> fn(&'a u8)> when deeply normalized.

    +

    Core normalization logic

    +

    Structurally normalizing aliases is a little bit more nuanced than replacing the alias with whatever it is defined as being equal to in its definition; the result of normalizing an alias should either be a rigid type or an inference variable (which will later be inferred to a rigid type). To accomplish this we do two things:

    +

    First, when normalizing an ambiguous alias it is normalized to an inference variable instead of leaving it as-is, this has two main effects:

    +
      +
    • Even though an inference variable is not a rigid type, it will always wind up inferred to a rigid type so we ensure that the result of normalization will not need to be normalized again
    • +
    • Inference variables are used in all cases where a type is non-rigid, allowing the rest of the compiler to not have to deal with both ambiguous aliases and inference variables
    • +
    +

    Secondly, instead of having normalization directly return the type specified in the definition of the alias, we normalize the type first before returning it1. We do this so that normalization is idempotent/callers do not need to run it in a loop.

    +
    #![allow(unused)]
    +#![feature(lazy_type_alias)]
    +
    +fn main() {
    +type Foo<T: Iterator> = Bar<T>;
    +type Bar<T: Iterator> = <T as Iterator>::Item;
    +
    +fn foo() {
    +    let a_: Foo<_>;
    +}
    +}
    +

    In this example:

    +
      +
    • Normalizing Foo<?x> would result in Bar<?x>, except we want to normalize aliases in the type Foo is defined as equal to
    • +
    • Normalizing Bar<?x> would result in <?x as Iterator>::Item, except, again, we want to normalize aliases in the type Bar is defined as equal to
    • +
    • Normalizing <?x as Iterator>::Item results in some new inference variable ?y, as <?x as Iterator>::Item is an ambiguous alias
    • +
    • The final result is that normalizing Foo<?x> results in ?y
    • +
    +

    How to normalize

    +

    When interfacing with the type system it will often be the case that it's necessary to request a type be normalized. There are a number of different entry points to the underlying normalization logic and each entry point should only be used in specific parts of the compiler.

    + +

    An additional complication is that the compiler is currently undergoing a transition from the old trait solver to the new trait solver. +As part of this transition our approach to normalization in the compiler has changed somewhat significantly, resulting in some normalization entry points being "old solver only" slated for removal in the long-term once the new solver has stabilized. +The transition can be tracked via the WG-trait-system-refactor label in Github.

    +

    Here is a rough overview of the different entry points to normalization in the compiler:

    +
      +
    • infcx.at.structurally_normalize
    • +
    • infcx.at.(deeply_)?normalize
    • +
    • infcx.query_normalize
    • +
    • tcx.normalize_erasing_regions
    • +
    • traits::normalize_with_depth(_to)
    • +
    • EvalCtxt::structurally_normalize
    • +
    +

    Outside of the trait solver

    +

    The InferCtxt type exposes the "main" ways to normalize during analysis: normalize, deeply_normalize and structurally_normalize. These functions are often wrapped and re-exposed on various InferCtxt wrapper types, such as FnCtxt or ObligationCtxt with minor API tweaks to handle some arguments or parts of the return type automatically.

    +

    Structural InferCtxt normalization

    +

    infcx.at.structurally_normalize exposes structural normalization that is able to handle inference variables and regions. It should generally be used whenever inspecting the kind of a type.

    +

    Inside of HIR Typeck there is a related method of normalization- fcx.structurally_resolve, which will error if the type being resolved is an unresolved inference variable. When the new solver is enabled it will also attempt to structurally normalize the type.

    +

    Due to this there is a pattern in HIR typeck where a type is first normalized via normalize (only normalizing in the old solver), and then structurally_resolve'd (only normalizing in the new solver). This pattern should be preferred over calling structurally_normalize during HIR typeck as structurally_resolve will attempt to make inference progress by evaluating goals whereas structurally_normalize does not.

    +

    Deep InferCtxt normalization

    +
    infcx.at.(deeply_)?normalize
    +

    There are two ways to deeply normalize with an InferCtxt, normalize and deeply_normalize. The reason for this is that normalize is a "legacy" normalization entry point used only by the old solver, whereas deeply_normalize is intended to be the long term way to deeply normalize. Both of these methods can handle regions.

    +

    When the new solver is stabilized the infcx.at.normalize function will be removed and everything will have been migrated to the new deep or structural normalization methods. For this reason the normalize function is a no-op under the new solver, making it suitable only when the old solver needs normalization but the new solver does not.

    +

    Using deeply_normalize will result in errors being emitted when encountering ambiguous aliases2 as it is not possible to support normalizing all ambiguous aliases to inference variables3. deeply_normalize should generally only be used in cases where we do not expect to encounter ambiguous aliases, for example when working with types from item signatures.

    +
    infcx.query_normalize
    +

    infcx.query_normalize is very rarely used, it has almost all the same restrictions as normalize_erasing_regions (cannot handle inference variables, no diagnostics support) with the main difference being that it retains lifetime information. For this reason normalize_erasing_regions is the better choice in almost all circumstances as it is more efficient due to caching lifetime-erased queries.

    +

    In practice query_normalize is used for normalization in the borrow checker, and elsewhere as a performance optimization over infcx.normalize. Once the new solver is stabilized it is expected that query_normalize can be removed from the compiler as the new solvers normalization implementation should be performant enough for it to not be a performance regression.

    +
    tcx.normalize_erasing_regions
    +

    normalize_erasing_regions is generally used by parts of the compiler that are not doing type system analysis. This normalization entry point does not handle inference variables, lifetimes, or any diagnostics. Lints and codegen make heavy use of this entry point as they typically are working with fully inferred aliases that can be assumed to be well formed (or at least, are not responsible for erroring on).

    +

    Inside of the trait solver

    +

    traits::normalize_with_depth(_to) and EvalCtxt::structurally_normalize are only used by the internals of the trait solvers (old and new respectively). It is effectively a raw entry point to the internals of how normalization is implemented by each trait solver. Other normalization entry points cannot be used from within the internals of trait solving as it wouldn't handle goal cycles and recursion depth correctly.

    +

    When/Where to normalize (Old vs New solver)

    +

    One of the big changes between the old and new solver is our approach to when we expect aliases to be normalized.

    +

    Old solver

    +

    All types are expected to be normalized as soon as possible, so that all types encountered in the type system are either rigid or an inference variable (which will later be inferred to a rigid term).

    +

    As a concrete example: equality of aliases is implemented by assuming they're rigid and recursively equating the generic arguments of the alias.

    +

    New solver

    +

    It's expected that all types potentially contain ambiguous or unnormalized aliases. Whenever an operation is performed that requires aliases to be normalized, it's the responsibility of that logic to normalize the alias (this means that matching on ty.kind() pretty much always has to structurally normalize first).

    +

    As a concrete example: equality of aliases is implemented by a custom goal kind (PredicateKind::AliasRelate) so that it can handle normalization of the aliases itself instead of assuming all alias types being equated are rigid.

    +

    Despite this approach we still deeply normalize during writeback for performance/simplicity, so that types in the MIR can still be assumed to have been deeply normalized.

    +
    +

    There were a few main issues with the old solver's approach to normalization that motivated changing things in the new solver:

    +

    Missing normalization calls

    +

    It was a frequent occurrence that normalization calls would be missing, resulting in passing unnormalized types to APIs expecting everything to already be normalized. Treating ambiguous or unnormalized aliases as rigid would result in all sorts of weird errors from aliases not being considered equal to one another, or surprising inference guidance from equating unnormalized aliases' generic arguments.

    +

    Normalizing parameter environments

    +

    Another problem was that it was not possible to normalize ParamEnvs correctly in the old solver as normalization itself would expect a normalized ParamEnv in order to give correct results. See the chapter on ParamEnvs for more information: Typing/ParamEnvs: Normalizing all bounds

    +

    Unnormalizable non-rigid aliases in higher ranked types

    +

    Given a type such as for<'a> fn(<?x as Trait<'a>::Assoc>), it is not possible to correctly handle this with the old solver's approach to normalization.

    +

    If we were to normalize it to for<'a> fn(?y) and register a goal to normalize for<'a> <?x as Trait<'a>>::Assoc -> ?y, this would result in errors in cases where <?x as Trait<'a>>::Assoc normalized to &'a u32. The inference variable ?y would be in a lower universe than the placeholders made when instantiating the for<'a> binder.

    +

    Leaving the alias unnormalized would also be wrong as the old solver expects all aliases to be rigid. This was a soundness bug before the new solver was stabilized in coherence: relating projection substs is unsound during coherence.

    +

    Ultimately this means that it is not always possible to ensure all aliases inside of a value are rigid.

    +

    Handling uses of diverging aliases

    +

    Diverging aliases, like ambiguous aliases, are normalized to inference variables. As normalizing diverging aliases results in trait solver cycles, it always results in an error in the old solver. In the new solver it only results in an error if we wind up requiring all goals to hold in the current context. E.g. normalizing diverging aliases during HIR typeck will result in an error in both solvers.

    +

    Alias well formedness doesn't require that the alias doesn't diverge4, this means that checking an alias is well formed isn't sufficient to cause an error to be emitted for diverging aliases; actually attempting to normalize the alias is required.

    +

    Erroring on diverging aliases being a side effect of normalization means that it is very arbitrary whether we actually emit an error, it also differs between the old and new solver as we now normalize in less places.

    +

    An example of the ad-hoc nature of erroring on diverging aliases causing "problems":

    +
    #![allow(unused)]
    +fn main() {
    +trait Trait {
    +    type Diverges<D: Trait>;
    +}
    +
    +impl<T> Trait for T {
    +    type Diverges<D: Trait> = D::Diverges<D>;
    +}
    +
    +struct Bar<T: ?Sized = <u8 as Trait>::Diverges<u8>>(Box<T>);
    +}
    +

    In this example a diverging alias is used but we happen to not emit an error as we never explicitly normalize the defaults of generic parameters. If the ?Sized opt out is removed then an error is emitted because we wind up happening to normalize a <u8 as Trait>::Diverges<u8>: Sized goal which as a side effect results in erroring about the diverging alias.

    +

    Const aliases differ from type aliases a bit here; well formedness of const aliases requires that they can be successfully evaluated (via ConstEvaluatable goals). This means that simply checking well formedness of const arguments is sufficient to error if they would fail to evaluate. It is somewhat unclear whether it would make sense to adopt this for type aliases too or if const aliases should stop requiring this for well formedness5.

    +
    +
    1. +

      In the new solver this is done implicitly

      +
    2. +
    3. +

      There is a subtle difference in how ambiguous aliases in binders are handled between old and new solver. In the old solver we fail to error on some ambiguous aliases inside of higher ranked types whereas the new solver correctly errors.

      +
    4. +
    5. +

      Ambiguous aliases inside of binders cannot be normalized to inference variables, this will be covered more later.

      +
    6. +
    7. +

      As checking aliases are non-diverging cannot be done until they are fully concrete, this would either imply that we cant check aliases are well formed before codegen/const-evaluation or that aliases would go from being well-formed to not well-formed after monomorphization.

      +
    8. +
    9. +

      Const aliases certainly wouldn't be less sound than type aliases if we stopped doing this

      +
    10. +

    Typing/Parameter Environments

    + +

    Typing Environments

    +

    When interacting with the type system there are a few variables to consider that can affect the results of trait solving. The set of in-scope where clauses, and what phase of the compiler type system operations are being performed in (the ParamEnv and TypingMode structs respectively).

    +

    When an environment to perform type system operations in has not yet been created, the TypingEnv can be used to bundle all of the external context required into a single type.

    +

    Once a context to perform type system operations in has been created (e.g. an ObligationCtxt or FnCtxt) a TypingEnv is typically not stored anywhere as only the TypingMode is a property of the whole environment, whereas different ParamEnvs can be used on a per-goal basis.

    +

    Parameter Environments

    +

    What is a ParamEnv

    +

    The ParamEnv is a list of in-scope where-clauses, it typically corresponds to a specific item's where clauses. Some clauses are not explicitly written but are instead implicitly added in the predicates_of query, such as ConstArgHasType or (some) implied bounds.

    +

    In most cases ParamEnvs are initially created via the param_env query which returns a ParamEnv derived from the provided item's where clauses. A ParamEnv can also be created with arbitrary sets of clauses that are not derived from a specific item, such as in compare_method_predicate_entailment where we create a hybrid ParamEnv consisting of the impl's where clauses and the trait definition's function's where clauses.

    +
    +

    If we have a function such as:

    +
    #![allow(unused)]
    +fn main() {
    +// `foo` would have a `ParamEnv` of:
    +// `[T: Sized, T: Trait, <T as Trait>::Assoc: Clone]`
    +fn foo<T: Trait>()
    +where
    +    <T as Trait>::Assoc: Clone,
    +{}
    +}
    +

    If we were conceptually inside of foo (for example, type-checking or linting it) we would use this ParamEnv everywhere that we interact with the type system. This would allow things such as normalization, evaluating generic constants, and proving where clauses/goals, to rely on T being sized, implementing Trait, etc.

    +

    A more concrete example:

    +
    #![allow(unused)]
    +fn main() {
    +// `foo` would have a `ParamEnv` of:
    +// `[T: Sized, T: Clone]`
    +fn foo<T: Clone>(a: T) {
    +    // when typechecking `foo` we require all the where clauses on `requires_clone`
    +    // to hold in order for it to be legal to call. This means we have to
    +    // prove `T: Clone`. As we are type checking `foo` we use `foo`'s
    +    // environment when trying to check that `T: Clone` holds.
    +    //
    +    // Trying to prove `T: Clone` with a `ParamEnv` of `[T: Sized, T: Clone]`
    +    // will trivially succeed as bound we want to prove is in our environment.
    +    requires_clone(a);
    +}
    +}
    +

    Or alternatively an example that would not compile:

    +
    #![allow(unused)]
    +fn main() {
    +// `foo2` would have a `ParamEnv` of:
    +// `[T: Sized]`
    +fn foo2<T>(a: T) {
    +    // When typechecking `foo2` we attempt to prove `T: Clone`.
    +    // As we are type checking `foo2` we use `foo2`'s environment
    +    // when trying to prove `T: Clone`.
    +    //
    +    // Trying to prove `T: Clone` with a `ParamEnv` of `[T: Sized]` will
    +    // fail as there is nothing in the environment telling the trait solver
    +    // that `T` implements `Clone` and there exists no user written impl
    +    // that could apply.
    +    requires_clone(a);
    +}
    +}
    +

    Acquiring a ParamEnv

    +

    Using the wrong ParamEnv when interacting with the type system can lead to ICEs, illformed programs compiling, or erroring when we shouldn't. See #82159 and #82067 as examples of PRs that modified the compiler to use the correct param env and in the process fixed ICEs.

    +

    In the large majority of cases, when a ParamEnv is required it either already exists somewhere in scope, or above in the call stack and should be passed down. A non exhaustive list of places where you might find an existing ParamEnv:

    + +

    If you aren't sure if there's a ParamEnv in scope somewhere that can be used it can be worth opening a thread in the #t-compiler/help zulip stream where someone may be able to point out where a ParamEnv can be acquired from.

    +

    Manually constructing a ParamEnv is typically only needed at the start of some kind of top level analysis (e.g. hir typeck or borrow checking). In such cases there are three ways it can be done:

    + +

    Using the param_env query is by far the most common way to construct a ParamEnv as most of the time the compiler is performing an analysis as part of some specific definition.

    +

    Creating an empty environment with ParamEnv::empty is typically only done either in codegen (indirectly via TypingEnv::fully_monomorphized), or as part of some analysis that do not expect to ever encounter generic parameters (e.g. various parts of coherence/orphan check).

    +

    Creating an env from an arbitrary set of where clauses is usually unnecessary and should only be done if the environment you need does not correspond to an actual item in the source code (e.g. compare_method_predicate_entailment).

    +

    How are ParamEnvs constructed

    +

    Creating a ParamEnv is more complicated than simply using the list of where clauses defined on an item as written by the user. We need to both elaborate supertraits into the env and fully normalize all aliases. This logic is handled by traits::normalize_param_env_or_error (even though it does not mention anything about elaboration).

    +

    Elaborating supertraits

    +

    When we have a function such as fn foo<T: Copy>() we would like to be able to prove T: Clone inside of the function as the Copy trait has a Clone supertrait. Constructing a ParamEnv looks at all of the trait bounds in the env and explicitly adds new where clauses to the ParamEnv for any supertraits found on the traits.

    +

    A concrete example would be the following function:

    +
    #![allow(unused)]
    +fn main() {
    +trait Trait: SuperTrait {}
    +trait SuperTrait: SuperSuperTrait {}
    +
    +// `bar`'s unelaborated `ParamEnv` would be:
    +// `[T: Sized, T: Copy, T: Trait]`
    +fn bar<T: Copy + Trait>(a: T) {
    +    requires_impl(a);
    +}
    +
    +fn requires_impl<T: Clone + SuperSuperTrait>(a: T) {}
    +}
    +

    If we did not elaborate the env then the requires_impl call would fail to typecheck as we would not be able to prove T: Clone or T: SuperSuperTrait. In practice we elaborate the env which means that bar's ParamEnv is actually: +[T: Sized, T: Copy, T: Clone, T: Trait, T: SuperTrait, T: SuperSuperTrait] +This allows us to prove T: Clone and T: SuperSuperTrait when type checking bar.

    +

    The Clone trait has a Sized supertrait however we do not end up with two T: Sized bounds in the env (one for the supertrait and one for the implicitly added T: Sized bound) as the elaboration process (implemented via util::elaborate) deduplicates where clauses.

    +

    A side effect of this is that even if no actual elaboration of supertraits takes place, the existing where clauses in the env are also deduplicated. See the following example:

    +
    #![allow(unused)]
    +fn main() {
    +trait Trait {}
    +// The unelaborated `ParamEnv` would be:
    +// `[T: Sized, T: Trait, T: Trait]`
    +// but after elaboration it would be:
    +// `[T: Sized, T: Trait]`
    +fn foo<T: Trait + Trait>() {}
    +}
    +

    The next-gen trait solver also requires this elaboration to take place.

    +

    Normalizing all bounds

    +

    In the old trait solver the where clauses stored in ParamEnv are required to be fully normalized as otherwise the trait solver will not function correctly. A concrete example of needing to normalize the ParamEnv is the following:

    +
    #![allow(unused)]
    +fn main() {
    +trait Trait<T> {
    +    type Assoc;
    +}
    +
    +trait Other {
    +    type Bar;
    +}
    +
    +impl<T> Other for T {
    +    type Bar = u32;
    +}
    +
    +// `foo`'s unnormalized `ParamEnv` would be:
    +// `[T: Sized, U: Sized, U: Trait<T::Bar>]`
    +fn foo<T, U>(a: U) 
    +where
    +    U: Trait<<T as Other>::Bar>,
    +{
    +    requires_impl(a);
    +}
    +
    +fn requires_impl<U: Trait<u32>>(_: U) {}
    +}
    +

    As humans we can tell that <T as Other>::Bar is equal to u32 so the trait bound on U is equivalent to U: Trait<u32>. In practice trying to prove U: Trait<u32> in the old solver in this environment would fail as it is unable to determine that <T as Other>::Bar is equal to u32.

    +

    To work around this we normalize ParamEnv's after constructing them so that foo's ParamEnv is actually: [T: Sized, U: Sized, U: Trait<u32>] which means the trait solver is now able to use the U: Trait<u32> in the ParamEnv to determine that the trait bound U: Trait<u32> holds.

    +

    This workaround does not work in all cases as normalizing associated types requires a ParamEnv which introduces a bootstrapping problem. We need a normalized ParamEnv in order for normalization to give correct results, but we need to normalize to get that ParamEnv. Currently we normalize the ParamEnv once using the unnormalized param env and it tends to give okay results in practice even though there are some examples where this breaks (example).

    +

    In the next-gen trait solver the requirement for all where clauses in the ParamEnv to be fully normalized is not present and so we do not normalize when constructing ParamEnvs.

    +

    Typing Modes

    +

    Depending on what context we are performing type system operations in, different behaviour may be required. For example during coherence there are stronger requirements about when we can consider goals to not hold or when we can consider types to be unequal.

    +

    Tracking which "phase" of the compiler type system operations are being performed in is done by the TypingMode enum. The documentation on the TypingMode enum is quite good so instead of repeating it here verbatim we would recommend reading the API documentation directly.

    +

    Type inference

    + +

    Type inference is the process of automatic detection of the type of an +expression.

    +

    It is what allows Rust to work with fewer or no type annotations, +making things easier for users:

    +
    fn main() {
    +    let mut things = vec![];
    +    things.push("thing");
    +}
    +

    Here, the type of things is inferred to be Vec<&str> because of the value +we push into things.

    +

    The type inference is based on the standard Hindley-Milner (HM) type inference +algorithm, but extended in various ways to accommodate subtyping, region +inference, and higher-ranked types.

    +

    A note on terminology

    +

    We use the notation ?T to refer to inference variables, also called +existential variables.

    +

    We use the terms "region" and "lifetime" interchangeably. Both refer to +the 'a in &'a T.

    +

    The term "bound region" refers to a region that is bound in a function +signature, such as the 'a in for<'a> fn(&'a u32). A region is +"free" if it is not bound.

    +

    Creating an inference context

    +

    You create an inference context by doing something like +the following:

    +
    let infcx = tcx.infer_ctxt().build();
    +// Use the inference context `infcx` here.
    +

    infcx has the type InferCtxt<'tcx>, the same 'tcx lifetime as on +the tcx it was built from.

    +

    The tcx.infer_ctxt method actually returns a builder, which means +there are some kinds of configuration you can do before the infcx is +created. See InferCtxtBuilder for more information.

    +

    +

    Inference variables

    +

    The main purpose of the inference context is to house a bunch of +inference variables – these represent types or regions whose precise +value is not yet known, but will be uncovered as we perform type-checking.

    +

    If you're familiar with the basic ideas of unification from H-M type +systems, or logic languages like Prolog, this is the same concept. If +you're not, you might want to read a tutorial on how H-M type +inference works, or perhaps this blog post on +unification in the Chalk project.

    +

    All told, the inference context stores five kinds of inference variables +(as of March 2023):

    +
      +
    • Type variables, which come in three varieties: +
        +
      • General type variables (the most common). These can be unified with any +type.
      • +
      • Integral type variables, which can only be unified with an integral type, +and arise from an integer literal expression like 22.
      • +
      • Float type variables, which can only be unified with a float type, and +arise from a float literal expression like 22.0.
      • +
      +
    • +
    • Region variables, which represent lifetimes, and arise all over the place.
    • +
    • Const variables, which represent constants.
    • +
    +

    All the type variables work in much the same way: you can create a new +type variable, and what you get is Ty<'tcx> representing an +unresolved type ?T. Then later you can apply the various operations +that the inferencer supports, such as equality or subtyping, and it +will possibly instantiate (or bind) that ?T to a specific +value as a result.

    +

    The region variables work somewhat differently, and are described +below in a separate section.

    +

    Enforcing equality / subtyping

    +

    The most basic operations you can perform in the type inferencer is +equality, which forces two types T and U to be the same. The +recommended way to add an equality constraint is to use the at +method, roughly like so:

    +
    infcx.at(...).eq(t, u);
    +

    The first at() call provides a bit of context, i.e. why you are +doing this unification, and in what environment, and the eq method +performs the actual equality constraint.

    +

    When you equate things, you force them to be precisely equal. Equating +returns an InferResult – if it returns Err(err), then equating +failed, and the enclosing TypeError will tell you what went wrong.

    +

    The success case is perhaps more interesting. The "primary" return +type of eq is () – that is, when it succeeds, it doesn't return a +value of any particular interest. Rather, it is executed for its +side-effects of constraining type variables and so forth. However, the +actual return type is not (), but rather InferOk<()>. The +InferOk type is used to carry extra trait obligations – your job is +to ensure that these are fulfilled (typically by enrolling them in a +fulfillment context). See the trait chapter for more background on that.

    +

    You can similarly enforce subtyping through infcx.at(..).sub(..). The same +basic concepts as above apply.

    +

    "Trying" equality

    +

    Sometimes you would like to know if it is possible to equate two +types without error. You can test that with infcx.can_eq (or +infcx.can_sub for subtyping). If this returns Ok, then equality +is possible – but in all cases, any side-effects are reversed.

    +

    Be aware, though, that the success or failure of these methods is always +modulo regions. That is, two types &'a u32 and &'b u32 will +return Ok for can_eq, even if 'a != 'b. This falls out from the +"two-phase" nature of how we solve region constraints.

    +

    Snapshots

    +

    As described in the previous section on can_eq, often it is useful +to be able to do a series of operations and then roll back their +side-effects. This is done for various reasons: one of them is to be +able to backtrack, trying out multiple possibilities before settling +on which path to take. Another is in order to ensure that a series of +smaller changes take place atomically or not at all.

    +

    To allow for this, the inference context supports a snapshot method. +When you call it, it will start recording changes that occur from the +operations you perform. When you are done, you can either invoke +rollback_to, which will undo those changes, or else confirm, which +will make them permanent. Snapshots can be nested as long as you follow +a stack-like discipline.

    +

    Rather than use snapshots directly, it is often helpful to use the +methods like commit_if_ok or probe that encapsulate higher-level +patterns.

    +

    Subtyping obligations

    +

    One thing worth discussing is subtyping obligations. When you force +two types to be a subtype, like ?T <: i32, we can often convert those +into equality constraints. This follows from Rust's rather limited notion +of subtyping: so, in the above case, ?T <: i32 is equivalent to ?T = i32.

    +

    However, in some cases we have to be more careful. For example, when +regions are involved. So if you have ?T <: &'a i32, what we would do +is to first "generalize" &'a i32 into a type with a region variable: +&'?b i32, and then unify ?T with that (?T = &'?b i32). We then +relate this new variable with the original bound:

    +
    &'?b i32 <: &'a i32
    +
    +

    This will result in a region constraint (see below) of '?b: 'a.

    +

    One final interesting case is relating two unbound type variables, +like ?T <: ?U. In that case, we can't make progress, so we enqueue +an obligation Subtype(?T, ?U) and return it via the InferOk +mechanism. You'll have to try again when more details about ?T or +?U are known.

    +

    Region constraints

    +

    Regions are inferenced somewhat differently from types. Rather than +eagerly unifying things, we simply collect constraints as we go, but +make (almost) no attempt to solve regions. These constraints have the +form of an "outlives" constraint:

    +
    'a: 'b
    +
    +

    Actually the code tends to view them as a subregion relation, but it's the same +idea:

    +
    'b <= 'a
    +
    +

    (There are various other kinds of constraints, such as "verifys"; see +the region_constraints module for details.)

    +

    There is one case where we do some amount of eager unification. If you have an +equality constraint between two regions

    +
    'a = 'b
    +
    +

    we will record that fact in a unification table. You can then use +opportunistic_resolve_var to convert 'b to 'a (or vice +versa). This is sometimes needed to ensure termination of fixed-point +algorithms.

    +

    Solving region constraints

    +

    Region constraints are only solved at the very end of +typechecking, once all other constraints are known and +all other obligations have been proven. There are two +ways to solve region constraints right now: lexical and +non-lexical. Eventually there will only be one.

    +

    An exception here is the leak-check which is used during trait solving +and relies on region constraints containing higher-ranked regions. Region +constraints in the root universe (i.e. not arising from a for<'a>) must +not influence the trait system, as these regions are all erased during +codegen.

    +

    To solve lexical region constraints, you invoke +resolve_regions_and_report_errors. This "closes" the region +constraint process and invokes the lexical_region_resolve code. Once +this is done, any further attempt to equate or create a subtyping +relationship will yield an ICE.

    +

    The NLL solver (actually, the MIR type-checker) does things slightly +differently. It uses canonical queries for trait solving which use +take_and_reset_region_constraints at the end. This extracts all of the +outlives constraints added during the canonical query. This is required +as the NLL solver must not only know what regions outlive each other, +but also where. Finally, the NLL solver invokes take_region_var_origins, +providing all region variables to the solver.

    +

    Lexical region resolution

    +

    Lexical region resolution is done by initially assigning each region +variable to an empty value. We then process each outlives constraint +repeatedly, growing region variables until a fixed-point is reached. +Region variables can be grown using a least-upper-bound relation on +the region lattice in a fairly straightforward fashion.

    +

    Trait resolution (old-style)

    + +

    This chapter describes the general process of trait resolution and points out +some non-obvious things.

    +

    Note: This chapter (and its subchapters) describe how the trait +solver currently works. However, we are in the process of +designing a new trait solver. If you'd prefer to read about that, +see this subchapter.

    +

    Major concepts

    +

    Trait resolution is the process of pairing up an impl with each +reference to a trait. So, for example, if there is a generic function like:

    +
    fn clone_slice<T:Clone>(x: &[T]) -> Vec<T> { ... }
    +

    and then a call to that function:

    +
    let v: Vec<isize> = clone_slice(&[1, 2, 3])
    +

    it is the job of trait resolution to figure out whether there exists an impl of +(in this case) isize : Clone.

    +

    Note that in some cases, like generic functions, we may not be able to +find a specific impl, but we can figure out that the caller must +provide an impl. For example, consider the body of clone_slice:

    +
    fn clone_slice<T:Clone>(x: &[T]) -> Vec<T> {
    +    let mut v = Vec::new();
    +    for e in &x {
    +        v.push((*e).clone()); // (*)
    +    }
    +}
    +

    The line marked (*) is only legal if T (the type of *e) +implements the Clone trait. Naturally, since we don't know what T +is, we can't find the specific impl; but based on the bound T:Clone, +we can say that there exists an impl which the caller must provide.

    +

    We use the term obligation to refer to a trait reference in need of +an impl. Basically, the trait resolution system resolves an obligation +by proving that an appropriate impl does exist.

    +

    During type checking, we do not store the results of trait selection. +We simply wish to verify that trait selection will succeed. Then +later, at codegen time, when we have all concrete types available, we +can repeat the trait selection to choose an actual implementation, which +will then be generated in the output binary.

    +

    Overview

    +

    Trait resolution consists of three major parts:

    +
      +
    • +

      Selection: Deciding how to resolve a specific obligation. For +example, selection might decide that a specific obligation can be +resolved by employing an impl which matches the Self type, or by using a +parameter bound (e.g. T: Trait). In the case of an impl, selecting one +obligation can create nested obligations because of where clauses +on the impl itself. It may also require evaluating those nested +obligations to resolve ambiguities.

      +
    • +
    • +

      Fulfillment: The fulfillment code is what tracks that obligations +are completely fulfilled. Basically it is a worklist of obligations +to be selected: once selection is successful, the obligation is +removed from the worklist and any nested obligations are enqueued. +Fulfillment constrains inference variables.

      +
    • +
    • +

      Evaluation: Checks whether obligations holds without constraining +any inference variables. Used by selection.

      +
    • +
    +

    Selection

    +

    Selection is the process of deciding whether an obligation can be +resolved and, if so, how it is to be resolved (via impl, where clause, etc). +The main interface is the select() function, which takes an obligation +and returns a SelectionResult. There are three possible outcomes:

    +
      +
    • +

      Ok(Some(selection)) – yes, the obligation can be resolved, and +selection indicates how. If the impl was resolved via an impl, +then selection may also indicate nested obligations that are required +by the impl.

      +
    • +
    • +

      Ok(None) – we are not yet sure whether the obligation can be +resolved or not. This happens most commonly when the obligation +contains unbound type variables.

      +
    • +
    • +

      Err(err) – the obligation definitely cannot be resolved due to a +type error or because there are no impls that could possibly apply.

      +
    • +
    +

    The basic algorithm for selection is broken into two big phases: +candidate assembly and confirmation.

    +

    Note that because of how lifetime inference works, it is not possible to +give back immediate feedback as to whether a unification or subtype +relationship between lifetimes holds or not. Therefore, lifetime +matching is not considered during selection. This is reflected in +the fact that subregion assignment is infallible. This may yield +lifetime constraints that will later be found to be in error (in +contrast, the non-lifetime-constraints have already been checked +during selection and can never cause an error, though naturally they +may lead to other errors downstream).

    +

    Candidate assembly

    +

    TODO: Talk about why we have different candidates, and why it needs to happen in a probe.

    +

    Searches for impls/where-clauses/etc that might +possibly be used to satisfy the obligation. Each of those is called +a candidate. To avoid ambiguity, we want to find exactly one +candidate that is definitively applicable. In some cases, we may not +know whether an impl/where-clause applies or not – this occurs when +the obligation contains unbound inference variables.

    +

    The subroutines that decide whether a particular impl/where-clause/etc applies +to a particular obligation are collectively referred to as the process of +matching. For impl candidates , +this amounts to unifying the impl header (the Self type and the trait arguments) +while ignoring nested obligations. If matching succeeds then we add it +to a set of candidates. There are other rules when assembling candidates for +built-in traits such as Copy, Sized, and CoerceUnsized.

    +

    Once this first pass is done, we can examine the set of candidates. If +it is a singleton set, then we are done: this is the only impl in +scope that could possibly apply. Otherwise, we can winnow down the set +of candidates by using where clauses and other conditions. Winnowing uses +evaluate_candidate to check whether the nested obligations may apply. +If this still leaves more than 1 candidate, we use fn candidate_should_be_dropped_in_favor_of +to prefer some candidates over others.

    +

    If this reduced set yields a single, unambiguous entry, we're good to go, +otherwise the result is considered ambiguous.

    +

    Winnowing: Resolving ambiguities

    +

    But what happens if there are multiple impls where all the types +unify? Consider this example:

    +
    trait Get {
    +    fn get(&self) -> Self;
    +}
    +
    +impl<T: Copy> Get for T {
    +    fn get(&self) -> T {
    +        *self
    +    }
    +}
    +
    +impl<T: Get> Get for Box<T> {
    +    fn get(&self) -> Box<T> {
    +        Box::new(<T>::get(self))
    +    }
    +}
    +

    What happens when we invoke get(&Box::new(1_u16)), for example? In this +case, the Self type is Box<u16> – that unifies with both impls, +because the first applies to all types T, and the second to all +Box<T>. In order for this to be unambiguous, the compiler does a winnowing +pass that considers where clauses +and attempts to remove candidates. In this case, the first impl only +applies if Box<u16> : Copy, which doesn't hold. After winnowing, +then, we are left with just one candidate, so we can proceed.

    +

    where clauses

    +

    Besides an impl, the other major way to resolve an obligation is via a +where clause. The selection process is always given a parameter +environment which contains a list of where clauses, which are +basically obligations that we can assume are satisfiable. We will iterate +over that list and check whether our current obligation can be found +in that list. If so, it is considered satisfied. More precisely, we +want to check whether there is a where-clause obligation that is for +the same trait (or some subtrait) and which can match against the obligation.

    +

    Consider this simple example:

    +
    trait A1 {
    +    fn do_a1(&self);
    +}
    +trait A2 : A1 { ... }
    +
    +trait B {
    +    fn do_b(&self);
    +}
    +
    +fn foo<X:A2+B>(x: X) {
    +    x.do_a1(); // (*)
    +    x.do_b();  // (#)
    +}
    +

    In the body of foo, clearly we can use methods of A1, A2, or B +on variable x. The line marked (*) will incur an obligation X: A1, +while the line marked (#) will incur an obligation X: B. Meanwhile, +the parameter environment will contain two where-clauses: X : A2 and X : B. +For each obligation, then, we search this list of where-clauses. The +obligation X: B trivially matches against the where-clause X: B. +To resolve an obligation X:A1, we would note that X:A2 implies that X:A1.

    +

    Confirmation

    +

    Confirmation unifies the output type parameters of the trait with the +values found in the obligation, possibly yielding a type error.

    +

    Suppose we have the following variation of the Convert example in the +previous section:

    +
    trait Convert<Target> {
    +    fn convert(&self) -> Target;
    +}
    +
    +impl Convert<usize> for isize { ... } // isize -> usize
    +impl Convert<isize> for usize { ... } // usize -> isize
    +
    +let x: isize = ...;
    +let y: char = x.convert(); // NOTE: `y: char` now!
    +

    Confirmation is where an error would be reported because the impl specified +that Target would be usize, but the obligation reported char. Hence the +result of selection would be an error.

    +

    Note that the candidate impl is chosen based on the Self type, but +confirmation is done based on (in this case) the Target type parameter.

    +

    Selection during codegen

    +

    As mentioned above, during type checking, we do not store the results of trait +selection. At codegen time, we repeat the trait selection to choose a particular +impl for each method call. This is done using fn codegen_select_candidate. +In this second selection, we do not consider any where-clauses to be in scope +because we know that each resolution will resolve to a particular impl.

    +

    One interesting twist has to do with nested obligations. In general, in codegen, +we only need to figure out which candidate applies, and we do not care about nested obligations, +as these are already assumed to be true. Nonetheless, we do currently fulfill all of them. +That is because it can sometimes inform the results of type inference. +That is, we do not have the full substitutions in terms of the type variables +of the impl available to us, so we must run trait selection to figure +everything out.

    +

    Higher-ranked trait bounds

    +

    One of the more subtle concepts in trait resolution is higher-ranked trait +bounds. An example of such a bound is for<'a> MyTrait<&'a isize>. +Let's walk through how selection on higher-ranked trait references +works.

    +

    Basic matching and placeholder leaks

    +

    Suppose we have a trait Foo:

    +
    #![allow(unused)]
    +fn main() {
    +trait Foo<X> {
    +    fn foo(&self, x: X) { }
    +}
    +}
    +

    Let's say we have a function want_hrtb that wants a type which +implements Foo<&'a isize> for any 'a:

    +
    fn want_hrtb<T>() where T : for<'a> Foo<&'a isize> { ... }
    +

    Now we have a struct AnyInt that implements Foo<&'a isize> for any +'a:

    +
    struct AnyInt;
    +impl<'a> Foo<&'a isize> for AnyInt { }
    +

    And the question is, does AnyInt : for<'a> Foo<&'a isize>? We want the +answer to be yes. The algorithm for figuring it out is closely related +to the subtyping for higher-ranked types (which is described here +and also in a paper by SPJ. If you wish to understand higher-ranked +subtyping, we recommend you read the paper). There are a few parts:

    +
      +
    1. Replace bound regions in the obligation with placeholders.
    2. +
    3. Match the impl against the placeholder obligation.
    4. +
    5. Check for placeholder leaks.
    6. +
    +

    So let's work through our example.

    +
      +
    1. +

      The first thing we would do is to +replace the bound region in the obligation with a placeholder, yielding +AnyInt : Foo<&'0 isize> (here '0 represents placeholder region #0). +Note that we now have no quantifiers; +in terms of the compiler type, this changes from a ty::PolyTraitRef +to a TraitRef. We would then create the TraitRef from the impl, +using fresh variables for it's bound regions (and thus getting +Foo<&'$a isize>, where '$a is the inference variable for 'a).

      +
    2. +
    3. +

      Next +we relate the two trait refs, yielding a graph with the constraint +that '0 == '$a.

      +
    4. +
    5. +

      Finally, we check for placeholder "leaks" – a +leak is basically any attempt to relate a placeholder region to another +placeholder region, or to any region that pre-existed the impl match. +The leak check is done by searching from the placeholder region to find +the set of regions that it is related to in any way. This is called +the "taint" set. To pass the check, that set must consist solely of +itself and region variables from the impl. If the taint set includes +any other region, then the match is a failure. In this case, the taint +set for '0 is {'0, '$a}, and hence the check will succeed.

      +
    6. +
    +

    Let's consider a failure case. Imagine we also have a struct

    +
    struct StaticInt;
    +impl Foo<&'static isize> for StaticInt;
    +

    We want the obligation StaticInt : for<'a> Foo<&'a isize> to be +considered unsatisfied. The check begins just as before. 'a is +replaced with a placeholder '0 and the impl trait reference is instantiated to +Foo<&'static isize>. When we relate those two, we get a constraint +like 'static == '0. This means that the taint set for '0 is {'0, 'static}, which fails the leak check.

    +

    TODO: This is because 'static is not a region variable but is in the +taint set, right?

    +

    Higher-ranked trait obligations

    +

    Once the basic matching is done, we get to another interesting topic: +how to deal with impl obligations. I'll work through a simple example +here. Imagine we have the traits Foo and Bar and an associated impl:

    +
    #![allow(unused)]
    +fn main() {
    +trait Foo<X> {
    +    fn foo(&self, x: X) { }
    +}
    +
    +trait Bar<X> {
    +    fn bar(&self, x: X) { }
    +}
    +
    +impl<X,F> Foo<X> for F
    +    where F : Bar<X>
    +{
    +}
    +}
    +

    Now let's say we have an obligation Baz: for<'a> Foo<&'a isize> and we match +this impl. What obligation is generated as a result? We want to get +Baz: for<'a> Bar<&'a isize>, but how does that happen?

    +

    After the matching, we are in a position where we have a placeholder +substitution like X => &'0 isize. If we apply this substitution to the +impl obligations, we get F : Bar<&'0 isize>. Obviously this is not +directly usable because the placeholder region '0 cannot leak out of +our computation.

    +

    What we do is to create an inverse mapping from the taint set of '0 +back to the original bound region ('a, here) that '0 resulted +from. (This is done in higher_ranked::plug_leaks). We know that the +leak check passed, so this taint set consists solely of the placeholder +region itself plus various intermediate region variables. We then walk +the trait-reference and convert every region in that taint set back to +a late-bound region, so in this case we'd wind up with +Baz: for<'a> Bar<&'a isize>.

    +

    Caching and subtle considerations therewith

    +

    In general, we attempt to cache the results of trait selection. This +is a somewhat complex process. Part of the reason for this is that we +want to be able to cache results even when all the types in the trait +reference are not fully known. In that case, it may happen that the +trait selection process is also influencing type variables, so we have +to be able to not only cache the result of the selection process, +but replay its effects on the type variables.

    +

    An example

    +

    The high-level idea of how the cache works is that we first replace +all unbound inference variables with placeholder versions. Therefore, +if we had a trait reference usize : Foo<$t>, where $t is an unbound +inference variable, we might replace it with usize : Foo<$0>, where +$0 is a placeholder type. We would then look this up in the cache.

    +

    If we found a hit, the hit would tell us the immediate next step to +take in the selection process (e.g. apply impl #22, or apply where +clause X : Foo<Y>).

    +

    On the other hand, if there is no hit, we need to go through the selection +process from scratch. Suppose, we come to the conclusion that the only +possible impl is this one, with def-id 22:

    +
    impl Foo<isize> for usize { ... } // Impl #22
    +

    We would then record in the cache usize : Foo<$0> => ImplCandidate(22). Next +we would confirm ImplCandidate(22), which would (as a side-effect) unify +$t with isize.

    +

    Now, at some later time, we might come along and see a usize : Foo<$u>. When replaced with a placeholder, this would yield usize : Foo<$0>, just as +before, and hence the cache lookup would succeed, yielding +ImplCandidate(22). We would confirm ImplCandidate(22) which would +(as a side-effect) unify $u with isize.

    +

    Where clauses and the local vs global cache

    +

    One subtle interaction is that the results of trait lookup will vary +depending on what where clauses are in scope. Therefore, we actually +have two caches, a local and a global cache. The local cache is +attached to the ParamEnv, and the global cache attached to the +tcx. We use the local cache whenever the result might depend on the +where clauses that are in scope. The determination of which cache to +use is done by the method pick_candidate_cache in select.rs. At +the moment, we use a very simple, conservative rule: if there are any +where-clauses in scope, then we use the local cache. We used to try +and draw finer-grained distinctions, but that led to a series of +annoying and weird bugs like #22019 and #18290. This simple rule seems +to be pretty clearly safe and also still retains a very high hit rate +(~95% when compiling rustc).

    +

    TODO: it looks like pick_candidate_cache no longer exists. In +general, is this section still accurate at all?

    +

    Implied bounds

    +

    We currently add implied region bounds to avoid explicit annotations. e.g. +fn foo<'a, T>(x: &'a T) can freely assume that T: 'a holds without specifying it.

    +

    There are two kinds of implied bounds: explicit and implicit. Explicit implied bounds +get added to the fn predicates_of of the relevant item while implicit ones are +handled... well... implicitly.

    +

    explicit implied bounds

    +

    The explicit implied bounds are computed in fn inferred_outlives_of. Only ADTs and +lazy type aliases have explicit implied bounds which are computed via a fixpoint algorithm +in the fn inferred_outlives_crate query.

    +

    We use fn insert_required_predicates_to_be_wf on all fields of all ADTs in the crate. +This function computes the outlives bounds for each component of the field using a +separate implementation.

    +

    For ADTs, trait objects, and associated types the initially required predicates are +computed in fn check_explicit_predicates. This simply uses fn explicit_predicates_of +without elaborating them.

    +

    Region predicates are added via fn insert_outlives_predicate. This function takes +an outlives predicate, decomposes it and adds the components as explicit predicates only +if the outlived region is a region parameter. It does not add 'static requirements.

    +

    implicit implied bounds

    +

    As we are unable to handle implications in binders yet, we cannot simply add the outlives +requirements of impls and functions as explicit predicates.

    +

    using implicit implied bounds as assumptions

    +

    These bounds are not added to the ParamEnv of the affected item itself. For lexical +region resolution they are added using fn OutlivesEnvironment::from_normalized_bounds. +Similarly, during MIR borrowck we add them using +fn UniversalRegionRelationsBuilder::add_implied_bounds.

    +

    We add implied bounds for the function signature and impl header in MIR borrowck. +Outside of MIR borrowck we add the outlives requirements for the types returned by the +fn assumed_wf_types query.

    +

    The assumed outlives constraints for implicit bounds are computed using the +fn implied_outlives_bounds query. This directly +extracts the required outlives bounds from fn wf::obligations.

    +

    MIR borrowck adds the outlives constraints for both the normalized and unnormalized types, +lexical region resolution only uses the unnormalized types.

    +

    proving implicit implied bounds

    +

    As the implicit implied bounds are not included in fn predicates_of we have to +separately make sure they actually hold. We generally handle this by checking that +all used types are well formed by emitting WellFormed predicates.

    +

    We cannot emit WellFormed predicates when instantiating impls, as this would result +in - currently often inductive - trait solver cycles. We also do not emit constraints +involving higher ranked regions as we're lacking the implied bounds from their binder.

    +

    This results in multiple unsoundnesses:

    +
      +
    • by using subtyping: #25860
    • +
    • by using super trait upcasting for a higher ranked trait bound: #84591
    • +
    • by being able to normalize a projection when using an impl while not being able +to normalize it when checking the impl: #100051
    • +
    +

    Specialization

    +

    TODO: where does Chalk fit in? Should we mention/discuss it here?

    +

    Defined in the specialize module.

    +

    The basic strategy is to build up a specialization graph during +coherence checking (coherence checking looks for overlapping impls). +Insertion into the graph locates the right place +to put an impl in the specialization hierarchy; if there is no right +place (due to partial overlap but no containment), you get an overlap +error. Specialization is consulted when selecting an impl (of course), +and the graph is consulted when propagating defaults down the +specialization hierarchy.

    +

    You might expect that the specialization graph would be used during +selection – i.e. when actually performing specialization. This is +not done for two reasons:

    +
      +
    • +

      It's merely an optimization: given a set of candidates that apply, +we can determine the most specialized one by comparing them directly +for specialization, rather than consulting the graph. Given that we +also cache the results of selection, the benefit of this +optimization is questionable.

      +
    • +
    • +

      To build the specialization graph in the first place, we need to use +selection (because we need to determine whether one impl specializes +another). Dealing with this reentrancy would require some additional +mode switch for selection. Given that there seems to be no strong +reason to use the graph anyway, we stick with a simpler approach in +selection, and use the graph only for propagating default +implementations.

      +
    • +
    +

    Trait impl selection can succeed even when multiple impls can apply, +as long as they are part of the same specialization family. In that +case, it returns a single impl on success – this is the most +specialized impl known to apply. However, if there are any inference +variables in play, the returned impl may not be the actual impl we +will use at codegen time. Thus, we take special care to avoid projecting +associated types unless either (1) the associated type does not use +default and thus cannot be overridden or (2) all input types are +known concretely.

    +

    Additional Resources

    +

    This talk by @sunjay may be useful. Keep in mind that the talk only +gives a broad overview of the problem and the solution (it was presented about +halfway through @sunjay's work). Also, it was given in June 2018, and some +things may have changed by the time you watch it.

    +

    Chalk-based trait solving

    +

    Chalk is an experimental trait solver for Rust that is +(as of May 2022) under development by the Types team. +Its goal is to enable a lot of trait system features and bug fixes +that are hard to implement (e.g. GATs or specialization). If you would like to +help in hacking on the new solver, drop by on the rust-lang Zulip in the #t-types +stream and say hello!

    +

    The new-style trait solver is based on the work done in chalk. Chalk +recasts Rust's trait system explicitly in terms of logic programming. It does +this by "lowering" Rust code into a kind of logic program we can then execute +queries against.

    +

    The key observation here is that the Rust trait system is basically a +kind of logic, and it can be mapped onto standard logical inference +rules. We can then look for solutions to those inference rules in a +very similar fashion to how e.g. a Prolog solver works. It turns out +that we can't quite use Prolog rules (also called Horn clauses) but +rather need a somewhat more expressive variant.

    +

    You can read more about chalk itself in the +Chalk book section.

    +

    Ongoing work

    +

    The design of the new-style trait solving happens in two places:

    +

    chalk. The chalk repository is where we experiment with new ideas +and designs for the trait system.

    +

    rustc. Once we are happy with the logical rules, we proceed to +implementing them in rustc. We map our struct, trait, and impl declarations +into logical inference rules in the lowering module in rustc.

    +

    Lowering to logic

    + +

    The key observation here is that the Rust trait system is basically a +kind of logic, and it can be mapped onto standard logical inference +rules. We can then look for solutions to those inference rules in a +very similar fashion to how e.g. a Prolog solver works. It turns out +that we can't quite use Prolog rules (also called Horn clauses) but +rather need a somewhat more expressive variant.

    +

    Rust traits and logic

    +

    One of the first observations is that the Rust trait system is +basically a kind of logic. As such, we can map our struct, trait, and +impl declarations into logical inference rules. For the most part, +these are basically Horn clauses, though we'll see that to capture the +full richness of Rust – and in particular to support generic +programming – we have to go a bit further than standard Horn clauses.

    +

    To see how this mapping works, let's start with an example. Imagine +we declare a trait and a few impls, like so:

    +
    #![allow(unused)]
    +fn main() {
    +trait Clone { }
    +impl Clone for usize { }
    +impl<T> Clone for Vec<T> where T: Clone { }
    +}
    +

    We could map these declarations to some Horn clauses, written in a +Prolog-like notation, as follows:

    +
    Clone(usize).
    +Clone(Vec<?T>) :- Clone(?T).
    +
    +// The notation `A :- B` means "A is true if B is true".
    +// Or, put another way, B implies A.
    +
    +

    In Prolog terms, we might say that Clone(Foo) – where Foo is some +Rust type – is a predicate that represents the idea that the type +Foo implements Clone. These rules are program clauses; they +state the conditions under which that predicate can be proven (i.e., +considered true). So the first rule just says "Clone is implemented +for usize". The next rule says "for any type ?T, Clone is +implemented for Vec<?T> if clone is implemented for ?T". So +e.g. if we wanted to prove that Clone(Vec<Vec<usize>>), we would do +so by applying the rules recursively:

    +
      +
    • Clone(Vec<Vec<usize>>) is provable if: +
        +
      • Clone(Vec<usize>) is provable if: +
          +
        • Clone(usize) is provable. (Which it is, so we're all good.)
        • +
        +
      • +
      +
    • +
    +

    But now suppose we tried to prove that Clone(Vec<Bar>). This would +fail (after all, I didn't give an impl of Clone for Bar):

    +
      +
    • Clone(Vec<Bar>) is provable if: +
        +
      • Clone(Bar) is provable. (But it is not, as there are no applicable rules.)
      • +
      +
    • +
    +

    We can easily extend the example above to cover generic traits with +more than one input type. So imagine the Eq<T> trait, which declares +that Self is equatable with a value of type T:

    +
    trait Eq<T> { ... }
    +impl Eq<usize> for usize { }
    +impl<T: Eq<U>> Eq<Vec<U>> for Vec<T> { }
    +

    That could be mapped as follows:

    +
    Eq(usize, usize).
    +Eq(Vec<?T>, Vec<?U>) :- Eq(?T, ?U).
    +
    +

    So far so good.

    +

    Type-checking normal functions

    +

    OK, now that we have defined some logical rules that are able to +express when traits are implemented and to handle associated types, +let's turn our focus a bit towards type-checking. Type-checking is +interesting because it is what gives us the goals that we need to +prove. That is, everything we've seen so far has been about how we +derive the rules by which we can prove goals from the traits and impls +in the program; but we are also interested in how to derive the goals +that we need to prove, and those come from type-checking.

    +

    Consider type-checking the function foo() here:

    +
    fn foo() { bar::<usize>() }
    +fn bar<U: Eq<U>>() { }
    +

    This function is very simple, of course: all it does is to call +bar::<usize>(). Now, looking at the definition of bar(), we can see +that it has one where-clause U: Eq<U>. So, that means that foo() will +have to prove that usize: Eq<usize> in order to show that it can call bar() +with usize as the type argument.

    +

    If we wanted, we could write a Prolog predicate that defines the +conditions under which bar() can be called. We'll say that those +conditions are called being "well-formed":

    +
    barWellFormed(?U) :- Eq(?U, ?U).
    +
    +

    Then we can say that foo() type-checks if the reference to +bar::<usize> (that is, bar() applied to the type usize) is +well-formed:

    +
    fooTypeChecks :- barWellFormed(usize).
    +
    +

    If we try to prove the goal fooTypeChecks, it will succeed:

    +
      +
    • fooTypeChecks is provable if: +
        +
      • barWellFormed(usize), which is provable if: +
          +
        • Eq(usize, usize), which is provable because of an impl.
        • +
        +
      • +
      +
    • +
    +

    Ok, so far so good. Let's move on to type-checking a more complex function.

    +

    Type-checking generic functions: beyond Horn clauses

    +

    In the last section, we used standard Prolog horn-clauses (augmented with Rust's +notion of type equality) to type-check some simple Rust functions. But that only +works when we are type-checking non-generic functions. If we want to type-check +a generic function, it turns out we need a stronger notion of goal than what Prolog +can provide. To see what I'm talking about, let's revamp our previous +example to make foo generic:

    +
    fn foo<T: Eq<T>>() { bar::<T>() }
    +fn bar<U: Eq<U>>() { }
    +

    To type-check the body of foo, we need to be able to hold the type +T "abstract". That is, we need to check that the body of foo is +type-safe for all types T, not just for some specific type. We might express +this like so:

    +
    fooTypeChecks :-
    +  // for all types T...
    +  forall<T> {
    +    // ...if we assume that Eq(T, T) is provable...
    +    if (Eq(T, T)) {
    +      // ...then we can prove that `barWellFormed(T)` holds.
    +      barWellFormed(T)
    +    }
    +  }.
    +
    +

    This notation I'm using here is the notation I've been using in my +prototype implementation; it's similar to standard mathematical +notation but a bit Rustified. Anyway, the problem is that standard +Horn clauses don't allow universal quantification (forall) or +implication (if) in goals (though many Prolog engines do support +them, as an extension). For this reason, we need to accept something +called "first-order hereditary harrop" (FOHH) clauses – this long +name basically means "standard Horn clauses with forall and if in +the body". But it's nice to know the proper name, because there is a +lot of work describing how to efficiently handle FOHH clauses; see for +example Gopalan Nadathur's excellent +"A Proof Procedure for the Logic of Hereditary Harrop Formulas" +in the bibliography of Chalk Book.

    +

    It turns out that supporting FOHH is not really all that hard. And +once we are able to do that, we can easily describe the type-checking +rule for generic functions like foo in our logic.

    +

    Source

    +

    This page is a lightly adapted version of a +blog post by Nicholas Matsakis.

    +

    Goals and clauses

    + +

    In logic programming terms, a goal is something that you must +prove and a clause is something that you know is true. As +described in the lowering to logic +chapter, Rust's trait solver is based on an extension of hereditary +harrop (HH) clauses, which extend traditional Prolog Horn clauses with +a few new superpowers.

    +

    Goals and clauses meta structure

    +

    In Rust's solver, goals and clauses have the following forms +(note that the two definitions reference one another):

    +
    Goal = DomainGoal           // defined in the section below
    +        | Goal && Goal
    +        | Goal || Goal
    +        | exists<K> { Goal }   // existential quantification
    +        | forall<K> { Goal }   // universal quantification
    +        | if (Clause) { Goal } // implication
    +        | true                 // something that's trivially true
    +        | ambiguous            // something that's never provable
    +
    +Clause = DomainGoal
    +        | Clause :- Goal     // if can prove Goal, then Clause is true
    +        | Clause && Clause
    +        | forall<K> { Clause }
    +
    +K = <type>     // a "kind"
    +    | <lifetime>
    +
    +

    The proof procedure for these sorts of goals is actually quite +straightforward. Essentially, it's a form of depth-first search. The +paper +"A Proof Procedure for the Logic of Hereditary Harrop Formulas" +gives the details.

    +

    In terms of code, these types are defined in +rustc_middle/src/traits/mod.rs in rustc, and in +chalk-ir/src/lib.rs in chalk.

    +

    +

    Domain goals

    +

    Domain goals are the atoms of the trait logic. As can be seen in the +definitions given above, general goals basically consist in a combination of +domain goals.

    +

    Moreover, flattening a bit the definition of clauses given previously, one can +see that clauses are always of the form:

    +
    forall<K1, ..., Kn> { DomainGoal :- Goal }
    +
    +

    hence domain goals are in fact clauses' LHS. That is, at the most granular level, +domain goals are what the trait solver will end up trying to prove.

    +

    +

    To define the set of domain goals in our system, we need to first +introduce a few simple formulations. A trait reference consists of +the name of a trait along with a suitable set of inputs P0..Pn:

    +
    TraitRef = P0: TraitName<P1..Pn>
    +
    +

    So, for example, u32: Display is a trait reference, as is Vec<T>: IntoIterator. Note that Rust surface syntax also permits some extra +things, like associated type bindings (Vec<T>: IntoIterator<Item = T>), that are not part of a trait reference.

    +

    +

    A projection consists of an associated item reference along with +its inputs P0..Pm:

    +
    Projection = <P0 as TraitName<P1..Pn>>::AssocItem<Pn+1..Pm>
    +
    +

    Given these, we can define a DomainGoal as follows:

    +
    DomainGoal = Holds(WhereClause)
    +            | FromEnv(TraitRef)
    +            | FromEnv(Type)
    +            | WellFormed(TraitRef)
    +            | WellFormed(Type)
    +            | Normalize(Projection -> Type)
    +
    +WhereClause = Implemented(TraitRef)
    +            | ProjectionEq(Projection = Type)
    +            | Outlives(Type: Region)
    +            | Outlives(Region: Region)
    +
    +

    WhereClause refers to a where clause that a Rust user would actually be able +to write in a Rust program. This abstraction exists only as a convenience as we +sometimes want to only deal with domain goals that are effectively writable in +Rust.

    +

    Let's break down each one of these, one-by-one.

    +

    Implemented(TraitRef)

    +

    e.g. Implemented(i32: Copy)

    +

    True if the given trait is implemented for the given input types and lifetimes.

    +

    ProjectionEq(Projection = Type)

    +

    e.g. ProjectionEq<T as Iterator>::Item = u8

    +

    The given associated type Projection is equal to Type; this can be proved +with either normalization or using placeholder associated types. See +the section on associated types in Chalk Book.

    +

    Normalize(Projection -> Type)

    +

    e.g. ProjectionEq<T as Iterator>::Item -> u8

    +

    The given associated type Projection can be normalized to Type.

    +

    As discussed in the section on associated +types in Chalk Book, Normalize implies ProjectionEq, +but not vice versa. In general, proving Normalize(<T as Trait>::Item -> U) +also requires proving Implemented(T: Trait).

    +

    FromEnv(TraitRef)

    +

    e.g. FromEnv(Self: Add<i32>)

    +

    True if the inner TraitRef is assumed to be true, +that is, if it can be derived from the in-scope where clauses.

    +

    For example, given the following function:

    +
    #![allow(unused)]
    +fn main() {
    +fn loud_clone<T: Clone>(stuff: &T) -> T {
    +    println!("cloning!");
    +    stuff.clone()
    +}
    +}
    +

    Inside the body of our function, we would have FromEnv(T: Clone). In-scope +where clauses nest, so a function body inside an impl body inherits the +impl body's where clauses, too.

    +

    This and the next rule are used to implement implied bounds. As we'll see +in the section on lowering, FromEnv(TraitRef) implies Implemented(TraitRef), +but not vice versa. This distinction is crucial to implied bounds.

    +

    FromEnv(Type)

    +

    e.g. FromEnv(HashSet<K>)

    +

    True if the inner Type is assumed to be well-formed, that is, if it is an +input type of a function or an impl.

    +

    For example, given the following code:

    +
    struct HashSet<K> where K: Hash { ... }
    +
    +fn loud_insert<K>(set: &mut HashSet<K>, item: K) {
    +    println!("inserting!");
    +    set.insert(item);
    +}
    +

    HashSet<K> is an input type of the loud_insert function. Hence, we assume it +to be well-formed, so we would have FromEnv(HashSet<K>) inside the body of our +function. As we'll see in the section on lowering, FromEnv(HashSet<K>) implies +Implemented(K: Hash) because the +HashSet declaration was written with a K: Hash where clause. Hence, we don't +need to repeat that bound on the loud_insert function: we rather automatically +assume that it is true.

    +

    WellFormed(Item)

    +

    These goals imply that the given item is well-formed.

    +

    We can talk about different types of items being well-formed:

    +
      +
    • +

      Types, like WellFormed(Vec<i32>), which is true in Rust, or +WellFormed(Vec<str>), which is not (because str is not Sized.)

      +
    • +
    • +

      TraitRefs, like WellFormed(Vec<i32>: Clone).

      +
    • +
    +

    Well-formedness is important to implied bounds. In particular, the reason +it is okay to assume FromEnv(T: Clone) in the loud_clone example is that we +also verify WellFormed(T: Clone) for each call site of loud_clone. +Similarly, it is okay to assume FromEnv(HashSet<K>) in the loud_insert +example because we will verify WellFormed(HashSet<K>) for each call site of +loud_insert.

    +

    Outlives(Type: Region), Outlives(Region: Region)

    +

    e.g. Outlives(&'a str: 'b), Outlives('a: 'static)

    +

    True if the given type or region on the left outlives the right-hand region.

    +

    +

    Coinductive goals

    +

    Most goals in our system are "inductive". In an inductive goal, +circular reasoning is disallowed. Consider this example clause:

    +
        Implemented(Foo: Bar) :-
    +        Implemented(Foo: Bar).
    +
    +

    Considered inductively, this clause is useless: if we are trying to +prove Implemented(Foo: Bar), we would then recursively have to prove +Implemented(Foo: Bar), and that cycle would continue ad infinitum +(the trait solver will terminate here, it would just consider that +Implemented(Foo: Bar) is not known to be true).

    +

    However, some goals are co-inductive. Simply put, this means that +cycles are OK. So, if Bar were a co-inductive trait, then the rule +above would be perfectly valid, and it would indicate that +Implemented(Foo: Bar) is true.

    +

    Auto traits are one example in Rust where co-inductive goals are used. +Consider the Send trait, and imagine that we have this struct:

    +
    #![allow(unused)]
    +fn main() {
    +struct Foo {
    +    next: Option<Box<Foo>>
    +}
    +}
    +

    The default rules for auto traits say that Foo is Send if the +types of its fields are Send. Therefore, we would have a rule like

    +
    Implemented(Foo: Send) :-
    +    Implemented(Option<Box<Foo>>: Send).
    +
    +

    As you can probably imagine, proving that Option<Box<Foo>>: Send is +going to wind up circularly requiring us to prove that Foo: Send +again. So this would be an example where we wind up in a cycle – but +that's ok, we do consider Foo: Send to hold, even though it +references itself.

    +

    In general, co-inductive traits are used in Rust trait solving when we +want to enumerate a fixed set of possibilities. In the case of auto +traits, we are enumerating the set of reachable types from a given +starting point (i.e., Foo can reach values of type +Option<Box<Foo>>, which implies it can reach values of type +Box<Foo>, and then of type Foo, and then the cycle is complete).

    +

    In addition to auto traits, WellFormed predicates are co-inductive. +These are used to achieve a similar "enumerate all the cases" pattern, +as described in the section on implied bounds.

    +

    Incomplete chapter

    +

    Some topics yet to be written:

    +
      +
    • Elaborate on the proof procedure
    • +
    • SLG solving – introduce negative reasoning
    • +
    +

    Canonical queries

    +

    The "start" of the trait system is the canonical query (these are +both queries in the more general sense of the word – something you +would like to know the answer to – and in the +rustc-specific sense). The idea is that the type +checker or other parts of the system, may in the course of doing their +thing want to know whether some trait is implemented for some type +(e.g., is u32: Debug true?). Or they may want to +normalize some associated type.

    +

    This section covers queries at a fairly high level of abstraction. The +subsections look a bit more closely at how these ideas are implemented +in rustc.

    +

    The traditional, interactive Prolog query

    +

    In a traditional Prolog system, when you start a query, the solver +will run off and start supplying you with every possible answer it can +find. So given something like this:

    +
    ?- Vec<i32>: AsRef<?U>
    +
    +

    The solver might answer:

    +
    Vec<i32>: AsRef<[i32]>
    +    continue? (y/n)
    +
    +

    This continue bit is interesting. The idea in Prolog is that the +solver is finding all possible instantiations of your query that +are true. In this case, if we instantiate ?U = [i32], then the query +is true (note that a traditional Prolog interface does not, directly, +tell us a value for ?U, but we can infer one by unifying the +response with our original query – Rust's solver gives back a +substitution instead). If we were to hit y, the solver might then +give us another possible answer:

    +
    Vec<i32>: AsRef<Vec<i32>>
    +    continue? (y/n)
    +
    +

    This answer derives from the fact that there is a reflexive impl +(impl<T> AsRef<T> for T) for AsRef. If were to hit y again, +then we might get back a negative response:

    +
    no
    +
    +

    Naturally, in some cases, there may be no possible answers, and hence +the solver will just give me back no right away:

    +
    ?- Box<i32>: Copy
    +    no
    +
    +

    In some cases, there might be an infinite number of responses. So for +example if I gave this query, and I kept hitting y, then the solver +would never stop giving me back answers:

    +
    ?- Vec<?U>: Clone
    +    Vec<i32>: Clone
    +        continue? (y/n)
    +    Vec<Box<i32>>: Clone
    +        continue? (y/n)
    +    Vec<Box<Box<i32>>>: Clone
    +        continue? (y/n)
    +    Vec<Box<Box<Box<i32>>>>: Clone
    +        continue? (y/n)
    +
    +

    As you can imagine, the solver will gleefully keep adding another +layer of Box until we ask it to stop, or it runs out of memory.

    +

    Another interesting thing is that queries might still have variables +in them. For example:

    +
    ?- Rc<?T>: Clone
    +
    +

    might produce the answer:

    +
    Rc<?T>: Clone
    +    continue? (y/n)
    +
    +

    After all, Rc<?T> is true no matter what type ?T is.

    +

    +

    A trait query in rustc

    +

    The trait queries in rustc work somewhat differently. Instead of +trying to enumerate all possible answers for you, they are looking +for an unambiguous answer. In particular, when they tell you the +value for a type variable, that means that this is the only possible +instantiation that you could use, given the current set of impls and +where-clauses, that would be provable.

    +

    The response to a trait query in rustc is typically a +Result<QueryResult<T>, NoSolution> (where the T will vary a bit +depending on the query itself). The Err(NoSolution) case indicates +that the query was false and had no answers (e.g., Box<i32>: Copy). +Otherwise, the QueryResult gives back information about the possible answer(s) +we did find. It consists of four parts:

    +
      +
    • Certainty: tells you how sure we are of this answer. It can have two +values: +
        +
      • Proven means that the result is known to be true. +
          +
        • This might be the result for trying to prove Vec<i32>: Clone, +say, or Rc<?T>: Clone.
        • +
        +
      • +
      • Ambiguous means that there were things we could not yet prove to +be either true or false, typically because more type information +was needed. (We'll see an example shortly.) +
          +
        • This might be the result for trying to prove Vec<?T>: Clone.
        • +
        +
      • +
      +
    • +
    • Var values: Values for each of the unbound inference variables +(like ?T) that appeared in your original query. (Remember that in Prolog, +we had to infer these.) +
        +
      • As we'll see in the example below, we can get back var values even +for Ambiguous cases.
      • +
      +
    • +
    • Region constraints: these are relations that must hold between +the lifetimes that you supplied as inputs. We'll ignore these here.
    • +
    • Value: The query result also comes with a value of type T. For +some specialized queries – like normalizing associated types – +this is used to carry back an extra result, but it's often just +().
    • +
    +

    Examples

    +

    Let's work through an example query to see what all the parts mean. +Consider the Borrow trait. This trait has a number of +impls; among them, there are these two (for clarity, I've written the +Sized bounds explicitly):

    +
    impl<T> Borrow<T> for T where T: ?Sized
    +impl<T> Borrow<[T]> for Vec<T> where T: Sized
    +

    Example 1. Imagine we are type-checking this (rather artificial) +bit of code:

    +
    fn foo<A, B>(a: A, vec_b: Option<B>) where A: Borrow<B> { }
    +
    +fn main() {
    +    let mut t: Vec<_> = vec![]; // Type: Vec<?T>
    +    let mut u: Option<_> = None; // Type: Option<?U>
    +    foo(t, u); // Example 1: requires `Vec<?T>: Borrow<?U>`
    +    ...
    +}
    +

    As the comments indicate, we first create two variables t and u; +t is an empty vector and u is a None option. Both of these +variables have unbound inference variables in their type: ?T +represents the elements in the vector t and ?U represents the +value stored in the option u. Next, we invoke foo; comparing the +signature of foo to its arguments, we wind up with A = Vec<?T> and +B = ?U. Therefore, the where clause on foo requires that Vec<?T>: Borrow<?U>. This is thus our first example trait query.

    +

    There are many possible solutions to the query Vec<?T>: Borrow<?U>; +for example:

    +
      +
    • ?U = Vec<?T>,
    • +
    • ?U = [?T],
    • +
    • ?T = u32, ?U = [u32]
    • +
    • and so forth.
    • +
    +

    Therefore, the result we get back would be as follows (I'm going to +ignore region constraints and the "value"):

    +
      +
    • Certainty: Ambiguous – we're not sure yet if this holds
    • +
    • Var values: [?T = ?T, ?U = ?U] – we learned nothing about the values of +the variables
    • +
    +

    In short, the query result says that it is too soon to say much about +whether this trait is proven. During type-checking, this is not an +immediate error: instead, the type checker would hold on to this +requirement (Vec<?T>: Borrow<?U>) and wait. As we'll see in the next +example, it may happen that ?T and ?U wind up constrained from +other sources, in which case we can try the trait query again.

    +

    Example 2. We can now extend our previous example a bit, +and assign a value to u:

    +
    fn foo<A, B>(a: A, vec_b: Option<B>) where A: Borrow<B> { }
    +
    +fn main() {
    +    // What we saw before:
    +    let mut t: Vec<_> = vec![]; // Type: Vec<?T>
    +    let mut u: Option<_> = None; // Type: Option<?U>
    +    foo(t, u); // `Vec<?T>: Borrow<?U>` => ambiguous
    +
    +    // New stuff:
    +    u = Some(vec![]); // ?U = Vec<?V>
    +}
    +

    As a result of this assignment, the type of u is forced to be +Option<Vec<?V>>, where ?V represents the element type of the +vector. This in turn implies that ?U is unified to Vec<?V>.

    +

    Let's suppose that the type checker decides to revisit the +"as-yet-unproven" trait obligation we saw before, Vec<?T>: Borrow<?U>. ?U is no longer an unbound inference variable; it now +has a value, Vec<?V>. So, if we "refresh" the query with that value, we get:

    +
    Vec<?T>: Borrow<Vec<?V>>
    +
    +

    This time, there is only one impl that applies, the reflexive impl:

    +
    impl<T> Borrow<T> for T where T: ?Sized
    +
    +

    Therefore, the trait checker will answer:

    +
      +
    • Certainty: Proven
    • +
    • Var values: [?T = ?T, ?V = ?T]
    • +
    +

    Here, it is saying that we have indeed proven that the obligation +holds, and we also know that ?T and ?V are the same type (but we +don't know what that type is yet!).

    +

    (In fact, as the function ends here, the type checker would give an +error at this point, since the element types of t and u are still +not yet known, even though they are known to be the same.)

    +

    Canonicalization

    +
    +

    NOTE: FIXME: The content of this chapter has some overlap with +Next-gen trait solving Canonicalization chapter. +It is suggested to reorganize these contents in the future.

    +
    +

    Canonicalization is the process of isolating an inference value +from its context. It is a key part of implementing +canonical queries, and you may wish to read the parent chapter +to get more context.

    +

    Canonicalization is really based on a very simple concept: every +inference variable is always in one of +two states: either it is unbound, in which case we don't know yet +what type it is, or it is bound, in which case we do. So to +isolate some data-structure T that contains types/regions from its +environment, we just walk down and find the unbound variables that +appear in T; those variables get replaced with "canonical variables", +starting from zero and numbered in a fixed order (left to right, for +the most part, but really it doesn't matter as long as it is +consistent).

    +

    So, for example, if we have the type X = (?T, ?U), where ?T and +?U are distinct, unbound inference variables, then the canonical +form of X would be (?0, ?1), where ?0 and ?1 represent these +canonical placeholders. Note that the type Y = (?U, ?T) also +canonicalizes to (?0, ?1). But the type Z = (?T, ?T) would +canonicalize to (?0, ?0) (as would (?U, ?U)). In other words, the +exact identity of the inference variables is not important – unless +they are repeated.

    +

    We use this to improve caching as well as to detect cycles and other +things during trait resolution. Roughly speaking, the idea is that if +two trait queries have the same canonical form, then they will get +the same answer. That answer will be expressed in terms of the +canonical variables (?0, ?1), which we can then map back to the +original variables (?T, ?U).

    +

    Canonicalizing the query

    +

    To see how it works, imagine that we are asking to solve the following +trait query: ?A: Foo<'static, ?B>, where ?A and ?B are unbound. +This query contains two unbound variables, but it also contains the +lifetime 'static. The trait system generally ignores all lifetimes +and treats them equally, so when canonicalizing, we will also +replace any free lifetime with a +canonical variable (Note that 'static is actually a free lifetime +variable here. We are not considering it in the typing context of the whole +program but only in the context of this trait reference. Mathematically, we +are not quantifying over the whole program, but only this obligation). +Therefore, we get the following result:

    +
    ?0: Foo<'?1, ?2>
    +
    +

    Sometimes we write this differently, like so:

    +
    for<T,L,T> { ?0: Foo<'?1, ?2> }
    +
    +

    This for<> gives some information about each of the canonical +variables within. In this case, each T indicates a type variable, +so ?0 and ?2 are types; the L indicates a lifetime variable, so +?1 is a lifetime. The canonicalize method also gives back a +CanonicalVarValues array OV with the "original values" for each +canonicalized variable:

    +
    [?A, 'static, ?B]
    +
    +

    We'll need this vector OV later, when we process the query response.

    +

    Executing the query

    +

    Once we've constructed the canonical query, we can try to solve it. +To do so, we will wind up creating a fresh inference context and +instantiating the canonical query in that context. The idea is that +we create a substitution S from the canonical form containing a fresh +inference variable (of suitable kind) for each canonical variable. +So, for our example query:

    +
    for<T,L,T> { ?0: Foo<'?1, ?2> }
    +
    +

    the substitution S might be:

    +
    S = [?A, '?B, ?C]
    +
    +

    We can then replace the bound canonical variables (?0, etc) with +these inference variables, yielding the following fully instantiated +query:

    +
    ?A: Foo<'?B, ?C>
    +
    +

    Remember that substitution S though! We're going to need it later.

    +

    OK, now that we have a fresh inference context and an instantiated +query, we can go ahead and try to solve it. The trait solver itself is +explained in more detail in another section, but +suffice to say that it will compute a certainty value (Proven or +Ambiguous) and have side-effects on the inference variables we've +created. For example, if there were only one impl of Foo, like so:

    +
    impl<'a, X> Foo<'a, X> for Vec<X>
    +where X: 'a
    +{ ... }
    +

    then we might wind up with a certainty value of Proven, as well as +creating fresh inference variables '?D and ?E (to represent the +parameters on the impl) and unifying as follows:

    +
      +
    • '?B = '?D
    • +
    • ?A = Vec<?E>
    • +
    • ?C = ?E
    • +
    +

    We would also accumulate the region constraint ?E: '?D, due to the +where clause.

    +

    In order to create our final query result, we have to "lift" these +values out of the query's inference context and into something that +can be reapplied in our original inference context. We do that by +re-applying canonicalization, but to the query result.

    +

    Canonicalizing the query result

    +

    As discussed in the parent section, most trait queries wind up +with a result that brings together a "certainty value" certainty, a +result substitution var_values, and some region constraints. To +create this, we wind up re-using the substitution S that we created +when first instantiating our query. To refresh your memory, we had a query

    +
    for<T,L,T> { ?0: Foo<'?1, ?2> }
    +
    +

    for which we made a substutition S:

    +
    S = [?A, '?B, ?C]
    +
    +

    We then did some work which unified some of those variables with other things. +If we "refresh" S with the latest results, we get:

    +
    S = [Vec<?E>, '?D, ?E]
    +
    +

    These are precisely the new values for the three input variables from +our original query. Note though that they include some new variables +(like ?E). We can make those go away by canonicalizing again! We don't +just canonicalize S, though, we canonicalize the whole query response QR:

    +
    QR = {
    +    certainty: Proven,             // or whatever
    +    var_values: [Vec<?E>, '?D, ?E] // this is S
    +    region_constraints: [?E: '?D], // from the impl
    +    value: (),                     // for our purposes, just (), but
    +                                   // in some cases this might have
    +                                   // a type or other info
    +}
    +
    +

    The result would be as follows:

    +
    Canonical(QR) = for<T, L> {
    +    certainty: Proven,
    +    var_values: [Vec<?0>, '?1, ?0]
    +    region_constraints: [?0: '?1],
    +    value: (),
    +}
    +
    +

    (One subtle point: when we canonicalize the query result, we do not +use any special treatment for free lifetimes. Note that both +references to '?D, for example, were converted into the same +canonical variable (?1). This is in contrast to the original query, +where we canonicalized every free lifetime into a fresh canonical +variable.)

    +

    Now, this result must be reapplied in each context where needed.

    +

    Processing the canonicalized query result

    +

    In the previous section we produced a canonical query result. We now have +to apply that result in our original context. If you recall, way back in the +beginning, we were trying to prove this query:

    +
    ?A: Foo<'static, ?B>
    +
    +

    We canonicalized that into this:

    +
    for<T,L,T> { ?0: Foo<'?1, ?2> }
    +
    +

    and now we got back a canonical response:

    +
    for<T, L> {
    +    certainty: Proven,
    +    var_values: [Vec<?0>, '?1, ?0]
    +    region_constraints: [?0: '?1],
    +    value: (),
    +}
    +
    +

    We now want to apply that response to our context. Conceptually, how +we do that is to (a) instantiate each of the canonical variables in +the result with a fresh inference variable, (b) unify the values in +the result with the original values, and then (c) record the region +constraints for later. Doing step (a) would yield a result of

    +
    {
    +      certainty: Proven,
    +      var_values: [Vec<?C>, '?D, ?C]
    +                       ^^   ^^^ fresh inference variables
    +      region_constraints: [?C: '?D],
    +      value: (),
    +}
    +
    +

    Step (b) would then unify:

    +
    ?A with Vec<?C>
    +'static with '?D
    +?B with ?C
    +
    +

    And finally the region constraint of ?C: 'static would be recorded +for later verification.

    +

    (What we actually do is a mildly optimized variant of that: Rather +than eagerly instantiating all of the canonical values in the result +with variables, we instead walk the vector of values, looking for +cases where the value is just a canonical variable. In our example, +values[2] is ?C, so that means we can deduce that ?C := ?B and +'?D := 'static. This gives us a partial set of values. Anything for +which we do not find a value, we create an inference variable.)

    +

    Trait solving (new)

    +

    This chapter describes how trait solving works with the new WIP solver located in +rustc_trait_selection/solve. Feel free to also look at the docs for +the current solver and the chalk solver.

    +

    Core concepts

    +

    The goal of the trait system is to check whether a given trait bound is satisfied. +Most notably when typechecking the body of - potentially generic - functions. +For example:

    +
    #![allow(unused)]
    +fn main() {
    +fn uses_vec_clone<T: Clone>(x: Vec<T>) -> (Vec<T>, Vec<T>) {
    +    (x.clone(), x)
    +}
    +}
    +

    Here the call to x.clone() requires us to prove that Vec<T> implements Clone given +the assumption that T: Clone is true. We can assume T: Clone as that will be proven by +callers of this function.

    +

    The concept of "prove the Vec<T>: Clone with the assumption T: Clone" is called a Goal. +Both Vec<T>: Clone and T: Clone are represented using Predicate. There are other +predicates, most notably equality bounds on associated items: <Vec<T> as IntoIterator>::Item == T. +See the PredicateKind enum for an exhaustive list. A Goal is represented as the predicate we +have to prove and the param_env in which this predicate has to hold.

    +

    We prove goals by checking whether each possible Candidate applies for the given goal by +recursively proving its nested goals. For a list of possible candidates with examples, look at +CandidateSource. The most important candidates are Impl candidates, i.e. trait implementations +written by the user, and ParamEnv candidates, i.e. assumptions in our current environment.

    +

    Looking at the above example, to prove Vec<T>: Clone we first use +impl<T: Clone> Clone for Vec<T>. To use this impl we have to prove the nested +goal that T: Clone holds. This can use the assumption T: Clone from the ParamEnv +which does not have any nested goals. Therefore Vec<T>: Clone holds.

    +

    The trait solver can either return success, ambiguity or an error as a CanonicalResponse. +For success and ambiguity it also returns constraints inference and region constraints.

    +

    Invariants of the type system

    +

    FIXME: This file talks about invariants of the type system as a whole, not only the solver

    +

    There are a lot of invariants - things the type system guarantees to be true at all times - +which are desirable or expected from other languages and type systems. Unfortunately, quite +a few of them do not hold in Rust right now. This is either a fundamental to its design or +caused by bugs and something that may change in the future.

    +

    It is important to know about the things you can assume while working on - and with - the +type system, so here's an incomplete and unofficial list of invariants of +the core type system:

    +
      +
    • ✅: this invariant mostly holds, with some weird exceptions, you can rely on it outside +of these cases
    • +
    • ❌: this invariant does not hold, either due to bugs or by design, you must not rely on +it for soundness or have to be incredibly careful when doing so
    • +
    +

    wf(X) implies wf(normalize(X))

    +

    If a type containing aliases is well-formed, it should also be +well-formed after normalizing said aliases. We rely on this as +otherwise we would have to re-check for well-formedness for these +types.

    +

    Structural equality modulo regions implies semantic equality ✅

    +

    If you have a some type and equate it to itself after replacing any regions with unique +inference variables in both the lhs and rhs, the now potentially structurally different +types should still be equal to each other.

    +

    Needed to prevent goals from succeeding in HIR typeck and then failing in MIR borrowck. +If this invariant is broken MIR typeck ends up failing with an ICE.

    +

    Applying inference results from a goal does not change its result ❌

    +

    TODO: this invariant is formulated in a weird way and needs to be elaborated. +Pretty much: I would like this check to only fail if there's a solver bug: +https://github.com/rust-lang/rust/blob/2ffeb4636b4ae376f716dc4378a7efb37632dc2d/compiler/rustc_trait_selection/src/solve/eval_ctxt.rs#L391-L407

    +

    If we prove some goal/equate types/whatever, apply the resulting inference constraints, +and then redo the original action, the result should be the same.

    +

    This unfortunately does not hold - at least in the new solver - due to a few annoying reasons.

    +

    The trait solver has to be locally sound

    +

    This means that we must never return success for goals for which no impl exists. That would +mean we assume a trait is implemented even though it is not, which is very likely to result in +actual unsoundness. When using where-bounds to prove a goal, the impl will be provided by the +user of the item.

    +

    This invariant only holds if we check region constraints. As we do not check region constraints +during implicit negative overlap check in coherence, this invariant is broken there. As this check +relies on completeness of the trait solver, it is not able to use the current region constraints +check - InferCtxt::resolve_regions - as its handling of type outlives goals is incomplete.

    +

    Normalization of semantically equal aliases in empty environments results in a unique type ✅

    +

    Normalization for alias types/consts has to have a unique result. Otherwise we can easily +implement transmute in safe code. Given the following function, we have to make sure that +the input and output types always get normalized to the same concrete type.

    +
    #![allow(unused)]
    +fn main() {
    +fn foo<T: Trait>(
    +    x: <T as Trait>::Assoc
    +) -> <T as Trait>::Assoc {
    +    x
    +}
    +}
    +

    Many of the currently known unsound issues end up relying on this invariant being broken. +It is however very difficult to imagine a sound type system without this invariant, so +the issue is that the invariant is broken, not that we incorrectly rely on it.

    +

    Generic goals and their instantiations have the same result ✅

    +

    Pretty much: If we successfully typecheck a generic function concrete instantiations +of that function should also typeck. We should not get errors post-monomorphization. +We can however get overflow errors at that point.

    +

    TODO: example for overflow error post-monomorphization

    +

    This invariant is relied on to allow the normalization of generic aliases. Breaking +it can easily result in unsoundness, e.g. #57893

    +

    Trait goals in empty environments are proven by a unique impl ✅

    +

    If a trait goal holds with an empty environment, there should be a unique impl, +either user-defined or builtin, which is used to prove that goal. This is +necessary to select a unique method.

    +

    We do however break this invariant in few cases, some of which are due to bugs, +some by design:

    +
      +
    • marker traits are allowed to overlap as they do not have associated items
    • +
    • specialization allows specializing impls to overlap with their parent
    • +
    • the builtin trait object trait implementation can overlap with a user-defined impl: +#57893
    • +
    +

    The type system is complete ❌

    +

    The type system is not complete, it often adds unnecessary inference constraints, and errors +even though the goal could hold.

    +
      +
    • method selection
    • +
    • opaque type inference
    • +
    • handling type outlives constraints
    • +
    • preferring ParamEnv candidates over Impl candidates during candidate selection +in the trait solver
    • +
    +

    The type system is complete during the implicit negative overlap check in coherence ✅

    +

    For more on overlap checking: coherence

    +

    During the implicit negative overlap check in coherence we must never return error for +goals which can be proven. This would allow for overlapping impls with potentially different +associated items, breaking a bunch of other invariants.

    +

    This invariant is currently broken in many different ways while actually something we rely on. +We have to be careful as it is quite easy to break:

    +
      +
    • generalization of aliases
    • +
    • generalization during subtyping binders (luckily not exploitable in coherence)
    • +
    +

    Trait solving must be (free) lifetime agnostic ✅

    +

    Trait solving during codegen should have the same result as during typeck. As we erase +all free regions during codegen we must not rely on them during typeck. A noteworthy example +is special behavior for 'static.

    +

    We also have to be careful with relying on equality of regions in the trait solver. +This is fine for codegen, as we treat all erased regions as equal. We can however +lose equality information from HIR to MIR typeck.

    +

    The new solver "uniquifies regions" during canonicalization, canonicalizing u32: Trait<'x, 'x> +as exists<'0, '1> u32: Trait<'0, '1>, to make it harder to rely on this property.

    +

    Removing ambiguity makes strictly more things compile ❌

    +

    Ideally we should not rely on ambiguity for things to compile. +Not doing that will cause future improvements to be breaking changes.

    +

    Due to incompleteness this is not the case and improving inference can result in inference +changes, breaking existing projects.

    +

    Semantic equality implies structural equality ✅

    +

    Two types being equal in the type system must mean that they have the +same TypeId after instantiating their generic parameters with concrete +arguments. This currently does not hold: #97156.

    +

    The solver

    +

    Also consider reading the documentation for the recursive solver in chalk +as it is very similar to this implementation and also talks about limitations of this +approach.

    +

    A rough walkthrough

    +

    The entry-point of the solver is InferCtxtEvalExt::evaluate_root_goal. This +function sets up the root EvalCtxt and then calls EvalCtxt::evaluate_goal, +to actually enter the trait solver.

    +

    EvalCtxt::evaluate_goal handles canonicalization, caching, +overflow, and solver cycles. Once that is done, it creates a nested EvalCtxt with a +separate local InferCtxt and calls EvalCtxt::compute_goal, which is responsible for the +'actual solver behavior'. We match on the PredicateKind, delegating to a separate function +for each one.

    +

    For trait goals, such a Vec<T>: Clone, EvalCtxt::compute_trait_goal has +to collect all the possible ways this goal can be proven via +EvalCtxt::assemble_and_evaluate_candidates. Each candidate is handled in +a separate "probe", to not leak inference constraints to the other candidates. +We then try to merge the assembled candidates via EvalCtxt::merge_candidates.

    +

    Important concepts and design patterns

    +

    EvalCtxt::add_goal

    +

    To prove nested goals, we don't directly call EvalCtxt::compute_goal, but instead +add the goal to the EvalCtxt with EvalCtxt::all_goal. We then prove all nested +goals together in either EvalCtxt::try_evaluate_added_goals or +EvalCtxt::evaluate_added_goals_and_make_canonical_response. This allows us to handle +inference constraints from later goals.

    +

    E.g. if we have both ?x: Debug and (): ConstrainToU8<?x> as nested goals, +then proving ?x: Debug is initially ambiguous, but after proving (): ConstrainToU8<?x> +we constrain ?x to u8 and proving u8: Debug succeeds.

    +

    Matching on TyKind

    +

    We lazily normalize types in the solver, so we always have to assume that any types +and constants are potentially unnormalized. This means that matching on TyKind can easily +be incorrect.

    +

    We handle normalization in two different ways. When proving Trait goals when normalizing +associated types, we separately assemble candidates depending on whether they structurally +match the self type. Candidates which match on the self type are handled in +EvalCtxt::assemble_candidates_via_self_ty which recurses via +EvalCtxt::assemble_candidates_after_normalizing_self_ty, which normalizes the self type +by one level. In all other cases we have to match on a TyKind we first use +EvalCtxt::try_normalize_ty to normalize the type as much as possible.

    +

    Higher ranked goals

    +

    In case the goal is higher-ranked, e.g. for<'a> F: FnOnce(&'a ()), EvalCtxt::compute_goal +eagerly instantiates 'a with a placeholder and then recursively proves +F: FnOnce(&'!a ()) as a nested goal.

    +

    Dealing with choice

    +

    Some goals can be proven in multiple ways. In these cases we try each option in +a separate "probe" and then attempt to merge the resulting responses by using +EvalCtxt::try_merge_responses. If merging the responses fails, we use +EvalCtxt::flounder instead, returning ambiguity. For some goals, we try to +incompletely prefer some choices over others in case EvalCtxt::try_merge_responses +fails.

    +

    Learning more

    +

    The solver should be fairly self-contained. I hope that the above information provides a +good foundation when looking at the code itself. Please reach out on zulip if you get stuck +while doing so or there are some quirks and design decisions which were unclear and deserve +better comments or should be mentioned here.

    +

    Canonicalization

    +

    Canonicalization is the process of isolating a value from its context and is necessary +for global caching of goals which include inference variables.

    +

    The idea is that given the goals u32: Trait<?x> and u32: Trait<?y>, where ?x and ?y +are two different currently unconstrained inference variables, we should get the same result +for both goals. We can therefore prove the canonical query exists<T> u32: Trait<T> once +and reuse the result.

    +

    Let's first go over the way canonical queries work and then dive into the specifics of +how canonicalization works.

    +

    A walkthrough of canonical queries

    +

    To make this a bit easier, let's use the trait goal u32: Trait<?x> as an example with the +assumption that the only relevant impl is impl<T> Trait<Vec<T>> for u32.

    +

    Canonicalizing the input

    +

    We start by canonicalizing the goal, replacing inference variables with existential and +placeholders with universal bound variables. This would result in the canonical goal +exists<T> u32: Trait<T>.

    +

    We remember the original values of all bound variables in the original context. Here this would +map T back to ?x. These original values are used later on when dealing with the query +response.

    +

    We now call the canonical query with the canonical goal.

    +

    Instantiating the canonical goal inside of the query

    +

    To actually try to prove the canonical goal we start by instantiating the bound variables with +inference variables and placeholders again.

    +

    This happens inside of the query in a completely separate InferCtxt. Inside of the query we +now have a goal u32: Trait<?0>. We also remember which value we've used to instantiate the bound +variables in the canonical goal, which maps T to ?0.

    +

    We now compute the goal u32: Trait<?0> and figure out that this holds, but we've constrained +?0 to Vec<?1>. We finally convert this result to something useful to the caller.

    +

    Canonicalizing the query response

    +

    We have to return to the caller both whether the goal holds, and the inference constraints +from inside of the query.

    +

    To return the inference results to the caller we canonicalize the mapping from bound variables +to the instantiated values in the query. This means that the query response is Certainty::Yes +and a mapping from T to exists<U> Vec<U>.

    +

    Instantiating the query response

    +

    The caller now has to apply the constraints returned by the query. For this they first +instantiate the bound variables of the canonical response with inference variables and +placeholders again, so the mapping in the response is now from T to Vec<?z>.

    +

    It now equates the original value of T (?x) with the value for T in the +response (Vec<?z>), which correctly constrains ?x to Vec<?z>.

    +

    ExternalConstraints

    +

    Computing a trait goal may not only constrain inference variables, it can also add region +obligations, e.g. given a goal (): AOutlivesB<'a, 'b> we would like to return the fact that +'a: 'b has to hold.

    +

    This is done by not only returning the mapping from bound variables to the instantiated values +from the query but also extracting additional ExternalConstraints from the InferCtxt context +while building the response.

    +

    How exactly does canonicalization work

    +

    TODO: link to code once the PR lands and elaborate

    +
      +
    • types and consts: infer to existentially bound var, placeholder to universally bound var, +considering universes
    • +
    • generic parameters in the input get treated as placeholders in the root universe
    • +
    • all regions in the input get all mapped to existentially bound vars and we "uniquify" them. +&'a (): Trait<'a> gets canonicalized to exists<'0, '1> &'0 (): Trait<'1>. We do not care +about their universes and simply put all regions into the highest universe of the input.
    • +
    • in the output everything in a universe of the caller gets put into the root universe and only +gets its correct universe when we unify the var values with the orig values of the caller
    • +
    • we do not uniquify regions in the response and don't canonicalize 'static
    • +
    +

    Coinduction

    +

    The trait solver may use coinduction when proving goals. +Coinduction is fairly subtle so we're giving it its own chapter.

    +

    Coinduction and induction

    +

    With induction, we recursively apply proofs until we end up with a finite proof tree. +Consider the example of Vec<Vec<Vec<u32>>>: Debug which results in the following tree.

    +
      +
    • Vec<Vec<Vec<u32>>>: Debug +
        +
      • Vec<Vec<u32>>: Debug +
          +
        • Vec<u32>: Debug +
            +
          • u32: Debug
          • +
          +
        • +
        +
      • +
      +
    • +
    +

    This tree is finite. But not all goals we would want to hold have finite proof trees, +consider the following example:

    +
    #![allow(unused)]
    +fn main() {
    +struct List<T> {
    +    value: T,
    +    next: Option<Box<List<T>>>,
    +}
    +}
    +

    For List<T>: Send to hold all its fields have to recursively implement Send as well. +This would result in the following proof tree:

    +
      +
    • List<T>: Send +
        +
      • T: Send
      • +
      • Option<Box<List<T>>>: Send +
          +
        • Box<List<T>>: Send +
            +
          • List<T>: Send +
              +
            • T: Send
            • +
            • Option<Box<List<T>>>: Send +
                +
              • Box<List<T>>: Send +
                  +
                • ...
                • +
                +
              • +
              +
            • +
            +
          • +
          +
        • +
        +
      • +
      +
    • +
    +

    This tree would be infinitely large which is exactly what coinduction is about.

    +
    +

    To inductively prove a goal you need to provide a finite proof tree for it. +To coinductively prove a goal the provided proof tree may be infinite.

    +
    +

    Why is coinduction correct

    +

    When checking whether some trait goals holds, we're asking "does there exist an impl +which satisfies this bound". Even if are infinite chains of nested goals, we still have a +unique impl which should be used.

    +

    How to implement coinduction

    +

    While our implementation can not check for coinduction by trying to construct an infinite +tree as that would take infinite resources, it still makes sense to think of coinduction +from this perspective.

    +

    As we cannot check for infinite trees, we instead search for patterns for which we know that +they would result in an infinite proof tree. The currently pattern we detect are (canonical) +cycles. If T: Send relies on T: Send then it's pretty clear that this will just go on forever.

    +

    With cycles we have to be careful with caching. Because of canonicalization of regions and +inference variables encountering a cycle doesn't mean that we would get an infinite proof tree. +Looking at the following example:

    +
    #![allow(unused)]
    +fn main() {
    +trait Foo {}
    +struct Wrapper<T>(T);
    +
    +impl<T> Foo for Wrapper<Wrapper<T>>
    +where
    +    Wrapper<T>: Foo
    +{} 
    +}
    +

    Proving Wrapper<?0>: Foo uses the impl impl<T> Foo for Wrapper<Wrapper<T>> which constrains +?0 to Wrapper<?1> and then requires Wrapper<?1>: Foo. Due to canonicalization this would be +detected as a cycle.

    +

    The idea to solve is to return a provisional result whenever we detect a cycle and repeatedly +retry goals until the provisional result is equal to the final result of that goal. We +start out by using Yes with no constraints as the result and then update it to the result of +the previous iteration whenever we have to rerun.

    +

    TODO: elaborate here. We use the same approach as chalk for coinductive cycles. +Note that the treatment for inductive cycles currently differs by simply returning Overflow. +See the relevant chapters in the chalk book.

    +

    Future work

    +

    We currently only consider auto-traits, Sized, and WF-goals to be coinductive. +In the future we pretty much intend for all goals to be coinductive. +Lets first elaborate on why allowing more coinductive proofs is even desirable.

    +

    Recursive data types already rely on coinduction...

    +

    ...they just tend to avoid them in the trait solver.

    +
    #![allow(unused)]
    +fn main() {
    +enum List<T> {
    +    Nil,
    +    Succ(T, Box<List<T>>),
    +}
    +
    +impl<T: Clone> Clone for List<T> {
    +    fn clone(&self) -> Self {
    +        match self {
    +            List::Nil => List::Nil,
    +            List::Succ(head, tail) => List::Succ(head.clone(), tail.clone()),
    +        }
    +    }
    +}
    +}
    +

    We are using tail.clone() in this impl. For this we have to prove Box<List<T>>: Clone +which requires List<T>: Clone but that relies on the impl which we are currently checking. +By adding that requirement to the where-clauses of the impl, which is what we would +do with perfect derive, we move that cycle into the trait solver and get an error.

    +

    Recursive data types

    +

    We also need coinduction to reason about recursive types containing projections, +e.g. the following currently fails to compile even though it should be valid.

    +
    #![allow(unused)]
    +fn main() {
    +use std::borrow::Cow;
    +pub struct Foo<'a>(Cow<'a, [Foo<'a>]>);
    +}
    +

    This issue has been known since at least 2015, see +#23714 if you want to know more.

    +

    Explicitly checked implied bounds

    +

    When checking an impl, we assume that the types in the impl headers are well-formed. +This means that when using instantiating the impl we have to prove that's actually the case. +#100051 shows that this is not the case. +To fix this, we have to add WF predicates for the types in impl headers. +Without coinduction for all traits, this even breaks core.

    +
    #![allow(unused)]
    +fn main() {
    +trait FromResidual<R> {}
    +trait Try: FromResidual<<Self as Try>::Residual> {
    +    type Residual;
    +}
    +
    +struct Ready<T>(T);
    +impl<T> Try for Ready<T> {
    +    type Residual = Ready<()>;
    +}
    +impl<T> FromResidual<<Ready<T> as Try>::Residual> for Ready<T> {}
    +}
    +

    When checking that the impl of FromResidual is well formed we get the following cycle:

    +

    The impl is well formed if <Ready<T> as Try>::Residual and Ready<T> are well formed.

    +
      +
    • wf(<Ready<T> as Try>::Residual) requires
    • +
    • Ready<T>: Try, which requires because of the super trait
    • +
    • Ready<T>: FromResidual<Ready<T> as Try>::Residual>, because of implied bounds on impl
    • +
    • wf(<Ready<T> as Try>::Residual) :tada: cycle
    • +
    +

    Issues when extending coinduction to more goals

    +

    There are some additional issues to keep in mind when extending coinduction. +The issues here are not relevant for the current solver.

    +

    Implied super trait bounds

    +

    Our trait system currently treats super traits, e.g. trait Trait: SuperTrait, +by 1) requiring that SuperTrait has to hold for all types which implement Trait, +and 2) assuming SuperTrait holds if Trait holds.

    +

    Relying on 2) while proving 1) is unsound. This can only be observed in case of +coinductive cycles. Without cycles, whenever we rely on 2) we must have also +proven 1) without relying on 2) for the used impl of Trait.

    +
    #![allow(unused)]
    +fn main() {
    +trait Trait: SuperTrait {}
    +
    +impl<T: Trait> Trait for T {}
    +
    +// Keeping the current setup for coinduction
    +// would allow this compile. Uff :<
    +fn sup<T: SuperTrait>() {}
    +fn requires_trait<T: Trait>() { sup::<T>() }
    +fn generic<T>() { requires_trait::<T>() }
    +}
    +

    This is not really fundamental to coinduction but rather an existing property +which is made unsound because of it.

    +
    Possible solutions
    +

    The easiest way to solve this would be to completely remove 2) and always elaborate +T: Trait to T: Trait and T: SuperTrait outside of the trait solver. +This would allow us to also remove 1), but as we still have to prove ordinary +where-bounds on traits, that's just additional work.

    +

    While one could imagine ways to disable cyclic uses of 2) when checking 1), +at least the ideas of myself - @lcnr - are all far to complex to be reasonable.

    +

    normalizes_to goals and progress

    +

    A normalizes_to goal represents the requirement that <T as Trait>::Assoc normalizes +to some U. This is achieved by defacto first normalizing <T as Trait>::Assoc and then +equating the resulting type with U. It should be a mapping as each projection should normalize +to exactly one type. By simply allowing infinite proof trees, we would get the following behavior:

    +
    #![allow(unused)]
    +fn main() {
    +trait Trait {
    +    type Assoc;
    +}
    +
    +impl Trait for () {
    +    type Assoc = <() as Trait>::Assoc;
    +}
    +}
    +

    If we now compute normalizes_to(<() as Trait>::Assoc, Vec<u32>), we would resolve the impl +and get the associated type <() as Trait>::Assoc. We then equate that with the expected type, +causing us to check normalizes_to(<() as Trait>::Assoc, Vec<u32>) again. +This just goes on forever, resulting in an infinite proof tree.

    +

    This means that <() as Trait>::Assoc would be equal to any other type which is unsound.

    +
    How to solve this
    +

    WARNING: THIS IS SUBTLE AND MIGHT BE WRONG

    +

    Unlike trait goals, normalizes_to has to be productive1. A normalizes_to goal +is productive once the projection normalizes to a rigid type constructor, +so <() as Trait>::Assoc normalizing to Vec<<() as Trait>::Assoc> would be productive.

    +

    A normalizes_to goal has two kinds of nested goals. Nested requirements needed to actually +normalize the projection, and the equality between the normalized projection and the +expected type. Only the equality has to be productive. A branch in the proof tree is productive +if it is either finite, or contains at least one normalizes_to where the alias is resolved +to a rigid type constructor.

    +

    Alternatively, we could simply always treat the equate branch of normalizes_to as inductive. +Any cycles should result in infinite types, which aren't supported anyways and would only +result in overflow when deeply normalizing for codegen.

    +

    experimentation and examples: https://hackmd.io/-8p0AHnzSq2VAE6HE_wX-w?view

    +

    Another attempt at a summary.

    +
      +
    • in projection eq, we must make progress with constraining the rhs
    • +
    • a cycle is only ok if while equating we have a rigid ty on the lhs after norm at least once
    • +
    • cycles outside of the recursive eq call of normalizes_to are always fine
    • +
    +
    +
    1. +

      related: https://coq.inria.fr/refman/language/core/coinductive.html#top-level-definitions-of-corecursive-functions

      +
    2. +

    Caching in the new trait solver

    +

    Caching results of the trait solver is necessary for performance. +We have to make sure that it is sound. Caching is handled by the +SearchGraph

    +

    The global cache

    +

    At its core, the cache is fairly straightforward. When evaluating a goal, we +check whether it's in the global cache. If so, we reuse that entry. If not, we +compute the goal and then store its result in the cache.

    +

    To handle incremental compilation the computation of a goal happens inside of +DepGraph::with_anon_task which creates a new DepNode which depends on all queries +used inside of this computation. When accessing the global cache we then read this +DepNode, manually adding a dependency edge to all the queries used: source.

    +

    Dealing with overflow

    +

    Hitting the recursion limit is not fatal in the new trait solver but instead simply +causes it to return ambiguity: source. Whether we hit the recursion limit +can therefore change the result without resulting in a compilation failure. This +means we must consider the remaining available depth when accessing a cache result.

    +

    We do this by storing more information in the cache entry. For goals whose evaluation +did not reach the recursion limit, we simply store its reached depth: source. +These results can freely be used as long as the current available_depth is higher than +its reached_depth: source. We then update the reached depth of the +current goal to make sure that whether we've used the global cache entry is not +observable: source.

    +

    For goals which reach the recursion limit we currently only use the cached result if the +available depth exactly matches the depth of the entry. The cache entry for each goal +therefore contains a separate result for each remaining depth: source.1

    +

    Handling cycles

    +

    The trait solver has to support cycles. These cycles are either inductive or coinductive, +depending on the participating goals. See the chapter on coinduction for more details. +We distinguish between the cycle heads and the cycle root: a stack entry is a +cycle head if it recursively accessed. The root is the deepest goal on the stack which +is involved in any cycle. Given the following dependency tree, A and B are both cycle +heads, while only A is a root.

    +
    graph TB
    +    A --> B
    +    B --> C
    +    C --> B
    +    C --> A
    +
    +

    The result of cycle participants depends on the result of goals still on the stack. +However, we are currently computing that result, so its result is still unknown. This is +handled by evaluating cycle heads until we reach a fixpoint. In the first iteration, we +return either success or overflow with no constraints, depending on whether the cycle is +coinductive: source. After evaluating the head of a cycle, we +check whether its provisional_result is equal to the result of this iteration. If so, +we've finished evaluating this cycle and return its result. If not, we update the provisional +result and reevaluate the goal: source. After the first iteration it does not +matter whether cycles are coinductive or inductive. We always use the provisional result.

    +

    Only caching cycle roots

    +

    We cannot move the result of any cycle participant to the global cache until we've +finished evaluating the cycle root. However, even after we've completely evaluated the +cycle, we are still forced to discard the result of all participants apart from the root +itself.

    +

    We track the query dependencies of all global cache entries. This causes the caching of +cycle participants to be non-trivial. We cannot simply reuse the DepNode of the cycle +root.2 If we have a cycle A -> B -> A, then the DepNode for A contains a dependency +from A -> B. Reusing this entry for B may break if the source is changed. The B -> A +edge may not exist anymore and A may have been completely removed. This can easily result +in an ICE.

    +

    However, it's even worse as the result of a cycle can change depending on which goal is +the root: example. This forces us to weaken caching even further. +We must not use a cache entry of a cycle root, if there exists a stack entry, which was +a participant of its cycle involving that root. We do this by storing all cycle participants +of a given root in its global cache entry and checking that it contains no element of the +stack: source.

    +

    The provisional cache

    +

    TODO: write this :3

    +
      +
    • stack dependence of provisional results
    • +
    • edge case: provisional cache impacts behavior
    • +
    +
    +
    1. +

      This is overly restrictive: if all nested goals return the overflow response with some +available depth n, then their result should be the same for any depths smaller than n. +We can implement this optimization in the future.

      +
    2. +
    3. +

      summarizing the relevant zulip thread

      +
    4. +

    Proof trees

    +

    While the trait solver itself only returns whether a goal holds and the necessary +constraints, we sometimes also want to know what happened while trying to prove +it. While the trait solver should generally be treated as a black box by the rest +of the compiler, we cannot completely ignore its internals and provide "proof trees" +as an interface for this. To use them you implement the ProofTreeVisitor trait, +see its existing implementations for examples. The most notable uses are to compute +the intercrate ambiguity causes for coherence errors, +improving trait solver errors, and +eagerly inferring closure signatures.

    +

    Computing proof trees

    +

    The trait solver uses Canonicalization and uses completely separate InferCtxt for +each nested goal. Both diagnostics and auto-traits in rustdoc need to correctly +handle "looking into nested goals". Given a goal like Vec<Vec<?x>>: Debug, we +canonicalize to exists<T0> Vec<Vec<T0>>: Debug, instantiate that goal as +Vec<Vec<?0>>: Debug, get a nested goal Vec<?0>: Debug, canonicalize this to get +exists<T0> Vec<T0>: Debug, instantiate this as Vec<?0>: Debug which then results +in a nested ?0: Debug goal which is ambiguous.

    +

    We compute proof trees by passing a ProofTreeBuilder to the search graph which is +converting the evaluation steps of the trait solver into a tree. When storing any +data using inference variables or placeholders, the data is canonicalized together +with the list of all unconstrained inference variables created during this computation. +This CanonicalState is then instantiated in the parent inference context while +walking the proof tree, using the list of inference variables to connect all the +canonicalized values created during this evaluation.

    +

    Debugging the solver

    +

    We previously also tried to use proof trees to debug the solver implementation. This +has different design requirements than analyzing it programmatically. The recommended +way to debug the trait solver is by using tracing. The trait solver only uses the +debug tracing level for its general 'shape' and trace for additional detail. +RUSTC_LOG=rustc_next_trait_solver=debug therefore gives you a general outline +and RUSTC_LOG=rustc_next_trait_solver=trace can then be used if more precise +information is required.

    +

    Opaque types in the new solver

    +

    The way opaque types are handled in the new solver differs from the old implementation. +This should be a self-contained explanation of the behavior in the new solver.

    +

    opaques are alias types

    +

    Opaque types are treated the same as other aliases, most notabily associated types, +whenever possible. There should be as few divergences in behavior as possible.

    +

    This is desirable, as they are very similar to other alias types, in that they can be +normalized to their hidden type and also have the same requirements for completeness. +Treating them this way also reduces the complexity of the type system by sharing code. +Having to deal with opaque types separately results in more complex rules and new kinds +of interactions. As we need to treat them like other aliases in the implicit-negative +mode, having significant differences between modes also adds complexity.

    +

    open question: is there an alternative approach here, maybe by treating them more like rigid +types with more limited places to instantiate them? they would still have to be ordinary +aliases during coherence

    +

    normalizes-to for opaques

    +

    source

    +

    normalizes-to is used to define the one-step normalization behavior for aliases in the new +solver: <<T as IdInner>::Assoc as IdOuter>::Assoc first normalizes to <T as IdInner>::Assoc +which then normalizes to T. It takes both the AliasTy which is getting normalized and the +expected Term. To use normalizes-to for actual normalization, the expected term can simply +be an unconstrained inference variable.

    +

    For opaque types in the defining scope and in the implicit-negative coherence mode, this is +always done in two steps. Outside of the defining scope normalizes-to for opaques always +returns Err(NoSolution).

    +

    We start by trying to assign the expected type as a hidden type.

    +

    In the implicit-negative coherence mode, this currently always results in ambiguity without +interacting with the opaque types storage. We could instead add allow 'defining' all opaque types, +discarding their inferred types at the end, changing the behavior of an opaque type is used +multiple times during coherence: example

    +

    Inside of the defining scope we start by checking whether the type and const arguments of the +opaque are all placeholders: source. If this check is ambiguous, +return ambiguity, if it fails, return Err(NoSolution). This check ignores regions which are +only checked at the end of borrowck. If it succeeds, continue.

    +

    We then check whether we're able to semantically unify the generic arguments of the opaque +with the arguments of any opaque type already in the opaque types storage. If so, we unify the +previously stored type with the expected type of this normalizes-to call: source1.

    +

    If not, we insert the expected type in the opaque types storage: source2. +Finally, we check whether the item bounds of the opaque hold for the expected type: +source.

    +

    using alias-bounds of normalizable aliases

    +

    https://github.com/rust-lang/trait-system-refactor-initiative/issues/77

    +

    Using an AliasBound candidate for normalizable aliases is generally not possible as an +associated type can have stronger bounds then the resulting type when normalizing via a +ParamEnv candidate.

    +

    These candidates would change our exact normalization strategy to be user-facing. It is otherwise +pretty much unobservable whether we eagerly normalize. Where we normalize is something we likely +want to change that after removing support for the old solver, so that would be undesirable.

    +

    opaque types can be defined anywhere

    +

    Opaque types in their defining-scope can be defined anywhere, whether when simply relating types +or in the trait solver. This removes order dependence and incompleteness. Without this the result +of a goal can differ due to subtle reasons, e.g. whether we try to evaluate a goal using the +opaque before the first defining use of the opaque.

    +

    higher ranked opaque types in their defining scope

    +

    These are not supported and trying to define them right now should always error.

    +

    FIXME: Because looking up opaque types in the opaque type storage can now unify regions, +we have to eagerly check that the opaque types does not reference placeholders. We otherwise +end up leaking placeholders.

    +

    member constraints

    +

    The handling of member constraints does not change in the new solver. See the +relevant existing chapter for that.

    +

    calling methods on opaque types

    +

    FIXME: We need to continue to support calling methods on still unconstrained +opaque types in their defining scope. It's unclear how to best do this.

    +
    #![allow(unused)]
    +fn main() {
    +use std::future::Future;
    +use futures::FutureExt;
    +
    +fn go(i: usize) -> impl Future<Output = ()> + Send + 'static {
    +    async move {
    +        if i != 0 {
    +            // This returns `impl Future<Output = ()>` in its defining scope,
    +            // we don't know the concrete type of that opaque at this point.
    +            // Currently treats the opaque as a known type and succeeds, but
    +            // from the perspective of "easiest to soundly implement", it would
    +            // be good for this to be ambiguous.
    +            go(i - 1).boxed().await;
    +        }
    +    }
    +}
    +}
    +
    +
    1. +

      FIXME: this should ideally only result in a unique candidate given that we require the args to be placeholders and regions are always inference vars

      +
    2. +
    3. +

      FIXME: why do we check whether the expected type is rigid for this.

      +
    4. +

    Significant changes and quirks

    +

    While some of the items below are already mentioned separately, this page tracks the +main changes from the old trait system implementation. This also mentions some ways +in which the solver significantly diverges from an idealized implementation. This +document simplifies and ignores edge cases. It is recommended to add an implicit +"mostly" to each statement.

    +

    Canonicalization

    +

    The new solver uses canonicalization when evaluating nested goals. In case there +are possibly multiple candidates, each candidate is eagerly canonicalized. We then +attempt to merge their canonical responses. This differs from the old implementation +which does not use canonicalization inside of the trait system.

    +

    This has a some major impacts on the design of both solvers. Without using +canonicalization to stash the constraints of candidates, candidate selection has +to discard the constraints of each candidate, only applying the constraints by +reevaluating the candidate after it has been selected: source. +Without canonicalization it is also not possible to cache the inference constraints +from evaluating a goal. This causes the old implementation to have two systems: +evaluate and fulfill. Evaluation is cached, does not apply inference constraints +and is used when selecting candidates. Fulfillment applies inference and region +constraints is not cached and applies inference constraints.

    +

    By using canonicalization, the new implementation is able to merge evaluation and +fulfillment, avoiding complexity and subtle differences in behavior. It greatly +simplifies caching and prevents accidentally relying on untracked information. +It allows us to avoid reevaluating candidates after selection and enables us to merge +the responses of multiple candidates. However, canonicalizing goals during evaluation +forces the new implementation to use a fixpoint algorithm when encountering cycles +during trait solving: source.

    +

    Deferred alias equality

    +

    The new implementation emits AliasRelate goals when relating aliases while the +old implementation structurally relates the aliases instead. This enables the +new solver to stall equality until it is able to normalize the related aliases.

    +

    The behavior of the old solver is incomplete and relies on eager normalization +which replaces ambiguous aliases with inference variables. As this is +not possible for aliases containing bound variables, the old implementation does +not handle aliases inside of binders correctly, e.g. #102048. See the chapter on +normalization for more details.

    +

    Eagerly evaluating nested goals

    +

    The new implementation eagerly handles nested goals instead of returning +them to the caller. The old implementation does both. In evaluation nested +goals are eagerly handled, while fulfillment simply +returns them for later processing.

    +

    As the new implementation has to be able to eagerly handle nested goals for +candidate selection, always doing so reduces complexity. It may also enable +us to merge more candidates in the future.

    +

    Nested goals are evaluated until reaching a fixpoint

    +

    The new implementation always evaluates goals in a loop until reaching a fixpoint. +The old implementation only does so in fulfillment, but not in evaluation. +Always doing so strengthens inference and is reduces the order dependence of +the trait solver. See trait-system-refactor-initiative#102.

    +

    Proof trees and providing diagnostics information

    +

    The new implementation does not track diagnostics information directly, +instead providing proof trees which are used to lazily compute the +relevant information. This is not yet fully fleshed out and somewhat hacky. +The goal is to avoid tracking this information in the happy path to improve +performance and to avoid accidentally relying on diagnostics data for behavior.

    +

    Major quirks of the new implementation

    +

    Hiding impls if there are any env candidates

    +

    If there is at least one ParamEnv or AliasBound candidate to prove +some Trait goal, we discard all impl candidates for both Trait and +Projection goals: source. This prevents users from +using an impl which is entirely covered by a where-bound, matching the +behavior of the old implementation and avoiding some weird errors, +e.g. trait-system-refactor-initiative#76.

    +

    NormalizesTo goals are a function

    +

    See the normalization chapter. We replace the expected term with an unconstrained +inference variable before computing NormalizesTo goals to prevent it from affecting +normalization. This means that NormalizesTo goals are handled somewhat differently +from all other goal kinds and need some additional solver support. Most notably, +their ambiguous nested goals are returned to the caller which then evaluates them. +See #122687 for more details.

    +

    CoerceUnsized

    +

    CoerceUnsized is primarily concerned with data containers. When a struct +(typically, a smart pointer) implements CoerceUnsized, that means that the +data it points to is being unsized.

    +

    Some implementors of CoerceUnsized include:

    +
      +
    • &T
    • +
    • Arc<T>
    • +
    • Box<T>
    • +
    +

    This trait is (eventually) intended to be implemented by user-written smart +pointers, and there are rules about when a type is allowed to implement +CoerceUnsized that are explained in the trait's documentation.

    +

    Unsize

    +

    To contrast, the Unsize trait is concerned the actual types that are allowed +to be unsized.

    +

    This is not intended to be implemented by users ever, since Unsize does not +instruct the compiler (namely codegen) how to unsize a type, just whether it +is allowed to be unsized. This is paired somewhat intimately with codegen +which must understand how types are represented and unsized.

    +

    Primitive unsizing implementations

    +

    Built-in implementations are provided for:

    +
      +
    • T -> dyn Trait + 'a when T: Trait (and T: Sized + 'a, and Trait +is dyn-compatible1).
    • +
    • [T; N] -> [T]
    • +
    +

    Structural implementations

    +

    There is one implementation of Unsize which can be thought of as +structural:

    +
      +
    • Struct<.., Pi, .., Pj, ..>: Unsize<Struct<.., Ui, .., Uj, ..>> given +TailField<Pi, .., Pj>: Unsize<Ui, .. Uj>, which allows the tail field of a +struct to be unsized if it is the only field that mentions generic parameters +Pi, .., Pj (which don't need to be contiguous).
    • +
    +

    The rules for struct unsizing are slightly complicated, since they +may allow more than one parameter to be changed (not necessarily unsized) and +are best stated in terms of the tail field of the struct.

    +

    (Tuple unsizing was previously implemented behind the feature gate +unsized_tuple_coercion, but the implementation was removed by #137728.)

    +

    Upcasting implementations

    +

    Two things are called "upcasting" internally:

    +
      +
    1. True upcasting dyn SubTrait -> dyn SuperTrait (this also allows +dropping auto traits and adjusting lifetimes, as below).
    2. +
    3. Dropping auto traits and adjusting the lifetimes of dyn trait +without changing the principal2: +dyn Trait + AutoTraits... + 'a -> dyn Trait + NewAutoTraits... + 'b +when AutoTraitsNewAutoTraits, and 'a: 'b.
    4. +
    +

    These may seem like different operations, since (1.) includes adjusting the +vtable of a dyn trait, while (2.) is a no-op. However, to the type system, +these are handled with much the same code.

    +

    This built-in implementation of Unsize is the most involved, particularly +after it was reworked to +support the complexities of associated types.

    +

    Specifically, the upcasting algorithm involves: For each supertrait of the +source dyn trait's principal (including itself)...

    +
      +
    1. Unify the super trait ref with the principal of the target (making sure +we only ever upcast to a true supertrait, and never via an impl).
    2. +
    3. For every auto trait in the target, check that it's present in the source +(allowing us to drop auto traits, but never gain new ones).
    4. +
    5. For every projection in the target, check that it unifies with a single +projection in the source (since there may be more than one given +trait Sub: Sup<.., A = i32> + Sup<.., A = u32>).
    6. +
    +

    Specifically, (3.) prevents a choice of projection bound to guide inference +unnecessarily, though it may guide inference when it is unambiguous.

    +
    +
    1. +

      Formerly known as "object safe".

      +
    2. +
    3. +

      The principal is the one non-auto trait of a dyn Trait.

      +
    4. +

    Type checking

    +

    The hir_analysis crate contains the source for "type collection" as well +as a bunch of related functionality. +Checking the bodies of functions is implemented in the hir_typeck crate. +These crates draw heavily on the type inference and trait solving.

    +

    Type collection

    +

    Type "collection" is the process of converting the types found in the HIR +(hir::Ty), which represent the syntactic things that the user wrote, into the +internal representation used by the compiler (Ty<'tcx>) – we also do +similar conversions for where-clauses and other bits of the function signature.

    +

    To try and get a sense of the difference, consider this function:

    +
    struct Foo { }
    +fn foo(x: Foo, y: self::Foo) { ... }
    +//        ^^^     ^^^^^^^^^
    +

    Those two parameters x and y each have the same type: but they will have +distinct hir::Ty nodes. Those nodes will have different spans, and of course +they encode the path somewhat differently. But once they are "collected" into +Ty<'tcx> nodes, they will be represented by the exact same internal type.

    +

    Collection is defined as a bundle of queries for computing information about +the various functions, traits, and other items in the crate being compiled. +Note that each of these queries is concerned with interprocedural things – +for example, for a function definition, collection will figure out the type and +signature of the function, but it will not visit the body of the function in +any way, nor examine type annotations on local variables (that's the job of +type checking).

    +

    For more details, see the collect module.

    +

    TODO: actually talk about type checking... #1161

    +

    Method lookup

    +

    Method lookup can be rather complex due to the interaction of a number +of factors, such as self types, autoderef, trait lookup, etc. This +file provides an overview of the process. More detailed notes are in +the code itself, naturally.

    +

    One way to think of method lookup is that we convert an expression of +the form receiver.method(...) into a more explicit fully-qualified syntax +(formerly called UFCS):

    +
      +
    • Trait::method(ADJ(receiver), ...) for a trait call
    • +
    • ReceiverType::method(ADJ(receiver), ...) for an inherent method call
    • +
    +

    Here ADJ is some kind of adjustment, which is typically a series of +autoderefs and then possibly an autoref (e.g., &**receiver). However +we sometimes do other adjustments and coercions along the way, in +particular unsizing (e.g., converting from [T; n] to [T]).

    +

    Method lookup is divided into two major phases:

    +
      +
    1. Probing (probe.rs). The probe phase is when we decide what method +to call and how to adjust the receiver.
    2. +
    3. Confirmation (confirm.rs). The confirmation phase "applies" +this selection, updating the side-tables, unifying type variables, and +otherwise doing side-effectful things.
    4. +
    +

    One reason for this division is to be more amenable to caching. The +probe phase produces a "pick" (probe::Pick), which is designed to be +cacheable across method-call sites. Therefore, it does not include +inference variables or other information.

    +

    The Probe phase

    +

    Steps

    +

    The first thing that the probe phase does is to create a series of +steps. This is done by progressively dereferencing the receiver type +until it cannot be deref'd anymore, as well as applying an optional +"unsize" step. So if the receiver has type Rc<Box<[T; 3]>>, this +might yield:

    +
      +
    1. Rc<Box<[T; 3]>>
    2. +
    3. Box<[T; 3]>
    4. +
    5. [T; 3]
    6. +
    7. [T]
    8. +
    +

    Candidate assembly

    +

    We then search along those steps to create a list of candidates. A +Candidate is a method item that might plausibly be the method being +invoked. For each candidate, we'll derive a "transformed self type" +that takes into account explicit self.

    +

    Candidates are grouped into two kinds, inherent and extension.

    +

    Inherent candidates are those that are derived from the +type of the receiver itself. So, if you have a receiver of some +nominal type Foo (e.g., a struct), any methods defined within an +impl like impl Foo are inherent methods. Nothing needs to be +imported to use an inherent method, they are associated with the type +itself (note that inherent impls can only be defined in the same +crate as the type itself).

    + +

    Extension candidates are derived from imported traits. If I have +the trait ToString imported, and I call to_string() as a method, +then we will list the to_string() definition in each impl of +ToString as a candidate. These kinds of method calls are called +"extension methods".

    +

    So, let's continue our example. Imagine that we were calling a method +foo with the receiver Rc<Box<[T; 3]>> and there is a trait Foo +that defines it with &self for the type Rc<U> as well as a method +on the type Box that defines foo but with &mut self. Then we +might have two candidates:

    +
      +
    • &Rc<U> as an extension candidate
    • +
    • &mut Box<U> as an inherent candidate
    • +
    + +

    Finally, to actually pick the method, we will search down the steps, +trying to match the receiver type against the candidate types. At +each step, we also consider an auto-ref and auto-mut-ref to see whether +that makes any of the candidates match. For each resulting receiver +type, we consider inherent candidates before extension candidates. +If there are multiple matching candidates in a group, we report an +error, except that multiple impls of the same trait are treated as a +single match. Otherwise we pick the first match we find.

    +

    In the case of our example, the first step is Rc<Box<[T; 3]>>, +which does not itself match any candidate. But when we autoref it, we +get the type &Rc<Box<[T; 3]>> which matches &Rc<U>. We would then +recursively consider all where-clauses that appear on the impl: if +those match (or we cannot rule out that they do), then this is the +method we would pick. Otherwise, we would continue down the series of +steps.

    +

    Variance of type and lifetime parameters

    + +

    For a more general background on variance, see the background appendix.

    +

    During type checking we must infer the variance of type and lifetime +parameters. The algorithm is taken from Section 4 of the paper "Taming the +Wildcards: Combining Definition- and Use-Site Variance" published in +PLDI'11 and written by Altidor et al., and hereafter referred to as The Paper.

    +

    This inference is explicitly designed not to consider the uses of +types within code. To determine the variance of type parameters +defined on type X, we only consider the definition of the type X +and the definitions of any types it references.

    +

    We only infer variance for type parameters found on data types +like structs and enums. In these cases, there is a fairly straightforward +explanation for what variance means. The variance of the type +or lifetime parameters defines whether T<A> is a subtype of T<B> +(resp. T<'a> and T<'b>) based on the relationship of A and B +(resp. 'a and 'b).

    +

    We do not infer variance for type parameters found on traits, functions, +or impls. Variance on trait parameters can indeed make sense +(and we used to compute it) but it is actually rather subtle in +meaning and not that useful in practice, so we removed it. See the +addendum for some details. Variances on function/impl parameters, on the +other hand, doesn't make sense because these parameters are instantiated and +then forgotten, they don't persist in types or compiled byproducts.

    +
    +

    Notation

    +

    We use the notation of The Paper throughout this chapter:

    +
      +
    • + is covariance.
    • +
    • - is contravariance.
    • +
    • * is bivariance.
    • +
    • o is invariance.
    • +
    +
    +

    The algorithm

    +

    The basic idea is quite straightforward. We iterate over the types +defined and, for each use of a type parameter X, accumulate a +constraint indicating that the variance of X must be valid for the +variance of that use site. We then iteratively refine the variance of +X until all constraints are met. There is always a solution, because at +the limit we can declare all type parameters to be invariant and all +constraints will be satisfied.

    +

    As a simple example, consider:

    +
    enum Option<A> { Some(A), None }
    +enum OptionalFn<B> { Some(|B|), None }
    +enum OptionalMap<C> { Some(|C| -> C), None }
    +

    Here, we will generate the constraints:

    +
    1. V(A) <= +
    +2. V(B) <= -
    +3. V(C) <= +
    +4. V(C) <= -
    +
    +

    These indicate that (1) the variance of A must be at most covariant; +(2) the variance of B must be at most contravariant; and (3, 4) the +variance of C must be at most covariant and contravariant. All of these +results are based on a variance lattice defined as follows:

    +
       *      Top (bivariant)
    +-     +
    +   o      Bottom (invariant)
    +
    +

    Based on this lattice, the solution V(A)=+, V(B)=-, V(C)=o is the +optimal solution. Note that there is always a naive solution which +just declares all variables to be invariant.

    +

    You may be wondering why fixed-point iteration is required. The reason +is that the variance of a use site may itself be a function of the +variance of other type parameters. In full generality, our constraints +take the form:

    +
    V(X) <= Term
    +Term := + | - | * | o | V(X) | Term x Term
    +
    +

    Here the notation V(X) indicates the variance of a type/region +parameter X with respect to its defining class. Term x Term +represents the "variance transform" as defined in the paper:

    +
    +

    If the variance of a type variable X in type expression E is V2 +and the definition-site variance of the corresponding type parameter +of a class C is V1, then the variance of X in the type expression +C<E> is V3 = V1.xform(V2).

    +
    +

    Constraints

    +

    If I have a struct or enum with where clauses:

    +
    struct Foo<T: Bar> { ... }
    +

    you might wonder whether the variance of T with respect to Bar affects the +variance T with respect to Foo. I claim no. The reason: assume that T is +invariant with respect to Bar but covariant with respect to Foo. And then +we have a Foo<X> that is upcast to Foo<Y>, where X <: Y. However, while +X : Bar, Y : Bar does not hold. In that case, the upcast will be illegal, +but not because of a variance failure, but rather because the target type +Foo<Y> is itself just not well-formed. Basically we get to assume +well-formedness of all types involved before considering variance.

    +

    Dependency graph management

    +

    Because variance is a whole-crate inference, its dependency graph +can become quite muddled if we are not careful. To resolve this, we refactor +into two queries:

    +
      +
    • crate_variances computes the variance for all items in the current crate.
    • +
    • variances_of accesses the variance for an individual reading; it +works by requesting crate_variances and extracting the relevant data.
    • +
    +

    If you limit yourself to reading variances_of, your code will only +depend then on the inference of that particular item.

    +

    Ultimately, this setup relies on the red-green algorithm. In particular, +every variance query effectively depends on all type definitions in the entire +crate (through crate_variances), but since most changes will not result in a +change to the actual results from variance inference, the variances_of query +will wind up being considered green after it is re-evaluated.

    +

    +

    Addendum: Variance on traits

    +

    As mentioned above, we used to permit variance on traits. This was +computed based on the appearance of trait type parameters in +method signatures and was used to represent the compatibility of +vtables in trait objects (and also "virtual" vtables or dictionary +in trait bounds). One complication was that variance for +associated types is less obvious, since they can be projected out +and put to myriad uses, so it's not clear when it is safe to allow +X<A>::Bar to vary (or indeed just what that means). Moreover (as +covered below) all inputs on any trait with an associated type had +to be invariant, limiting the applicability. Finally, the +annotations (MarkerTrait, PhantomFn) needed to ensure that all +trait type parameters had a variance were confusing and annoying +for little benefit.

    +

    Just for historical reference, I am going to preserve some text indicating how +one could interpret variance and trait matching.

    +

    Variance and object types

    +

    Just as with structs and enums, we can decide the subtyping +relationship between two object types &Trait<A> and &Trait<B> +based on the relationship of A and B. Note that for object +types we ignore the Self type parameter – it is unknown, and +the nature of dynamic dispatch ensures that we will always call a +function that is expected the appropriate Self type. However, we +must be careful with the other type parameters, or else we could +end up calling a function that is expecting one type but provided +another.

    +

    To see what I mean, consider a trait like so:

    +
    #![allow(unused)]
    +fn main() {
    +trait ConvertTo<A> {
    +    fn convertTo(&self) -> A;
    +}
    +}
    +

    Intuitively, If we had one object O=&ConvertTo<Object> and another +S=&ConvertTo<String>, then S <: O because String <: Object +(presuming Java-like "string" and "object" types, my go to examples +for subtyping). The actual algorithm would be to compare the +(explicit) type parameters pairwise respecting their variance: here, +the type parameter A is covariant (it appears only in a return +position), and hence we require that String <: Object.

    +

    You'll note though that we did not consider the binding for the +(implicit) Self type parameter: in fact, it is unknown, so that's +good. The reason we can ignore that parameter is precisely because we +don't need to know its value until a call occurs, and at that time (as +you said) the dynamic nature of virtual dispatch means the code we run +will be correct for whatever value Self happens to be bound to for +the particular object whose method we called. Self is thus different +from A, because the caller requires that A be known in order to +know the return type of the method convertTo(). (As an aside, we +have rules preventing methods where Self appears outside of the +receiver position from being called via an object.)

    +

    Trait variance and vtable resolution

    +

    But traits aren't only used with objects. They're also used when +deciding whether a given impl satisfies a given trait bound. To set the +scene here, imagine I had a function:

    +
    fn convertAll<A,T:ConvertTo<A>>(v: &[T]) { ... }
    +

    Now imagine that I have an implementation of ConvertTo for Object:

    +
    impl ConvertTo<i32> for Object { ... }
    +

    And I want to call convertAll on an array of strings. Suppose +further that for whatever reason I specifically supply the value of +String for the type parameter T:

    +
    let mut vector = vec!["string", ...];
    +convertAll::<i32, String>(vector);
    +

    Is this legal? To put another way, can we apply the impl for +Object to the type String? The answer is yes, but to see why +we have to expand out what will happen:

    +
      +
    • +

      convertAll will create a pointer to one of the entries in the +vector, which will have type &String

      +
    • +
    • +

      It will then call the impl of convertTo() that is intended +for use with objects. This has the type fn(self: &Object) -> i32.

      +

      It is OK to provide a value for self of type &String because +&String <: &Object.

      +
    • +
    +

    OK, so intuitively we want this to be legal, so let's bring this back +to variance and see whether we are computing the correct result. We +must first figure out how to phrase the question "is an impl for +Object,i32 usable where an impl for String,i32 is expected?"

    +

    Maybe it's helpful to think of a dictionary-passing implementation of +type classes. In that case, convertAll() takes an implicit parameter +representing the impl. In short, we have an impl of type:

    +
    V_O = ConvertTo<i32> for Object
    +
    +

    and the function prototype expects an impl of type:

    +
    V_S = ConvertTo<i32> for String
    +
    +

    As with any argument, this is legal if the type of the value given +(V_O) is a subtype of the type expected (V_S). So is V_O <: V_S? +The answer will depend on the variance of the various parameters. In +this case, because the Self parameter is contravariant and A is +covariant, it means that:

    +
    V_O <: V_S iff
    +    i32 <: i32
    +    String <: Object
    +
    +

    These conditions are satisfied and so we are happy.

    +

    Variance and associated types

    +

    Traits with associated types – or at minimum projection +expressions – must be invariant with respect to all of their +inputs. To see why this makes sense, consider what subtyping for a +trait reference means:

    +
    <T as Trait> <: <U as Trait>
    +
    +

    means that if I know that T as Trait, I also know that U as Trait. Moreover, if you think of it as dictionary passing style, +it means that a dictionary for <T as Trait> is safe to use where +a dictionary for <U as Trait> is expected.

    +

    The problem is that when you can project types out from <T as Trait>, the relationship to types projected out of <U as Trait> +is completely unknown unless T==U (see #21726 for more +details). Making Trait invariant ensures that this is true.

    +

    Another related reason is that if we didn't make traits with +associated types invariant, then projection is no longer a +function with a single result. Consider:

    +
    trait Identity { type Out; fn foo(&self); }
    +impl<T> Identity for T { type Out = T; ... }
    +

    Now if I have <&'static () as Identity>::Out, this can be +validly derived as &'a () for any 'a:

    +
    <&'a () as Identity> <: <&'static () as Identity>
    +if &'static () < : &'a ()   -- Identity is contravariant in Self
    +if 'static : 'a             -- Subtyping rules for relations
    +
    +

    This change otoh means that <'static () as Identity>::Out is +always &'static () (which might then be upcast to 'a (), +separately). This was helpful in solving #21750.

    +

    Coherence

    +
    +

    NOTE: this is based on notes by @lcnr

    +
    +

    Coherence checking is what detects both of trait impls and inherent impls overlapping with others. +(reminder: inherent impls are impls of concrete types like impl MyStruct {})

    +

    Overlapping trait impls always produce an error, +while overlapping inherent impls result in an error only if they have methods with the same name.

    +

    Checking for overlaps is split in two parts. First there's the overlap check(s), +which finds overlaps between traits and inherent implementations that the compiler currently knows about.

    +

    However, Coherence also results in an error if any other impls could exist, +even if they are currently unknown. +This affects impls which may get added to upstream crates in a backwards compatible way, +and impls from downstream crates. +This is called the Orphan check.

    +

    Overlap checks

    +

    Overlap checks are performed for both inherent impls, and for trait impls. +This uses the same overlap checking code, really done as two separate analyses. +Overlap checks always consider pairs of implementations, comparing them to each other.

    +

    Overlap checking for inherent impl blocks is done through fn check_item (in coherence/inherent_impls_overlap.rs), +where you can very clearly see that (at least for small n), the check really performs n^2 +comparisons between impls.

    +

    In the case of traits, this check is currently done as part of building the specialization graph, +to handle specializing impls overlapping with their parent, but this may change in the future.

    +

    In both cases, all pairs of impls are checked for overlap.

    +

    Overlapping is sometimes partially allowed:

    +
      +
    1. for marker traits
    2. +
    3. under specialization
    4. +
    +

    but normally isn't.

    +

    The overlap check has various modes (see OverlapMode). +Importantly, there's the explicit negative impl check, and the implicit negative impl check. +Both try to prove that an overlap is definitely impossible.

    +

    The explicit negative impl check

    +

    This check is done in impl_intersection_has_negative_obligation.

    +

    This check tries to find a negative trait implementation. +For example:

    +
    #![allow(unused)]
    +fn main() {
    +struct MyCustomErrorType;
    +
    +// both in your own crate
    +impl From<&str> for MyCustomErrorType {}
    +impl<E> From<E> for MyCustomErrorType where E: Error {}
    +}
    +

    In this example, we'd get: +MyCustomErrorType: From<&str> and MyCustomErrorType: From<?E>, giving ?E = &str.

    +

    And thus, these two implementations would overlap. +However, libstd provides &str: !Error, and therefore guarantees that there +will never be a positive implementation of &str: Error, and thus there is no overlap.

    +

    Note that for this kind of negative impl check, we must have explicit negative implementations provided. +This is not currently stable.

    +

    The implicit negative impl check

    +

    This check is done in impl_intersection_has_impossible_obligation, +and does not rely on negative trait implementations and is stable.

    +

    Let's say there's a

    +
    #![allow(unused)]
    +fn main() {
    +impl From<MyLocalType> for Box<dyn Error> {}  // in your own crate
    +impl<E> From<E> for Box<dyn Error> where E: Error {} // in std
    +}
    +

    This would give: Box<dyn Error>: From<MyLocalType>, and Box<dyn Error>: From<?E>,
    +giving ?E = MyLocalType.

    +

    In your crate there's no MyLocalType: Error, downstream crates cannot implement Error (a remote trait) for MyLocalType (a remote type). +Therefore, these two impls do not overlap. +Importantly, this works even if there isn't a impl !Error for MyLocalType.

    +

    Opaque types (type alias impl Trait)

    +

    Opaque types are syntax to declare an opaque type alias that only +exposes a specific set of traits as their interface; the concrete type in the +background is inferred from a certain set of use sites of the opaque type.

    +

    This is expressed by using impl Trait within type aliases, for example:

    +
    type Foo = impl Bar;
    +

    This declares an opaque type named Foo, of which the only information is that +it implements Bar. Therefore, any of Bar's interface can be used on a Foo, +but nothing else (regardless of whether it implements any other traits).

    +

    Since there needs to be a concrete background type, +you can (as of January 2021) express that type +by using the opaque type in a "defining use site".

    +
    struct Struct;
    +impl Bar for Struct { /* stuff */ }
    +fn foo() -> Foo {
    +    Struct
    +}
    +

    Any other "defining use site" needs to produce the exact same type.

    +

    Defining use site(s)

    +

    Currently only the return value of a function can be a defining use site +of an opaque type (and only if the return type of that function contains +the opaque type).

    +

    The defining use of an opaque type can be any code within the parent +of the opaque type definition. This includes any siblings of the +opaque type and all children of the siblings.

    +

    The initiative for "not causing fatal brain damage to developers due to +accidentally running infinite loops in their brain while trying to +comprehend what the type system is doing" has decided to disallow children +of opaque types to be defining use sites.

    +

    Associated opaque types

    +

    Associated opaque types can be defined by any other associated item +on the same trait impl or a child of these associated items. For instance:

    +
    trait Baz {
    +    type Foo;
    +    fn foo() -> Self::Foo;
    +}
    +
    +struct Quux;
    +
    +impl Baz for Quux {
    +    type Foo = impl Bar;
    +    fn foo() -> Self::Foo { ... }
    +}
    +

    Inference of opaque types (impl Trait)

    +

    This page describes how the compiler infers the hidden type for an opaque type. +This kind of type inference is particularly complex because, +unlike other kinds of type inference, +it can work across functions and function bodies.

    +

    Running example

    +

    To help explain how it works, let's consider an example.

    +
    #![feature(type_alias_impl_trait)]
    +mod m {
    +    pub type Seq<T> = impl IntoIterator<Item = T>;
    +
    +    #[define_opaque(Seq)]
    +    pub fn produce_singleton<T>(t: T) -> Seq<T> {
    +        vec![t]
    +    }
    +
    +    #[define_opaque(Seq)]
    +    pub fn produce_doubleton<T>(t: T, u: T) -> Seq<T> {
    +        vec![t, u]
    +    }
    +}
    +
    +fn is_send<T: Send>(_: &T) {}
    +
    +pub fn main() {
    +    let elems = m::produce_singleton(22);
    +
    +    is_send(&elems);
    +
    +    for elem in elems {
    +        println!("elem = {:?}", elem);
    +    }
    +}
    +

    In this code, the opaque type is Seq<T>. +Its defining scope is the module m. +Its hidden type is Vec<T>, +which is inferred from m::produce_singleton and m::produce_doubleton.

    +

    In the main function, the opaque type is out of its defining scope. +When main calls m::produce_singleton, it gets back a reference to the opaque type Seq<i32>. +The is_send call checks that Seq<i32>: Send. +Send is not listed amongst the bounds of the impl trait, +but because of auto-trait leakage, we are able to infer that it holds. +The for loop desugaring requires that Seq<T>: IntoIterator, +which is provable from the bounds declared on Seq<T>.

    +

    Type-checking main

    +

    Let's start by looking what happens when we type-check main. +Initially we invoke produce_singleton and the return type is an opaque type +OpaqueTy.

    +

    Type-checking the for loop

    +

    The for loop desugars the in elems part to IntoIterator::into_iter(elems). +elems is of type Seq<T>, so the type checker registers a Seq<T>: IntoIterator obligation. +This obligation is trivially satisfied, +because Seq<T> is an opaque type (impl IntoIterator<Item = T>) that has a bound for the trait. +Similar to how a U: Foo where bound allows U to trivially satisfy Foo, +opaque types' bounds are available to the type checker and are used to fulfill obligations.

    +

    The type of elem in the for loop is inferred to be <Seq<T> as IntoIterator>::Item, which is T. +At no point is the type checker interested in the hidden type.

    +

    Type-checking the is_send call

    +

    When trying to prove auto trait bounds, +we first repeat the process as above, +to see if the auto trait is in the bound list of the opaque type. +If that fails, we reveal the hidden type of the opaque type, +but only to prove this specific trait bound, not in general. +Revealing is done by invoking the type_of query on the DefId of the opaque type. +The query will internally request the hidden types from the defining function(s) +and return that (see the section on type_of for more details).

    +

    Flowchart of type checking steps

    +
    flowchart TD
    +    TypeChecking["type checking `main`"]
    +    subgraph TypeOfSeq["type_of(Seq<T>) query"]
    +        WalkModuleHir["Walk the HIR for the module `m`\nto find the hidden types from each\nfunction/const/static within"]
    +        VisitProduceSingleton["visit `produce_singleton`"]
    +        InterimType["`produce_singleton` hidden type is `Vec<T>`\nkeep searching"]
    +        VisitProduceDoubleton["visit `produce_doubleton`"]
    +        CompareType["`produce_doubleton` hidden type is also Vec<T>\nthis matches what we saw before ✅"]
    +        Done["No more items to look at in scope\nReturn `Vec<T>`"]
    +    end
    +
    +    BorrowCheckProduceSingleton["`borrow_check(produce_singleton)`"]
    +    TypeCheckProduceSingleton["`type_check(produce_singleton)`"]
    +
    +    BorrowCheckProduceDoubleton["`borrow_check(produce_doubleton)`"]
    +    TypeCheckProduceDoubleton["`type_check(produce_doubleton)`"]
    +
    +    Substitute["Substitute `T => u32`,\nyielding `Vec<i32>` as the hidden type"]
    +    CheckSend["Check that `Vec<i32>: Send` ✅"]
    +
    +    TypeChecking -- trait code for auto traits --> TypeOfSeq
    +    TypeOfSeq --> WalkModuleHir
    +    WalkModuleHir --> VisitProduceSingleton
    +    VisitProduceSingleton --> BorrowCheckProduceSingleton
    +    BorrowCheckProduceSingleton --> TypeCheckProduceSingleton
    +    TypeCheckProduceSingleton --> InterimType
    +    InterimType --> VisitProduceDoubleton
    +    VisitProduceDoubleton --> BorrowCheckProduceDoubleton
    +    BorrowCheckProduceDoubleton --> TypeCheckProduceDoubleton
    +    TypeCheckProduceDoubleton --> CompareType --> Done
    +    Done --> Substitute --> CheckSend
    +
    +

    Within the type_of query

    +

    The type_of query, when applied to an opaque type O, returns the hidden type. +That hidden type is computed by combining the results +from each constraining function within the defining scope of O.

    +
    flowchart TD
    +    TypeOf["type_of query"]
    +    TypeOf -- find_opaque_ty_constraints --> FindOpaqueTyConstraints
    +    FindOpaqueTyConstraints --> Iterate
    +    Iterate["Iterate over each item in defining scope"]
    +    Iterate -- For each item --> TypeCheck
    +    TypeCheck["Check typeck(I) to see if it constraints O"]
    +    TypeCheck -- I does not\nconstrain O --> Iterate
    +    TypeCheck -- I constrains O --> BorrowCheck
    +    BorrowCheck["Invoke mir_borrowck(I) to get hidden type\nfor O computed by I"]
    +    BorrowCheck --> PreviousType
    +    PreviousType["Hidden type from I\nsame as any previous hidden type\nfound so far?"]
    +    PreviousType -- Yes --> Complete
    +    PreviousType -- No --> ReportError
    +    ReportError["Report an error"]
    +    ReportError --> Complete["Item I complete"]
    +    Complete --> Iterate
    +
    +    FindOpaqueTyConstraints -- All constraints found --> Done
    +    Done["Done"]
    +
    +

    Relating an opaque type to another type

    +

    There is one central place where an opaque type gets its hidden type constrained, +and that is the handle_opaque_type function. +Amusingly it takes two types, so you can pass any two types, +but one of them should be an opaque type. +The order is only important for diagnostics.

    +
    flowchart TD
    +    subgraph typecheck["type check comparison routines"]
    +        equate.rs
    +        sub.rs
    +        lub.rs
    +    end
    +
    +    typecheck --> TwoSimul
    +
    +    subgraph handleopaquetype["infcx.handle_opaque_type"]
    +
    +        TwoSimul["Defining two opaque types simultaneously?"]
    +
    +        TwoSimul -- Yes --> ReportError["Report error"]
    +
    +        TwoSimul -- No --> MayDefine -- Yes --> RegisterOpaqueType --> AlreadyHasValue
    +
    +        MayDefine -- No --> ReportError
    +
    +        MayDefine["In defining scope OR in query?"]
    +
    +        AlreadyHasValue["Opaque type X already has\na registered value?"]
    +
    +        AlreadyHasValue -- No --> Obligations["Register opaque type bounds\nas obligations for hidden type"]
    +
    +        RegisterOpaqueType["Register opaque type with\nother type as value"]
    +
    +        AlreadyHasValue -- Yes --> EquateOpaqueTypes["Equate new hidden type\nwith old hidden type"]
    +    end
    +
    +

    Interactions with queries

    +

    When queries handle opaque types, +they cannot figure out whether they are in a defining scope, +so they just assume they are.

    +

    The registered hidden types are stored into the QueryResponse struct +in the opaque_types field (the function +take_opaque_types_for_query_response reads them out).

    +

    When the QueryResponse is instantiated into the surrounding infcx in +query_response_substitution_guess, +we convert each hidden type constraint by invoking handle_opaque_type (as above).

    +

    There is one bit of "weirdness". +The instantiated opaque types have an order +(if one opaque type was compared with another, +and we have to pick one opaque type to use as the one that gets its hidden type assigned). +We use the one that is considered "expected". +But really both of the opaque types may have defining uses. +When the query result is instantiated, +that will be re-evaluated from the context that is using the query. +The final context (typeck of a function, mir borrowck or wf-checks) +will know which opaque type can actually be instantiated +and then handle it correctly.

    +

    Within the MIR borrow checker

    +

    The MIR borrow checker relates things via nll_relate and only cares about regions. +Any type relation will trigger the binding of hidden types, +so the borrow checker is doing the same thing as the type checker, +but ignores obviously dead code (e.g. after a panic). +The borrow checker is also the source of truth when it comes to hidden types, +as it is the only one who can properly figure out what lifetimes on the hidden type correspond +to which lifetimes on the opaque type declaration.

    +

    Backwards compatibility hacks

    +

    impl Trait in return position has various quirks that were not part +of any RFCs and are likely accidental stabilization. +To support these, +the replace_opaque_types_with_inference_vars is being used to reintroduce the previous behaviour.

    +

    There are three backwards compatibility hacks:

    +
      +
    1. +

      All return sites share the same inference variable, +so some return sites may only compile if another return site uses a concrete type.

      +
      #![allow(unused)]
      +fn main() {
      +fn foo() -> impl Debug {
      +    if false {
      +        return std::iter::empty().collect();
      +    }
      +    vec![42]
      +}
      +}
      +
    2. +
    3. +

      Associated type equality constraints for impl Trait can be used +as long as the hidden type satisfies the trait bounds on the associated type. +The opaque impl Trait signature does not need to satisfy them.

      +
      #![allow(unused)]
      +fn main() {
      +trait Duh {}
      +
      +impl Duh for i32 {}
      +
      +trait Trait {
      +    type Assoc: Duh;
      +}
      +
      +// the fact that `R` is the `::Output` projection on `F` causes
      +// an intermediate inference var to be generated which is then later
      +// compared against the actually found `Assoc` type.
      +impl<R: Duh, F: FnMut() -> R> Trait for F {
      +    type Assoc = R;
      +}
      +
      +// The `impl Send` here is then later compared against the inference var
      +// created, causing the inference var to be set to `impl Send` instead of
      +// the hidden type. We already have obligations registered on the inference
      +// var to make it uphold the `: Duh` bound on `Trait::Assoc`. The opaque
      +// type does not implement `Duh`, even if its hidden type does.
      +// Lazy TAIT would error out, but we inserted a hack to make it work again,
      +// keeping backwards compatibility.
      +fn foo() -> impl Trait<Assoc = impl Send> {
      +    || 42
      +}
      +}
      +
    4. +
    5. +

      Closures cannot create hidden types for their parent function's impl Trait. +This point is mostly moot, +because of point 1 introducing inference vars, +so the closure only ever sees the inference var, but should we fix 1, this will become a problem.

      +
    6. +
    +

    Return Position Impl Trait In Trait

    +

    Return-position impl trait in trait (RPITIT) is conceptually (and as of +#112988, literally) sugar that turns RPITs in trait methods into +generic associated types (GATs) without the user having to define that +GAT either on the trait side or impl side.

    +

    RPITIT was originally implemented in #101224, which added support for +async fn in trait (AFIT), since the implementation for RPITIT came for +free as a part of implementing AFIT which had been RFC'd previously. It +was then RFC'd independently in RFC 3425, which was recently approved +by T-lang.

    +

    How does it work?

    +

    This doc is ordered mostly via the compilation pipeline:

    +
      +
    1. AST lowering (AST -> HIR)
    2. +
    3. HIR ty lowering (HIR -> rustc_middle::ty data types)
    4. +
    5. typeck
    6. +
    +

    AST lowering

    +

    AST lowering for RPITITs is almost the same as lowering RPITs. We +still lower them as +hir::ItemKind::OpaqueTy. +The two differences are that:

    +

    We record in_trait for the opaque. This will signify that the opaque +is an RPITIT for HIR ty lowering, diagnostics that deal with HIR, etc.

    +

    We record lifetime_mappings for the opaque type, described below.

    +

    Aside: Opaque lifetime duplication

    +

    All opaques (not just RPITITs) end up duplicating their captured +lifetimes into new lifetime parameters local to the opaque. The main +reason we do this is because RPITs need to be able to "reify"1 any +captured late-bound arguments, or make them into early-bound ones. This +is so they can be used as generic args for the opaque, and later to +instantiate hidden types. Since we don't know which lifetimes are early- +or late-bound during AST lowering, we just do this for all lifetimes.

    +

    The main addition for RPITITs is that during lowering we track the +relationship between the captured lifetimes and the corresponding +duplicated lifetimes in an additional field, +OpaqueTy::lifetime_mapping. +We use this lifetime mapping later on in predicates_of to install +bounds that enforce equality between these duplicated lifetimes and +their source lifetimes in order to properly typecheck these GATs, which +will be discussed below.

    +
    Note
    +

    It may be better if we were able to lower without duplicates and for +that I think we would need to stop distinguishing between early and late +bound lifetimes. So we would need a solution like Account for +late-bound lifetimes in generics +#103448 and then also a +PR similar to Inherit function lifetimes for impl-trait +#103449.

    +

    HIR ty lowering

    +

    The main change to HIR ty lowering is that we lower hir::TyKind::OpaqueDef +for an RPITIT to a projection instead of an opaque, using a newly +synthesized def-id for a new associated type in the trait. We'll +describe how exactly we get this def-id in the next section.

    +

    This means that any time we call lower_ty on the RPITIT, we end up +getting a projection back instead of an opaque. This projection can then +be normalized to the right value -- either the original opaque if we're +in the trait, or the inferred type of the RPITIT if we're in an impl.

    +

    Lowering to synthetic associated types

    +

    Using query feeding, we synthesize new associated types on both the +trait side and impl side for RPITITs that show up in methods.

    +
    Lowering RPITITs in traits
    +

    When tcx.associated_item_def_ids(trait_def_id) is called on a trait to +gather all of the trait's associated types, the query previously just +returned the def-ids of the HIR items that are children of the trait. +After #112988, additionally, for each method in the trait, we add the +def-ids returned by +tcx.associated_types_for_impl_traits_in_associated_fn(trait_method_def_id), +which walks through each trait method, gathers any RPITITs that show up +in the signature, and then calls +associated_type_for_impl_trait_in_trait for each RPITIT, which +synthesizes a new associated type.

    +
    Lowering RPITITs in impls
    +

    Similarly, along with the impl's HIR items, for each impl method, we +additionally add all of the +associated_types_for_impl_traits_in_associated_fn for the impl method. +This calls associated_type_for_impl_trait_in_impl, which will +synthesize an associated type definition for each RPITIT that comes from +the corresponding trait method.

    +

    Synthesizing new associated types

    +

    We use query feeding +(TyCtxtAt::create_def) +to synthesize a new def-id for the synthetic GATs for each RPITIT.

    +

    Locally, most of rustc's queries match on the HIR of an item to compute +their values. Since the RPITIT doesn't really have HIR associated with +it, or at least not HIR that corresponds to an associated type, we must +compute many queries eagerly and +feed them, like +opt_def_kind, associated_item, visibility, anddefaultness.

    +

    The values for most of these queries is obvious, since the RPITIT +conceptually inherits most of its information from the parent function +(e.g. visibility), or because it's trivially knowable because it's an +associated type (opt_def_kind).

    +

    Some other queries are more involved, or cannot be fed, and we +document the interesting ones of those below:

    +
    generics_of for the trait
    +

    The GAT for an RPITIT conceptually inherits the same generics as the +RPIT it comes from. However, instead of having the method as the +generics' parent, the trait is the parent.

    +

    Currently we get away with taking the RPIT's generics and method +generics and flattening them both into a new generics list, preserving +the def-id of each of the parameters. (This may cause issues with +def-ids having the wrong parents, but in the worst case this will cause +diagnostics issues. If this ends up being an issue, we can synthesize +new def-ids for generic params whose parent is the GAT.)

    +
    + An illustrated example +
    #![allow(unused)]
    +fn main() {
    +trait Foo {
    +    fn method<'early: 'early, 'late, T>() -> impl Sized + Captures<'early, 'late>;
    +}
    +}
    +

    Would desugar to...

    +
    #![allow(unused)]
    +fn main() {
    +trait Foo {
    +    //       vvvvvvvvv method's generics
    +    //                  vvvvvvvvvvvvvvvvvvvvvvvv opaque's generics
    +    type Gat<'early, T, 'early_duplicated, 'late>: Sized + Captures<'early_duplicated, 'late>;
    +
    +    fn method<'early: 'early, 'late, T>() -> Self::Gat<'early, T, 'early, 'late>;
    +}
    +}
    +
    +
    generics_of for the impl
    +

    The generics for an impl's GAT are a bit more interesting. They are +composed of RPITIT's own generics (from the trait definition), appended +onto the impl's methods generics. This has the same issue as above, +where the generics for the GAT have parameters whose def-ids have the +wrong parent, but this should only cause issues in diagnostics.

    +

    We could fix this similarly if we were to synthesize new generics +def-ids, but this can be done later in a forwards-compatible way, +perhaps by a interested new contributor.

    +
    opt_rpitit_info
    +

    Some queries rely on computing information that would result in cycles +if we were to feed them eagerly, like explicit_predicates_of. +Therefore we defer to the predicates_of provider to return the right +value for our RPITIT's GAT. We do this by detecting early on in the +query if the associated type is synthetic by using +opt_rpitit_info, +which returns Some if the associated type is synthetic.

    +

    Then, during a query like explicit_predicates_of, we can detect if an +associated type is synthetic like:

    +
    #![allow(unused)]
    +fn main() {
    +fn explicit_predicates_of(tcx: TyCtxt<'_>, def_id: LocalDefId) -> ... {
    +    if let Some(rpitit_info) = tcx.opt_rpitit_info(def_id) {
    +        // Do something special for RPITITs...
    +        return ...;
    +    }
    +
    +    // The regular computation which relies on access to the HIR of `def_id`.
    +}
    +}
    +
    explicit_predicates_of
    +

    RPITITs begin by copying the predicates of the method that defined it, +both on the trait and impl side.

    +

    Additionally, we install "bidirectional outlives" predicates. +Specifically, we add region-outlives predicates in both directions for +each captured early-bound lifetime that constrains it to be equal to the +duplicated early-bound lifetime that results from lowering. This is best +illustrated in an example:

    +
    #![allow(unused)]
    +fn main() {
    +trait Foo<'a> {
    +    fn bar() -> impl Sized + 'a;
    +}
    +
    +// Desugars into...
    +
    +trait Foo<'a> {
    +    type Gat<'a_duplicated>: Sized + 'a
    +    where
    +        'a: 'a_duplicated,
    +        'a_duplicated: 'a;
    +    //~^ Specifically, we should be able to assume that the
    +    // duplicated `'a_duplicated` lifetime always stays in
    +    // sync with the `'a` lifetime.
    +
    +    fn bar() -> Self::Gat<'a>;
    +}
    +}
    +
    assumed_wf_types
    +

    The GATs in both the trait and impl inherit the assumed_wf_types of +the trait method that defines the RPITIT. This is to make sure that the +following code is well formed when lowered.

    +
    #![allow(unused)]
    +fn main() {
    +trait Foo {
    +    fn iter<'a, T>(x: &'a [T]) -> impl Iterator<Item = &'a T>;
    +}
    +
    +// which is lowered to...
    +
    +trait FooDesugared {
    +    type Iter<'a, T>: Iterator<Item = &'a T>;
    +    //~^ assumed wf: `&'a [T]`
    +    // Without assumed wf types, the GAT would not be well-formed on its own.
    +
    +    fn iter<'a, T>(x: &'a [T]) -> Self::Iter<'a, T>;
    +}
    +}
    +

    Because assumed_wf_types is only defined for local def ids, in order +to properly implement assumed_wf_types for impls of foreign traits +with RPITs, we need to encode the assumed wf types of RPITITs in an +extern query +assumed_wf_types_for_rpitit.

    +

    Typechecking

    +

    The RPITIT inference algorithm

    +

    The RPITIT inference algorithm is implemented in +collect_return_position_impl_trait_in_trait_tys.

    +

    High-level: Given a impl method and a trait method, we take the +trait method and instantiate each RPITIT in the signature with an infer +var. We then equate this trait method signature with the impl method +signature, and process all obligations that fall out in order to infer +the type of all of the RPITITs in the method.

    +

    The method is also responsible for making sure that the hidden types for +each RPITIT actually satisfy the bounds of the impl Trait, i.e. that +if we infer impl Trait = Foo, that Foo: Trait holds.

    +
    + An example... +
    #![allow(unused)]
    +#![feature(return_position_impl_trait_in_trait)]
    +
    +fn main() {
    +use std::ops::Deref;
    +
    +trait Foo {
    +    fn bar() -> impl Deref<Target = impl Sized>;
    +             // ^- RPITIT ?0        ^- RPITIT ?1
    +}
    +
    +impl Foo for () {
    +    fn bar() -> Box<String> { Box::new(String::new()) }
    +}
    +}
    +

    We end up with the trait signature that looks like fn() -> ?0, and +nested obligations ?0: Deref<Target = ?1>, ?1: Sized. The impl +signature is fn() -> Box<String>.

    +

    Equating these signatures gives us ?0 = Box<String>, which then after +processing the obligation Box<String>: Deref<Target = ?1> gives us ?1 = String, and the other obligation String: Sized evaluates to true.

    +

    By the end of the algorithm, we end up with a mapping between associated +type def-ids to concrete types inferred from the signature. We can then +use this mapping to implement type_of for the synthetic associated +types in the impl, since this mapping describes the type that should +come after the = in type Assoc = ... for each RPITIT.

    +
    +
    Implied bounds in RPITIT hidden type inference
    +

    Since collect_return_position_impl_trait_in_trait_tys does fulfillment and +region resolution, we must provide it assumed_wf_types so that we can prove +region obligations with the same expected implied bounds as +compare_method_predicate_entailment does.

    +

    Since the return type of a method is understood to be one of the assumed WF +types, and we eagerly fold the return type with inference variables to do +opaque type inference, after opaque type inference, the return type will +resolve to contain the hidden types of the RPITITs. this would mean that the +hidden types of the RPITITs would be assumed to be well-formed without having +independently proven that they are. This resulted in a +subtle unsoundness bug. In +order to prevent this cyclic reasoning, we instead replace the hidden types of +the RPITITs in the return type of the method with placeholders, which lead +to no implied well-formedness bounds.

    +

    Default trait body

    +

    Type-checking a default trait body, like:

    +
    #![allow(unused)]
    +fn main() {
    +trait Foo {
    +    fn bar() -> impl Sized {
    +        1i32
    +    }
    +}
    +}
    +

    requires one interesting hack. We need to install a projection predicate +into the param-env of Foo::bar allowing us to assume that the RPITIT's +GAT normalizes to the RPITIT's opaque type. This relies on the +observation that a trait method and RPITIT's GAT will always be "in +sync". That is, one will only ever be overridden if the other one is as +well.

    +

    Compare this to a similar desugaring of the code above, which would fail +because we cannot rely on this same assumption:

    +
    #![allow(unused)]
    +#![feature(impl_trait_in_assoc_type)]
    +#![feature(associated_type_defaults)]
    +
    +fn main() {
    +trait Foo {
    +    type RPITIT = impl Sized;
    +
    +    fn bar() -> Self::RPITIT {
    +        01i32
    +    }
    +}
    +}
    +

    Failing because a down-stream impl could theoretically provide an +implementation for RPITIT without providing an implementation of +bar:

    +
    error[E0308]: mismatched types
    +--> src/lib.rs:8:9
    + |
    +5 |     type RPITIT = impl Sized;
    + |     ------------------------- associated type defaults can't be assumed inside the trait defining them
    +6 |
    +7 |     fn bar() -> Self::RPITIT {
    + |                 ------------ expected `<Self as Foo>::RPITIT` because of return type
    +8 |         01i32
    + |         ^^^^^ expected associated type, found `i32`
    + |
    + = note: expected associated type `<Self as Foo>::RPITIT`
    +                       found type `i32`
    +
    +

    Well-formedness checking

    +

    We check well-formedness of RPITITs just like regular associated types.

    +

    Since we added lifetime bounds in predicates_of that link the +duplicated early-bound lifetimes to their original lifetimes, and we +implemented assumed_wf_types which inherits the WF types of the method +from which the RPITIT originates (#113704), we have no issues +WF-checking the GAT as if it were a regular GAT.

    +

    What's broken, what's weird, etc.

    +
    Specialization is super busted
    +

    The "default trait methods" described above does not interact well with +specialization, because we only install those projection bounds in trait +default methods, and not in impl methods. Given that specialization is +already pretty busted, I won't go into detail, but it's currently a bug +tracked in: +* tests/ui/impl-trait/in-trait/specialization-broken.rs

    +
    Projections don't have variances
    +

    This code fails because projections don't have variances:

    +
    #![allow(unused)]
    +#![feature(return_position_impl_trait_in_trait)]
    +
    +fn main() {
    +trait Foo {
    +    // Note that the RPITIT below does *not* capture `'lt`.
    +    fn bar<'lt: 'lt>() -> impl Eq;
    +}
    +
    +fn test<'a, 'b, T: Foo>() -> bool {
    +    <T as Foo>::bar::<'a>() == <T as Foo>::bar::<'b>()
    +    //~^ ERROR
    +    // (requires that `'a == 'b`)
    +}
    +}
    +

    This is because we can't relate <T as Foo>::Rpitit<'a> and <T as Foo>::Rpitit<'b>, even if they don't capture their lifetime. If we were +using regular opaque types, this would work, because they would be +bivariant in that lifetime parameter:

    +
    #![allow(unused)]
    +#![feature(return_position_impl_trait_in_trait)]
    +
    +fn main() {
    +fn bar<'lt: 'lt>() -> impl Eq {
    +    ()
    +}
    +
    +fn test<'a, 'b>() -> bool {
    +    bar::<'a>() == bar::<'b>()
    +}
    +}
    +

    This is probably okay though, since RPITITs will likely have their +captures behavior changed to capture all in-scope lifetimes anyways. +This could also be relaxed later in a forwards-compatible way if we were +to consider variances of RPITITs when relating projections.

    +
    +
    1. +

      This is compiler-errors terminology, I'm not claiming it's accurate :^)

      +
    2. +

    Opaque types region inference restrictions

    +

    In this chapter we discuss the various restrictions we impose on the generic arguments of +opaque types when defining their hidden types +Opaque<'a, 'b, .., A, B, ..> := SomeHiddenType.

    +

    These restrictions are implemented in borrow checking (Source) +as it is the final step opaque types inference.

    +

    Background: type and const generic arguments

    +

    For type arguments, two restrictions are necessary: each type argument must be +(1) a type parameter and +(2) is unique among the generic arguments. +The same is applied to const arguments.

    +

    Example of case (1):

    +
    #![allow(unused)]
    +fn main() {
    +type Opaque<X> = impl Sized;
    +
    +// `T` is a type parameter.
    +// Opaque<T> := ();
    +fn good<T>() -> Opaque<T> {}
    +
    +// `()` is not a type parameter.
    +// Opaque<()> := ();
    +fn bad() -> Opaque<()> {} //~ ERROR
    +}
    +

    Example of case (2):

    +
    #![allow(unused)]
    +fn main() {
    +type Opaque<X, Y> = impl Sized;
    +
    +// `T` and `U` are unique in the generic args.
    +// Opaque<T, U> := T;
    +fn good<T, U>(t: T, _u: U) -> Opaque<T, U> { t }
    +
    +// `T` appears twice in the generic args.
    +// Opaque<T, T> := T;
    +fn bad<T>(t: T) -> Opaque<T, T> { t } //~ ERROR
    +}
    +

    Motivation: In the first case Opaque<()> := (), the hidden type is ambiguous because +it is compatible with two different interpretaions: Opaque<X> := X and Opaque<X> := (). +Similarly for the second case Opaque<T, T> := T, it is ambiguous whether it should be +interpreted as Opaque<X, Y> := X or as Opaque<X, Y> := Y. +Because of this ambiguity, both cases are rejected as invalid defining uses.

    +

    Uniqueness restriction

    +

    Each lifetime argument must be unique in the arguments list and must not be 'static. +This is in order to avoid an ambiguity with hidden type inference similar to the case of +type parameters. +For example, the invalid defining use below Opaque<'static> := Inv<'static> is compatible with +both Opaque<'x> := Inv<'static> and Opaque<'x> := Inv<'x>.

    +
    #![allow(unused)]
    +fn main() {
    +type Opaque<'x> = impl Sized + 'x;
    +type Inv<'a> = Option<*mut &'a ()>;
    +
    +fn good<'a>() -> Opaque<'a> { Inv::<'static>::None }
    +
    +fn bad() -> Opaque<'static> { Inv::<'static>::None }
    +//~^ ERROR
    +}
    +
    #![allow(unused)]
    +fn main() {
    +type Opaque<'x, 'y> = impl Trait<'x, 'y>;
    +
    +fn good<'a, 'b>() -> Opaque<'a, 'b> {}
    +
    +fn bad<'a>() -> Opaque<'a, 'a> {}
    +//~^ ERROR
    +}
    +

    Semantic lifetime equality: +One complexity with lifetimes compared to type parameters is that +two lifetimes that are syntactically different may be semantically equal. +Therefore, we need to be cautious when verifying that the lifetimes are unique.

    +
    #![allow(unused)]
    +fn main() {
    +// This is also invalid because `'a` is *semantically* equal to `'static`.
    +fn still_bad_1<'a: 'static>() -> Opaque<'a> {}
    +//~^ Should error!
    +
    +// This is also invalid because `'a` and `'b` are *semantically* equal.
    +fn still_bad_2<'a: 'b, 'b: 'a>() -> Opaque<'a, 'b> {}
    +//~^ Should error!
    +}
    +

    An exception to uniqueness rule

    +

    An exception to the uniqueness rule above is when the bounds at the opaque type's definition require +a lifetime parameter to be equal to another one or to the 'static lifetime.

    +
    #![allow(unused)]
    +fn main() {
    +// The definition requires `'x` to be equal to `'static`.
    +type Opaque<'x: 'static> = impl Sized + 'x;
    +
    +fn good() -> Opaque<'static> {}
    +}
    +

    Motivation: an attempt to implement the uniqueness restriction for RPITs resulted in a +breakage found by crater. +This can be mitigated by this exception to the rule. +An example of the code that would otherwise break:

    +
    #![allow(unused)]
    +fn main() {
    +struct Type<'a>(&'a ());
    +impl<'a> Type<'a> {
    +    // `'b == 'a`
    +    fn do_stuff<'b: 'a>(&'b self) -> impl Trait<'a, 'b> {}
    +}
    +}
    +

    Why this is correct: for such a defining use like Opaque<'a, 'a> := &'a str, +it can be interpreted in either way—either as Opaque<'x, 'y> := &'x str or as +Opaque<'x, 'y> := &'y str and it wouldn't matter because every use of Opaque +will guarantee that both parameters are equal as per the well-formedness rules.

    +

    Universal lifetimes restriction

    +

    Only universally quantified lifetimes are allowed in the opaque type arguments. +This includes lifetime parameters and placeholders.

    +
    #![allow(unused)]
    +fn main() {
    +type Opaque<'x> = impl Sized + 'x;
    +
    +fn test<'a>() -> Opaque<'a> {
    +    // `Opaque<'empty> := ()`
    +    let _: Opaque<'_> = ();
    +    //~^ ERROR
    +}
    +}
    +

    Motivation: +This makes the lifetime and type arguments behave consistently but this is only as a bonus. +The real reason behind this restriction is purely technical, as the member constraints algorithm +faces a fundamental limitation: +When encountering an opaque type definition Opaque<'?1> := &'?2 u8, +a member constraint '?2 member-of ['static, '?1] is registered. +In order for the algorithm to pick the right choice, the complete set of "outlives" relationships +between the choice regions ['static, '?1] must already be known before doing the region +inference. This can be satisfied only if each choice region is either:

    +
      +
    1. a universal region, i.e. RegionKind::Re{EarlyParam,LateParam,Placeholder,Static}, +because the relations between universal regions are completely known, prior to region inference, +from the explicit and implied bounds.
    2. +
    3. or an existential region that is "strictly equal" to a universal region. +Strict lifetime equality is defined below and is required here because it is the only type of +equality that can be evaluated prior to full region inference.
    4. +
    +

    Strict lifetime equality: +We say that two lifetimes are strictly equal if there are bidirectional outlives constraints +between them. In NLL terms, this means the lifetimes are part of the same SCC. +Importantly this type of equality can be evaluated prior to full region inference +(but of course after constraint collection). +The other type of equality is when region inference ends up giving two lifetimes variables +the same value even if they are not strictly equal. +See #113971 for how we used to conflate the difference.

    +

    interaction with "once modulo regions" restriction +In the example above, note the opaque type in the signature is Opaque<'a> and the one in the +invalid defining use is Opaque<'empty>. +In the proposed MiniTAIT plan, namely the "once modulo regions" rule, +we already disallow this. +Although it might appear that "universal lifetimes" restriction becomes redundant as it logically +follows from "MiniTAIT" restrictions, the subsequent related discussion on lifetime equality and +closures remains relevant.

    +

    Closure restrictions

    +

    When the opaque type is defined in a closure/coroutine/inline-const body, universal lifetimes that +are "external" to the closure are not allowed in the opaque type arguments. +External regions are defined in RegionClassification::External

    +

    Example: (This one happens to compile in the current nightly but more practical examples are +already rejected with confusing errors.)

    +
    #![allow(unused)]
    +fn main() {
    +type Opaque<'x> = impl Sized + 'x;
    +
    +fn test<'a>() -> Opaque<'a> {
    +    let _ = || {
    +        // `'a` is external to the closure
    +        let _: Opaque<'a> = ();
    +        //~^ Should be an error!
    +    };
    +    ()
    +}
    +}
    +

    Motivation: +In closure bodies, external lifetimes, although being categorized as "universal" lifetimes, +behave more like existential lifetimes in that the relations between them are not known ahead of +time, instead their values are inferred just like existential lifetimes and the requirements are +propagated back to the parent fn. This breaks the member constraints algorithm as described above:

    +
    +

    In order for the algorithm to pick the right choice, the complete set of “outlives” relationships +between the choice regions ['static, '?1] must already be known before doing the region inference

    +
    +

    Here is an example that details how :

    +
    #![allow(unused)]
    +fn main() {
    +type Opaque<'x, 'y> = impl Sized;
    +
    +// 
    +fn test<'a, 'b>(s: &'a str) -> impl FnOnce() -> Opaque<'a, 'b> {
    +    move || { s }
    +    //~^ ERROR hidden type for `Opaque<'_, '_>` captures lifetime that does not appear in bounds
    +}
    +
    +// The above closure body is desugared into something like:
    +fn test::{closure#0}(_upvar: &'?8 str) -> Opaque<'?6, '?7> {
    +    return _upvar
    +}
    +
    +// where `['?8, '?6, ?7]` are universal lifetimes *external* to the closure.
    +// There are no known relations between them *inside* the closure.
    +// But in the parent fn it is known that `'?6: '?8`.
    +//
    +// When encountering an opaque definition `Opaque<'?6, '?7> := &'8 str`,
    +// The member constraints algorithm does not know enough to safely make `?8 = '?6`.
    +// For this reason, it errors with a sensible message:
    +// "hidden type captures lifetime that does not appear in bounds".
    +}
    +

    Without these restrictions, error messages are confusing and, more importantly, there is a risk that +we accept code that would likely break in the future because member constraints are super broken +in closures.

    +

    Output types: +I believe the most common scenario where this causes issues in real-world code is with +closure/async-block output types. It is worth noting that there is a discrepancy between closures +and async blocks that further demonstrates this issue and is attributed to the +hack of replace_opaque_types_with_inference_vars, +which is applied to futures only.

    +
    #![allow(unused)]
    +fn main() {
    +type Opaque<'x> = impl Sized + 'x;
    +fn test<'a>() -> impl FnOnce() -> Opaque<'a> {
    +    // Output type of the closure is Opaque<'a>
    +    // -> hidden type definition happens *inside* the closure
    +    // -> rejected.
    +    move || {}
    +    //~^ ERROR expected generic lifetime parameter, found `'_`
    +}
    +}
    +
    #![allow(unused)]
    +fn main() {
    +use std::future::Future;
    +type Opaque<'x> = impl Sized + 'x;
    +fn test<'a>() -> impl Future<Output = Opaque<'a>> {
    +    // Output type of the async block is unit `()`
    +    // -> hidden type definition happens in the parent fn
    +    // -> accepted.
    +    async move {}
    +}
    +}
    +

    Effects and const condition checking

    +

    The HostEffect predicate

    +

    HostEffectPredicates are a kind of predicate from ~const Tr or const Tr +bounds. It has a trait reference, and a constness which could be Maybe or +Const depending on the bound. Because ~const Tr, or rather Maybe bounds +apply differently based on whichever contexts they are in, they have different +behavior than normal bounds. Where normal trait bounds on a function such as +T: Tr are collected within the predicates_of query to be proven when a +function is called and to be assumed within the function, bounds such as +T: ~const Tr will behave as a normal trait bound and add T: Tr to the result +from predicates_of, but also adds a HostEffectPredicate to the +const_conditions query.

    +

    On the other hand, T: const Tr bounds do not change meaning across contexts, +therefore they will result in HostEffect(T: Tr, const) being added to +predicates_of, and not const_conditions.

    +

    The const_conditions query

    +

    predicates_of represents a set of predicates that need to be proven to use an +item. For example, to use foo in the example below:

    +
    #![allow(unused)]
    +fn main() {
    +fn foo<T>() where T: Default {}
    +}
    +

    We must be able to prove that T implements Default. In a similar vein, +const_conditions represents a set of predicates that need to be proven to use +an item in const contexts. If we adjust the example above to use const trait +bounds:

    +
    #![allow(unused)]
    +fn main() {
    +const fn foo<T>() where T: ~const Default {}
    +}
    +

    Then foo would get a HostEffect(T: Default, maybe) in the const_conditions +query, suggesting that in order to call foo from const contexts, one must +prove that T has a const implementation of Default.

    +

    Enforcement of const_conditions

    +

    const_conditions are currently checked in various places.

    +

    Every call in HIR from a const context (which includes const fn and const +items) will check that const_conditions of the function we are calling hold. +This is done in FnCtxt::enforce_context_effects. Note that we don't check +if the function is only referred to but not called, as the following code needs +to compile:

    +
    #![allow(unused)]
    +fn main() {
    +const fn hi<T: ~const Default>() -> T {
    +    T::default()
    +}
    +const X: fn() -> u32 = hi::<u32>;
    +}
    +

    For a trait impl to be well-formed, we must be able to prove the +const_conditions of the trait from the impl's environment. This is checked +in wfcheck::check_impl.

    +

    Here's an example:

    +
    #![allow(unused)]
    +fn main() {
    +#[const_trait]
    +trait Bar {}
    +#[const_trait]
    +trait Foo: ~const Bar {}
    +// `const_conditions` contains `HostEffect(Self: Bar, maybe)`
    +
    +impl const Bar for () {}
    +impl const Foo for () {}
    +// ^ here we check `const_conditions` for the impl to be well-formed
    +}
    +

    Methods of trait impls must not have stricter bounds than the method of the +trait that they are implementing. To check that the methods are compatible, a +hybrid environment is constructed with the predicates of the impl plus the +predicates of the trait method, and we attempt to prove the predicates of the +impl method. We do the same for const_conditions:

    +
    #![allow(unused)]
    +fn main() {
    +#[const_trait]
    +trait Foo {
    +    fn hi<T: ~const Default>();
    +}
    +
    +impl<T: ~const Clone> Foo for Vec<T> {
    +    fn hi<T: ~const PartialEq>();
    +    // ^ we can't prove `T: ~const PartialEq` given `T: ~const Clone` and
    +    // `T: ~const Default`, therefore we know that the method on the impl
    +    // is stricter than the method on the trait.
    +}
    +}
    +

    These checks are done in compare_method_predicate_entailment. A similar +function that does the same check for associated types is called +compare_type_predicate_entailment. Both of these need to consider +const_conditions when in const contexts.

    +

    In MIR, as part of const checking, const_conditions of items that are called +are revalidated again in Checker::revalidate_conditional_constness.

    +

    explicit_implied_const_bounds on associated types and traits

    +

    Bounds on associated types, opaque types, and supertraits such as

    +
    #![allow(unused)]
    +fn main() {
    +trait Foo: ~const PartialEq {
    +    type X: ~const PartialEq;
    +}
    +
    +fn foo() -> impl ~const PartialEq {
    +    // ^ unimplemented syntax
    +}
    +}
    +

    Have their bounds represented differently. Unlike const_conditions which need +to be proved for callers, and can be assumed inside the definition (e.g. trait +bounds on functions), these bounds need to be proved at definition (at the impl, +or when returning the opaque) but can be assumed for callers. The non-const +equivalent of these bounds are called explicit_item_bounds.

    +

    These bounds are checked in compare_impl_item::check_type_bounds for HIR +typeck, evaluate_host_effect_from_item_bounds in the old solver and +consider_additional_alias_assumptions in the new solver.

    +

    Proving HostEffectPredicates

    +

    HostEffectPredicates are implemented both in the old solver and the new +trait solver. In general, we can prove a HostEffect predicate when either of +these conditions are met:

    +
      +
    • The predicate can be assumed from caller bounds;
    • +
    • The type has a const impl for the trait, and that const conditions on +the impl holds, and that the explicit_implied_const_bounds on the trait +holds; or
    • +
    • The type has a built-in implementation for the trait in const contexts. For +example, Fn may be implemented by function items if their const conditions +are satisfied, or Destruct is implemented in const contexts if the type can +be dropped at compile time.
    • +
    +

    Pattern and exhaustiveness checking

    +

    In Rust, pattern matching and bindings have a few very helpful properties. The +compiler will check that bindings are irrefutable when made and that match arms +are exhaustive.

    +

    Pattern usefulness

    +

    The central question that usefulness checking answers is: +"in this match expression, is that branch redundant?". +More precisely, it boils down to computing whether, +given a list of patterns we have already seen, +a given new pattern might match any new value.

    +

    For example, in the following match expression, +we ask in turn whether each pattern might match something +that wasn't matched by the patterns above it. +Here we see the 4th pattern is redundant with the 1st; +that branch will get an "unreachable" warning. +The 3rd pattern may or may not be useful, +depending on whether Foo has other variants than Bar. +Finally, we can ask whether the whole match is exhaustive +by asking whether the wildcard pattern (_) +is useful relative to the list of all the patterns in that match. +Here we can see that _ is useful (it would catch (false, None)); +this expression would therefore get a "non-exhaustive match" error.

    +
    #![allow(unused)]
    +fn main() {
    +// x: (bool, Option<Foo>)
    +match x {
    +    (true, _) => {} // 1
    +    (false, Some(Foo::Bar)) => {} // 2
    +    (false, Some(_)) => {} // 3
    +    (true, None) => {} // 4
    +}
    +}
    +

    Thus usefulness is used for two purposes: +detecting unreachable code (which is useful to the user), +and ensuring that matches are exhaustive (which is important for soundness, +because a match expression can return a value).

    +

    Where it happens

    +

    This check is done anywhere you can write a pattern: match expressions, if let, let else, +plain let, and function arguments.

    +
    #![allow(unused)]
    +fn main() {
    +// `match`
    +// Usefulness can detect unreachable branches and forbid non-exhaustive matches.
    +match foo() {
    +    Ok(x) => x,
    +    Err(_) => panic!(),
    +}
    +
    +// `if let`
    +// Usefulness can detect unreachable branches.
    +if let Some(x) = foo() {
    +    // ...
    +}
    +
    +// `while let`
    +// Usefulness can detect infinite loops and dead loops.
    +while let Some(x) = it.next() {
    +    // ...
    +}
    +
    +// Destructuring `let`
    +// Usefulness can forbid non-exhaustive patterns.
    +let Foo::Bar(x, y) = foo();
    +
    +// Destructuring function arguments
    +// Usefulness can forbid non-exhaustive patterns.
    +fn foo(Foo { x, y }: Foo) {
    +    // ...
    +}
    +}
    +

    The algorithm

    +

    Exhaustiveness checking is run before MIR building in check_match. +It is implemented in the rustc_pattern_analysis crate, +with the core of the algorithm in the usefulness module. +That file contains a detailed description of the algorithm.

    +

    Important concepts

    +

    Constructors and fields

    +

    In the value Pair(Some(0), true), Pair is called the constructor of the value, and Some(0) and +true are its fields. Every matchable value can be decomposed in this way. Examples of +constructors are: Some, None, (,) (the 2-tuple constructor), Foo {..} (the constructor for +a struct Foo), and 2 (the constructor for the number 2).

    +

    Each constructor takes a fixed number of fields; this is called its arity. Pair and (,) have +arity 2, Some has arity 1, None and 42 have arity 0. Each type has a known set of +constructors. Some types have many constructors (like u64) or even an infinitely many (like &str +and &[T]).

    +

    Patterns are similar: Pair(Some(_), _) has constructor Pair and two fields. The difference is +that we get some extra pattern-only constructors, namely: the wildcard _, variable bindings, +integer ranges like 0..=10, and variable-length slices like [_, .., _]. We treat or-patterns +separately.

    +

    Now to check if a value v matches a pattern p, we check if v's constructor matches p's +constructor, then recursively compare their fields if necessary. A few representative examples:

    +
      +
    • matches!(v, _) := true
    • +
    • matches!((v0, v1), (p0, p1)) := matches!(v0, p0) && matches!(v1, p1)
    • +
    • matches!(Foo { a: v0, b: v1 }, Foo { a: p0, b: p1 }) := matches!(v0, p0) && matches!(v1, p1)
    • +
    • matches!(Ok(v0), Ok(p0)) := matches!(v0, p0)
    • +
    • matches!(Ok(v0), Err(p0)) := false (incompatible variants)
    • +
    • matches!(v, 1..=100) := matches!(v, 1) || ... || matches!(v, 100)
    • +
    • matches!([v0], [p0, .., p1]) := false (incompatible lengths)
    • +
    • matches!([v0, v1, v2], [p0, .., p1]) := matches!(v0, p0) && matches!(v2, p1)
    • +
    +

    This concept is absolutely central to pattern analysis. The constructor module provides +functions to extract, list and manipulate constructors. This is a useful enough concept that +variations of it can be found in other places of the compiler, like in the MIR-lowering of a match +expression and in some clippy lints.

    +

    Constructor grouping and splitting

    +

    The pattern-only constructors (_, ranges and variable-length slices) each stand for a set of +normal constructors, e.g. _: Option<T> stands for the set {None, Some} and [_, .., _] stands +for the infinite set {[,], [,,], [,,,], ...} of the slice constructors of arity >= 2.

    +

    In order to manage these constructors, we keep them as grouped as possible. For example:

    +
    #![allow(unused)]
    +fn main() {
    +match (0, false) {
    +    (0 ..=100, true) => {}
    +    (50..=150, false) => {}
    +    (0 ..=200, _) => {}
    +}
    +}
    +

    In this example, all of 0, 1, .., 49 match the same arms, and thus can be treated as a group. +In fact, in this match, the only ranges we need to consider are: 0..50, 50..=100, +101..=150,151..=200 and 201... Similarly:

    +
    #![allow(unused)]
    +fn main() {
    +enum Direction { North, South, East, West }
    +let wind = (Direction::North, 0u8);
    +match wind {
    +    (Direction::North, 50..) => {}
    +    (_, _) => {}
    +}
    +}
    +

    Here we can treat all the non-North constructors as a group, giving us only two cases to handle: +North, and everything else.

    +

    This is called "constructor splitting" and is crucial to having exhaustiveness run in reasonable +time.

    +

    Usefulness vs reachability in the presence of empty types

    +

    This is likely the subtlest aspect of exhaustiveness. To be fully precise, a match doesn't operate +on a value, it operates on a place. In certain unsafe circumstances, it is possible for a place to +not contain valid data for its type. This has subtle consequences for empty types. Take the +following:

    +
    #![allow(unused)]
    +fn main() {
    +enum Void {}
    +let x: u8 = 0;
    +let ptr: *const Void = &x as *const u8 as *const Void;
    +unsafe {
    +    match *ptr {
    +        _ => println!("Reachable!"),
    +    }
    +}
    +}
    +

    In this example, ptr is a valid pointer pointing to a place with invalid data. The _ pattern +does not look at the contents of the place *ptr, so this code is ok and the arm is taken. In other +words, despite the place we are inspecting being of type Void, there is a reachable arm. If the +arm had a binding however:

    +
    #![allow(unused)]
    +fn main() {
    +#[derive(Copy, Clone)]
    +enum Void {}
    +let x: u8 = 0;
    +let ptr: *const Void = &x as *const u8 as *const Void;
    +unsafe {
    +match *ptr {
    +    _a => println!("Unreachable!"),
    +}
    +}
    +}
    +

    Here the binding loads the value of type Void from the *ptr place. In this example, this causes +UB since the data is not valid. In the general case, this asserts validity of the data at *ptr. +Either way, this arm will never be taken.

    +

    Finally, let's consider the empty match match *ptr {}. If we consider this exhaustive, then +having invalid data at *ptr is invalid. In other words, the empty match is semantically +equivalent to the _a => ... match. In the interest of explicitness, we prefer the case with an +arm, hence we won't tell the user to remove the _a arm. In other words, the _a arm is +unreachable yet not redundant. This is why we lint on redundant arms rather than unreachable +arms, despite the fact that the lint says "unreachable".

    +

    These considerations only affects certain places, namely those that can contain non-valid data +without UB. These are: pointer dereferences, reference dereferences, and union field accesses. We +track during exhaustiveness checking whether a given place is known to contain valid data.

    +

    Having said all that, the current implementation of exhaustiveness checking does not follow the +above considerations. On stable, empty types are for the most part treated as non-empty. The +exhaustive_patterns feature errs on the other end: it allows omitting arms that could be +reachable in unsafe situations. The never_patterns experimental feature aims to fix this and +permit the correct behavior of empty types in patterns.

    +

    Unsafety checking

    +

    Certain expressions in Rust can violate memory safety and as such need to be +inside an unsafe block or function. The compiler will also warn if an unsafe +block is used without any corresponding unsafe operations.

    +

    Overview

    +

    The unsafety check is located in the check_unsafety module. It performs a +walk over the THIR of a function and all of its closures and inline constants. +It keeps track of the unsafe context: whether it has entered an unsafe block. +If an unsafe operation is used outside of an unsafe block, then an error is +reported. If an unsafe operation is used in an unsafe block then that block is +marked as used for the unused_unsafe lint.

    +

    The unsafety check needs type information so could potentially be done on the +HIR, making use of typeck results, THIR or MIR. THIR is chosen because there are +fewer cases to consider than in HIR, for example unsafe function calls and +unsafe method calls have the same representation in THIR. The check is not done +on MIR because safety checks do not depend on control flow so MIR is not +necessary to use and MIR doesn't have as precise spans for some expressions.

    +

    Most unsafe operations can be identified by checking the ExprKind in THIR and +checking the type of the argument. For example, dereferences of a raw pointer +correspond to ExprKind::Derefs with an argument that has a raw pointer type.

    +

    Looking for unsafe Union field accesses is a bit more complex because writing to +a field of a union is safe. The checker tracks when it's visiting the left-hand +side of an assignment expression and allows union fields to directly appear +there, while erroring in all other cases. Union field accesses can also occur +in patterns, so those have to be walked as well.

    +

    The other complicated safety check is for writes to fields of layout constrained +structs (such as NonNull). These are found by looking for the borrow or +assignment expression and then visiting the subexpression being borrowed or +assigned with a separate visitor.

    +

    The unused_unsafe lint

    +

    The unused_unsafe lint reports unsafe blocks that can be removed. The unsafety +checker records whenever it finds an operation that requires unsafe. The lint is +then reported if either:

    +
      +
    • An unsafe block contains no unsafe operations
    • +
    • An unsafe block is within another unsafe block, and the outer block +isn't considered unused
    • +
    +
    #![allow(unused)]
    +#![deny(unused_unsafe)]
    +fn main() {
    +let y = 0;
    +let x: *const u8 = core::ptr::addr_of!(y);
    +unsafe { // lint reported for this block
    +    unsafe {
    +        let z = *x;
    +    }
    +    let safe_expr = 123;
    +}
    +unsafe {
    +    unsafe { // lint reported for this block
    +        let z = *x;
    +    }
    +    let unsafe_expr = *x;
    +}
    +}
    +

    Other checks involving unsafe

    +

    Unsafe traits require an unsafe impl to be implemented, the check for this +is done as part of coherence. The unsafe_code lint is run as a lint pass on +the ast that searches for unsafe blocks, functions and implementations, as well +as certain unsafe attributes.

    +

    Dataflow Analysis

    + +

    If you work on the MIR, you will frequently come across various flavors of +dataflow analysis. rustc uses dataflow to find uninitialized +variables, determine what variables are live across a generator yield +statement, and compute which Places are borrowed at a given point in the +control-flow graph. Dataflow analysis is a fundamental concept in modern +compilers, and knowledge of the subject will be helpful to prospective +contributors.

    +

    However, this documentation is not a general introduction to dataflow analysis. +It is merely a description of the framework used to define these analyses in +rustc. It assumes that the reader is familiar with the core ideas as well as +some basic terminology, such as "transfer function", "fixpoint" and "lattice". +If you're unfamiliar with these terms, or if you want a quick refresher, +Static Program Analysis by Anders Møller and Michael I. Schwartzbach is an +excellent, freely available textbook. For those who prefer audiovisual +learning, we previously recommended a series of short lectures +by the Goethe University Frankfurt on YouTube, but it has since been deleted. +See this PR for the context and this comment +for the alternative lectures.

    +

    Defining a Dataflow Analysis

    +

    A dataflow analysis is defined by the Analysis trait. In addition to the +type of the dataflow state, this trait defines the initial value of that state +at entry to each block, as well as the direction of the analysis, either +forward or backward. The domain of your dataflow analysis must be a lattice +(strictly speaking a join-semilattice) with a well-behaved join operator. See +documentation for the lattice module, as well as the JoinSemiLattice +trait, for more information.

    +

    Transfer Functions and Effects

    +

    The dataflow framework in rustc allows each statement (and terminator) inside +a basic block to define its own transfer function. For brevity, these +individual transfer functions are known as "effects". Each effect is applied +successively in dataflow order, and together they define the transfer function +for the entire basic block. It's also possible to define an effect for +particular outgoing edges of some terminators (e.g. +apply_call_return_effect for the success edge of a Call +terminator). Collectively, these are referred to as "per-edge effects".

    +

    "Before" Effects

    +

    Observant readers of the documentation may notice that there are actually two +possible effects for each statement and terminator, the "before" effect and the +unprefixed (or "primary") effect. The "before" effects are applied immediately +before the unprefixed effect regardless of the direction of the analysis. +In other words, a backward analysis will apply the "before" effect and then the +"primary" effect when computing the transfer function for a basic block, just +like a forward analysis.

    +

    The vast majority of analyses should use only the unprefixed effects: Having +multiple effects for each statement makes it difficult for consumers to know +where they should be looking. However, the "before" variants can be useful in +some scenarios, such as when the effect of the right-hand side of an assignment +statement must be considered separately from the left-hand side.

    +

    Convergence

    +

    Your analysis must converge to "fixpoint", otherwise it will run forever. +Converging to fixpoint is just another way of saying "reaching equilibrium". +In order to reach equilibrium, your analysis must obey some laws. One of the +laws it must obey is that the bottom value1 joined with some +other value equals the second value. Or, as an equation:

    +
    +

    bottom join x = x

    +
    +

    Another law is that your analysis must have a "top value" such that

    +
    +

    top join x = top

    +
    +

    Having a top value ensures that your semilattice has a finite height, and the +law state above ensures that once the dataflow state reaches top, it will no +longer change (the fixpoint will be top).

    +

    A Brief Example

    +

    This section provides a brief example of a simple data-flow analysis at a high +level. It doesn't explain everything you need to know, but hopefully it will +make the rest of this page clearer.

    +

    Let's say we want to do a simple analysis to find if mem::transmute may have +been called by a certain point in the program. Our analysis domain will just +be a bool that records whether transmute has been called so far. The bottom +value will be false, since by default transmute has not been called. The top +value will be true, since our analysis is done as soon as we determine that +transmute has been called. Our join operator will just be the boolean OR (||) +operator. We use OR and not AND because of this case:

    +
    #![allow(unused)]
    +fn main() {
    +unsafe fn example(some_cond: bool) {
    +let x = if some_cond {
    +    std::mem::transmute::<i32, u32>(0_i32) // transmute was called!
    +} else {
    +    1_u32 // transmute was not called
    +};
    +
    +// Has transmute been called by this point? We conservatively approximate that
    +// as yes, and that is why we use the OR operator.
    +println!("x: {}", x);
    +}
    +}
    +

    Inspecting the Results of a Dataflow Analysis

    +

    Once you have constructed an analysis, you must call iterate_to_fixpoint +which will return a Results, which contains the dataflow state at fixpoint +upon entry of each block. Once you have a Results, you can inspect the +dataflow state at fixpoint at any point in the CFG. If you only need the state +at a few locations (e.g., each Drop terminator) use a ResultsCursor. If +you need the state at every location, a ResultsVisitor will be more +efficient.

    +
                             Analysis
    +                            |
    +                            | iterate_to_fixpoint()
    +                            |
    +                         Results
    +                         /     \
    + into_results_cursor(…) /       \  visit_with(…)
    +                       /         \
    +               ResultsCursor  ResultsVisitor
    +
    +

    For example, the following code uses a ResultsVisitor...

    +
    // Assuming `MyVisitor` implements `ResultsVisitor<FlowState = MyAnalysis::Domain>`...
    +let mut my_visitor = MyVisitor::new();
    +
    +// inspect the fixpoint state for every location within every block in RPO.
    +let results = MyAnalysis::new()
    +    .iterate_to_fixpoint(tcx, body, None);
    +results.visit_with(body, &mut my_visitor);`
    +

    whereas this code uses ResultsCursor:

    +
    let mut results = MyAnalysis::new()
    +    .iterate_to_fixpoint(tcx, body, None);
    +    .into_results_cursor(body);
    +
    +// Inspect the fixpoint state immediately before each `Drop` terminator.
    +for (bb, block) in body.basic_blocks().iter_enumerated() {
    +    if let TerminatorKind::Drop { .. } = block.terminator().kind {
    +        results.seek_before_primary_effect(body.terminator_loc(bb));
    +        let state = results.get();
    +        println!("state before drop: {:#?}", state);
    +    }
    +}
    +

    Graphviz Diagrams

    +

    When the results of a dataflow analysis are not what you expect, it often helps +to visualize them. This can be done with the -Z dump-mir flags described in +Debugging MIR. Start with -Z dump-mir=F -Z dump-mir-dataflow, where F is +either "all" or the name of the MIR body you are interested in.

    +

    These .dot files will be saved in your mir_dump directory and will have the +NAME of the analysis (e.g. maybe_inits) as part of their filename. Each +visualization will display the full dataflow state at entry and exit of each +block, as well as any changes that occur in each statement and terminator. See +the example below:

    +

    A graphviz diagram for a dataflow analysis

    +
    +
    1. +

      The bottom value's primary purpose is as the initial dataflow +state. Each basic block's entry state is initialized to bottom before the +analysis starts.

      +
    2. +

    Drop elaboration

    + +

    Dynamic drops

    +

    According to the reference:

    +
    +

    When an initialized variable or temporary goes out of scope, its destructor +is run, or it is dropped. Assignment also runs the destructor of its +left-hand operand, if it's initialized. If a variable has been partially +initialized, only its initialized fields are dropped.

    +
    +

    When building the MIR, the Drop and DropAndReplace terminators represent +places where drops may occur. However, in this phase, the presence of these +terminators does not guarantee that a destructor will run. That's because the +target of a drop may be uninitialized (usually because it has been moved from) +before the terminator is reached. In general, we cannot know at compile-time whether a +variable is initialized.

    +
    #![allow(unused)]
    +fn main() {
    +let mut y = vec![];
    +
    +{
    +    let x = vec![1, 2, 3];
    +    if std::process::id() % 2 == 0 {
    +        y = x; // conditionally move `x` into `y`
    +    }
    +} // `x` goes out of scope here. Should it be dropped?
    +}
    +

    In these cases, we need to keep track of whether a variable is initialized +dynamically. The rules are laid out in detail in RFC 320: Non-zeroing +dynamic drops.

    +

    Drop obligations

    +

    From the RFC:

    +
    +

    When a local variable becomes initialized, it establishes a set of "drop +obligations": a set of structural paths (e.g. a local a, or a path to a +field b.f.y) that need to be dropped.

    +

    The drop obligations for a local variable x of struct-type T are computed +from analyzing the structure of T. If T itself implements Drop, then x is a +drop obligation. If T does not implement Drop, then the set of drop +obligations is the union of the drop obligations of the fields of T.

    +
    +

    When a structural path is moved from (and thus becomes uninitialized), any drop +obligations for that path or its descendants (path.f, path.f.g.h, etc.) are +released. Types with Drop implementations do not permit moves from individual +fields, so there is no need to track initializedness through them.

    +

    When a local variable goes out of scope (Drop), or when a structural path is +overwritten via assignment (DropAndReplace), we check for any drop +obligations for that variable or path. Unless that obligation has been +released by this point, its associated Drop implementation will be called. +For enum types, only fields corresponding to the "active" variant need to be +dropped. When processing drop obligations for such types, we first check the +discriminant to determine the active variant. All drop obligations for variants +besides the active one are ignored.

    +

    Here are a few interesting types to help illustrate these rules:

    +
    #![allow(unused)]
    +fn main() {
    +struct NoDrop(u8); // No `Drop` impl. No fields with `Drop` impls.
    +
    +struct NeedsDrop(Vec<u8>); // No `Drop` impl but has fields with `Drop` impls.
    +
    +struct ThinVec(*const u8); // Custom `Drop` impl. Individual fields cannot be moved from.
    +
    +impl Drop for ThinVec {
    +    fn drop(&mut self) { /* ... */ }
    +}
    +
    +enum MaybeDrop {
    +    Yes(NeedsDrop),
    +    No(NoDrop),
    +}
    +}
    +

    Drop elaboration

    +

    One valid model for these rules is to keep a boolean flag (a "drop flag") for +every structural path that is used at any point in the function. This flag is +set when its path is initialized and is cleared when the path is moved from. +When a Drop occurs, we check the flags for every obligation associated with +the target of the Drop and call the associated Drop impl for those that are +still applicable.

    +

    This process—transforming the newly built MIR with its imprecise Drop and +DropAndReplace terminators into one with drop flags—is known as drop +elaboration. When a MIR statement causes a variable to become initialized (or +uninitialized), drop elaboration inserts code that sets (or clears) the drop +flag for that variable. It wraps Drop terminators in conditionals that check +the newly inserted drop flags.

    +

    Drop elaboration also splits DropAndReplace terminators into a Drop of the +target and a write of the newly dropped place. This is somewhat unrelated to what +we've discussed above.

    +

    Once this is complete, Drop terminators in the MIR correspond to a call to +the "drop glue" or "drop shim" for the type of the dropped place. The drop +glue for a type calls the Drop impl for that type (if one exists), and then +recursively calls the drop glue for all fields of that type.

    +

    Drop elaboration in rustc

    +

    The approach described above is more expensive than necessary. One can imagine +a few optimizations:

    +
      +
    • Only paths that are the target of a Drop (or have the target as a prefix) +need drop flags.
    • +
    • Some variables are known to be initialized (or uninitialized) when they are +dropped. These do not need drop flags.
    • +
    • If a set of paths are only dropped or moved from via a shared prefix, those +paths can share a single drop flag.
    • +
    +

    A subset of these are implemented in rustc.

    +

    In the compiler, drop elaboration is split across several modules. The pass +itself is defined here, but the main logic is +defined elsewhere since it is also used to build drop shims.

    +

    Drop elaboration designates each Drop in the newly built MIR as one of four +kinds:

    +
      +
    • Static, the target is always initialized.
    • +
    • Dead, the target is always uninitialized.
    • +
    • Conditional, the target is either wholly initialized or wholly +uninitialized. It is not partly initialized.
    • +
    • Open, the target may be partly initialized.
    • +
    +

    For this, it uses a pair of dataflow analyses, MaybeInitializedPlaces and +MaybeUninitializedPlaces. If a place is in one but not the other, then the +initializedness of the target is known at compile-time (Dead or Static). +In this case, drop elaboration does not add a flag for the target. It simply +removes (Dead) or preserves (Static) the Drop terminator.

    +

    For Conditional drops, we know that the initializedness of the variable as a +whole is the same as the initializedness of its fields. Therefore, once we +generate a drop flag for the target of that drop, it's safe to call the drop +glue for that target.

    +

    Open drops

    +

    Open drops are the most complex, since we need to break down a single Drop +terminator into several different ones, one for each field of the target whose +type has drop glue (Ty::needs_drop). We cannot call the drop glue for the +target itself because that requires all fields of the target to be initialized. +Remember, variables whose type has a custom Drop impl do not allow Open +drops because their fields cannot be moved from.

    +

    This is accomplished by recursively categorizing each field as Dead, +Static, Conditional or Open. Fields whose type does not have drop glue +are automatically Dead and need not be considered during the recursion. When +we reach a field whose kind is not Open, we handle it as we did above. If the +field is also Open, the recursion continues.

    +

    It's worth noting how we handle Open drops of enums. Inside drop elaboration, +each variant of the enum is treated like a field, with the invariant that only +one of those "variant fields" can be initialized at any given time. In the +general case, we do not know which variant is the active one, so we will have +to call the drop glue for the enum (which checks the discriminant) or check the +discriminant ourselves as part of an elaborated Open drop. However, in +certain cases (within a match arm, for example) we do know which variant of +an enum is active. This information is encoded in the MaybeInitializedPlaces +and MaybeUninitializedPlaces dataflow analyses by marking all places +corresponding to inactive variants as uninitialized.

    +

    Cleanup paths

    +

    TODO: Discuss drop elaboration and unwinding.

    +

    Aside: drop elaboration and const-eval

    +

    In Rust, functions that are eligible for evaluation at compile-time must be +marked explicitly using the const keyword. This includes implementations of +the Drop trait, which may or may not be const. Code that is eligible for +compile-time evaluation may only call const functions, so any calls to +non-const Drop implementations in such code must be forbidden.

    +

    A call to a Drop impl is encoded as a Drop terminator in the MIR. However, +as we discussed above, a Drop terminator in newly built MIR does not +necessarily result in a call to Drop::drop. The drop target may be +uninitialized at that point. This means that checking for non-const Drops on +the newly built MIR can result in spurious errors. Instead, we wait until after +drop elaboration runs, which eliminates Dead drops (ones where the target is +known to be uninitialized) to run these checks.

    +

    MIR borrow check

    +

    The borrow check is Rust's "secret sauce" – it is tasked with +enforcing a number of properties:

    +
      +
    • That all variables are initialized before they are used.
    • +
    • That you can't move the same value twice.
    • +
    • That you can't move a value while it is borrowed.
    • +
    • That you can't access a place while it is mutably borrowed (except through +the reference).
    • +
    • That you can't mutate a place while it is immutably borrowed.
    • +
    • etc
    • +
    +

    The borrow checker operates on the MIR. An older implementation operated on the +HIR. Doing borrow checking on MIR has several advantages:

    + +

    Major phases of the borrow checker

    +

    The borrow checker source is found in +the rustc_borrowck crate. The main entry point is +the mir_borrowck query.

    +
      +
    • We first create a local copy of the MIR. In the coming steps, +we will modify this copy in place to modify the types and things to +include references to the new regions that we are computing.
    • +
    • We then invoke replace_regions_in_mir to modify our local MIR. +Among other things, this function will replace all of the regions +in the MIR with fresh inference variables.
    • +
    • Next, we perform a number of +dataflow analyses that +compute what data is moved and when.
    • +
    • We then do a second type check across the MIR: +the purpose of this type check is to determine all of the constraints between +different regions.
    • +
    • Next, we do region inference, which computes +the values of each region — basically, the points in the control-flow graph where +each lifetime must be valid according to the constraints we collected.
    • +
    • At this point, we can compute the "borrows in scope" at each point.
    • +
    • Finally, we do a second walk over the MIR, looking at the actions it +does and reporting errors. For example, if we see a statement like +*a + 1, then we would check that the variable a is initialized +and that it is not mutably borrowed, as either of those would +require an error to be reported. Doing this check requires the results of all +the previous analyses.
    • +
    +

    Tracking moves and initialization

    +

    Part of the borrow checker's job is to track which variables are +"initialized" at any given point in time -- this also requires +figuring out where moves occur and tracking those.

    +

    Initialization and moves

    +

    From a user's perspective, initialization -- giving a variable some +value -- and moves -- transferring ownership to another place -- might +seem like distinct topics. Indeed, our borrow checker error messages +often talk about them differently. But within the borrow checker, +they are not nearly as separate. Roughly speaking, the borrow checker +tracks the set of "initialized places" at any point in the source +code. Assigning to a previously uninitialized local variable adds it +to that set; moving from a local variable removes it from that set.

    +

    Consider this example:

    +
    fn foo() {
    +    let a: Vec<u32>;
    +    
    +    // a is not initialized yet
    +    
    +    a = vec![22];
    +    
    +    // a is initialized here
    +    
    +    std::mem::drop(a); // a is moved here
    +    
    +    // a is no longer initialized here
    +
    +    let l = a.len(); //~ ERROR
    +}
    +

    Here you can see that a starts off as uninitialized; once it is +assigned, it becomes initialized. But when drop(a) is called, that +moves a into the call, and hence it becomes uninitialized again.

    +

    Subsections

    +

    To make it easier to peruse, this section is broken into a number of +subsections:

    +
      +
    • Move paths the +move path concept that we use to track which local variables (or parts of +local variables, in some cases) are initialized.
    • +
    • TODO Rest not yet written =)
    • +
    +

    Move paths

    + +

    In reality, it's not enough to track initialization at the granularity +of local variables. Rust also allows us to do moves and initialization +at the field granularity:

    +
    fn foo() {
    +    let a: (Vec<u32>, Vec<u32>) = (vec![22], vec![44]);
    +
    +    // a.0 and a.1 are both initialized
    +
    +    let b = a.0; // moves a.0
    +
    +    // a.0 is not initialized, but a.1 still is
    +
    +    let c = a.0; // ERROR
    +    let d = a.1; // OK
    +}
    +

    To handle this, we track initialization at the granularity of a move +path. A MovePath represents some location that the user can +initialize, move, etc. So e.g. there is a move-path representing the +local variable a, and there is a move-path representing a.0. Move +paths roughly correspond to the concept of a Place from MIR, but +they are indexed in ways that enable us to do move analysis more +efficiently.

    +

    Move path indices

    +

    Although there is a MovePath data structure, they are never referenced +directly. Instead, all the code passes around indices of type +MovePathIndex. If you need to get information about a move path, you use +this index with the move_paths field of the MoveData. For +example, to convert a MovePathIndex mpi into a MIR Place, you might +access the MovePath::place field like so:

    +
    move_data.move_paths[mpi].place
    +

    Building move paths

    +

    One of the first things we do in the MIR borrow check is to construct +the set of move paths. This is done as part of the +MoveData::gather_moves function. This function uses a MIR visitor +called MoveDataBuilder to walk the MIR and look at how each Place +within is accessed. For each such Place, it constructs a +corresponding MovePathIndex. It also records when/where that +particular move path is moved/initialized, but we'll get to that in a +later section.

    +

    Illegal move paths

    +

    We don't actually create a move-path for every Place that gets +used. In particular, if it is illegal to move from a Place, then +there is no need for a MovePathIndex. Some examples:

    +
      +
    • You cannot move from a static variable, so we do not create a MovePathIndex +for static variables.
    • +
    • You cannot move an individual element of an array, so if we have e.g. foo: [String; 3], +there would be no move-path for foo[1].
    • +
    • You cannot move from inside of a borrowed reference, so if we have e.g. foo: &String, +there would be no move-path for *foo.
    • +
    +

    These rules are enforced by the move_path_for function, which +converts a Place into a MovePathIndex -- in error cases like +those just discussed, the function returns an Err. This in turn +means we don't have to bother tracking whether those places are +initialized (which lowers overhead).

    +

    Looking up a move-path

    +

    If you have a Place and you would like to convert it to a MovePathIndex, you +can do that using the MovePathLookup structure found in the rev_lookup field +of MoveData. There are two different methods:

    +
      +
    • find_local, which takes a mir::Local representing a local +variable. This is the easier method, because we always create a +MovePathIndex for every local variable.
    • +
    • find, which takes an arbitrary Place. This method is a bit +more annoying to use, precisely because we don't have a +MovePathIndex for every Place (as we just discussed in +the "illegal move paths" section). Therefore, find returns a +LookupResult indicating the closest path it was able to find +that exists (e.g., for foo[1], it might return just the path for +foo).
    • +
    +

    Cross-references

    +

    As we noted above, move-paths are stored in a big vector and +referenced via their MovePathIndex. However, within this vector, +they are also structured into a tree. So for example if you have the +MovePathIndex for a.b.c, you can go to its parent move-path +a.b. You can also iterate over all children paths: so, from a.b, +you might iterate to find the path a.b.c (here you are iterating +just over the paths that are actually referenced in the source, +not all possible paths that could have been referenced). These +references are used for example in the +find_in_move_path_or_its_descendants function, which determines +whether a move-path (e.g., a.b) or any child of that move-path +(e.g.,a.b.c) matches a given predicate.

    +

    The MIR type-check

    +

    A key component of the borrow check is the +MIR type-check. +This check walks the MIR and does a complete "type check" -- the same +kind you might find in any other language. In the process of doing +this type-check, we also uncover the region constraints that apply to +the program.

    +

    TODO -- elaborate further? Maybe? :)

    +

    User types

    +

    At the start of MIR type-check, we replace all regions in the body with new unconstrained regions. +However, this would cause us to accept the following program:

    +
    #![allow(unused)]
    +fn main() {
    +fn foo<'a>(x: &'a u32) {
    +    let y: &'static u32 = x;
    +}
    +}
    +

    By erasing the lifetimes in the type of y we no longer know that it is supposed to be 'static, +ignoring the intentions of the user.

    +

    To deal with this we remember all places where the user explicitly mentioned a type during +HIR type-check as CanonicalUserTypeAnnotations.

    +

    There are two different annotations we care about:

    +
      +
    • explicit type ascriptions, e.g. let y: &'static u32 results in UserType::Ty(&'static u32).
    • +
    • explicit generic arguments, e.g. x.foo<&'a u32, Vec<String>> +results in UserType::TypeOf(foo_def_id, [&'a u32, Vec<String>]).
    • +
    +

    As we do not want the region inference from the HIR type-check to influence MIR typeck, +we store the user type right after lowering it from the HIR. +This means that it may still contain inference variables, +which is why we are using canonical user type annotations. +We replace all inference variables with existential bound variables instead. +Something like let x: Vec<_> would therefore result in exists<T> UserType::Ty(Vec<T>).

    +

    A pattern like let Foo(x): Foo<&'a u32> has a user type Foo<&'a u32> but +the actual type of x should only be &'a u32. For this, we use a UserTypeProjection.

    +

    In the MIR, we deal with user types in two slightly different ways.

    +

    Given a MIR local corresponding to a variable in a pattern which has an explicit type annotation, +we require the type of that local to be equal to the type of the UserTypeProjection. +This is directly stored in the LocalDecl.

    +

    We also constrain the type of scrutinee expressions, e.g. the type of x in let _: &'a u32 = x;. +Here T_x only has to be a subtype of the user type, so we instead use +StatementKind::AscribeUserType for that.

    +

    Note that we do not directly use the user type as the MIR typechecker +doesn't really deal with type and const inference variables. We instead store the final +inferred_type from the HIR type-checker. During MIR typeck, we then replace its regions +with new nll inference vars and relate it with the actual UserType to get the correct region +constraints again.

    +

    After the MIR type-check, all user type annotations get discarded, as they aren't needed anymore.

    +

    Drop Check

    +

    We generally require the type of locals to be well-formed whenever the +local is used. This includes proving the where-bounds of the local and +also requires all regions used by it to be live.

    +

    The only exception to this is when implicitly dropping values when they +go out of scope. This does not necessarily require the value to be live:

    +
    fn main() {
    +    let x = vec![];
    +    {
    +        let y = String::from("I am temporary");
    +        x.push(&y);
    +    }
    +    // `x` goes out of scope here, after the reference to `y`
    +    // is invalidated. This means that while dropping `x` its type
    +    // is not well-formed as it contain regions which are not live.
    +}
    +

    This is only sound if dropping the value does not try to access any dead +region. We check this by requiring the type of the value to be +drop-live. +The requirements for which are computed in fn dropck_outlives.

    +

    The rest of this section uses the following type definition for a type +which requires its region parameter to be live:

    +
    #![allow(unused)]
    +fn main() {
    +struct PrintOnDrop<'a>(&'a str);
    +impl<'a> Drop for PrintOnDrop<'_> {
    +    fn drop(&mut self) {
    +        println!("{}", self.0);
    +    }
    +}
    +}
    +

    How values are dropped

    +

    At its core, a value of type T is dropped by executing its "drop +glue". Drop glue is compiler generated and first calls <T as Drop>::drop and then recursively calls the drop glue of any recursively +owned values.

    +
      +
    • If T has an explicit Drop impl, call <T as Drop>::drop.
    • +
    • Regardless of whether T implements Drop, recurse into all values +owned by T: +
        +
      • references, raw pointers, function pointers, function items, trait +objects1, and scalars do not own anything.
      • +
      • tuples, slices, and arrays consider their elements to be owned. +For arrays of length zero we do not own any value of the element +type.
      • +
      • all fields (of all variants) of ADTs are considered owned. We +consider all variants for enums. The exception here is +ManuallyDrop<U> which is not considered to own U. +PhantomData<U> also does not own anything. +closures and generators own their captured upvars.
      • +
      +
    • +
    +

    Whether a type has drop glue is returned by fn Ty::needs_drop.

    +

    Partially dropping a local

    +

    For types which do not implement Drop themselves, we can also +partially move parts of the value before dropping the rest. In this case +only the drop glue for the not-yet moved values is called, e.g.

    +
    fn main() {
    +    let mut x = (PrintOnDrop("third"), PrintOnDrop("first"));
    +    drop(x.1);
    +    println!("second")
    +}
    +

    During MIR building we assume that a local may get dropped whenever it +goes out of scope as long as its type needs drop. Computing the exact +drop glue for a variable happens after borrowck in the +ElaborateDrops pass. This means that even if some part of the local +have been dropped previously, dropck still requires this value to be +live. This is the case even if we completely moved a local.

    +
    fn main() {
    +    let mut x;
    +    {
    +        let temp = String::from("I am temporary");
    +        x = PrintOnDrop(&temp);
    +        drop(x);
    +    }
    +} //~ ERROR `temp` does not live long enough.
    +

    It should be possible to add some amount of drop elaboration before +borrowck, allowing this example to compile. There is an unstable feature +to move drop elaboration before const checking: +#73255. Such a feature +gate does not exist for doing some drop elaboration before borrowck, +although there's a relevant +MCP.

    +

    dropck_outlives

    +

    There are two distinct "liveness" computations that we perform:

    +
      +
    • a value v is use-live at location L if it may be "used" later; a +use here is basically anything that is not a drop
    • +
    • a value v is drop-live at location L if it maybe dropped later
    • +
    +

    When things are use-live, their entire type must be valid at L. When +they are drop-live, all regions that are required by dropck must be +valid at L. The values dropped in the MIR are places.

    +

    The constraints computed by dropck_outlives for a type closely match +the generated drop glue for that type. Unlike drop glue, +dropck_outlives cares about the types of owned values, not the values +itself. For a value of type T

    +
      +
    • if T has an explicit Drop, require all generic arguments to be +live, unless they are marked with #[may_dangle] in which case they +are fully ignored
    • +
    • regardless of whether T has an explicit Drop, recurse into all +types owned by T +
        +
      • references, raw pointers, function pointers, function items, trait +objects1, and scalars do not own anything.
      • +
      • tuples, slices and arrays consider their element type to be owned. +For arrays we currently do not check whether their length is +zero.
      • +
      • all fields (of all variants) of ADTs are considered owned. The +exception here is ManuallyDrop<U> which is not considered to own +U. We consider PhantomData<U> to own U.
      • +
      • closures and generators own their captured upvars.
      • +
      +
    • +
    +

    The sections marked in bold are cases where dropck_outlives considers +types to be owned which are ignored by Ty::needs_drop. We only rely on +dropck_outlives if Ty::needs_drop for the containing local returned +true.This means liveness requirements can change depending on whether +a type is contained in a larger local. This is inconsistent, and +should be fixed: an example for +arrays +and for +PhantomData.2

    +

    One possible way these inconsistencies can be fixed is by MIR building +to be more pessimistic, probably by making Ty::needs_drop weaker, or +alternatively, changing dropck_outlives to be more precise, requiring +fewer regions to be live.

    +
    +
    1. +

      you can consider trait objects to have a builtin Drop +implementation which directly uses the drop_in_place provided by the +vtable. This Drop implementation requires all its generic parameters +to be live. ↩2

      +
    2. +
    3. +

      This is the core assumption of #110288 and RFC 3417.

      +
    4. +

    Region inference (NLL)

    + +

    The MIR-based region checking code is located in the rustc_mir::borrow_check +module.

    +

    The MIR-based region analysis consists of two major functions:

    +
      +
    • replace_regions_in_mir, invoked first, has two jobs: +
        +
      • First, it finds the set of regions that appear within the +signature of the function (e.g., 'a in fn foo<'a>(&'a u32) { ... }). These are called the "universal" or "free" regions – in +particular, they are the regions that appear free in the +function body.
      • +
      • Second, it replaces all the regions from the function body with +fresh inference variables. This is because (presently) those +regions are the results of lexical region inference and hence are +not of much interest. The intention is that – eventually – they +will be "erased regions" (i.e., no information at all), since we +won't be doing lexical region inference at all.
      • +
      +
    • +
    • compute_regions, invoked second: this is given as argument the +results of move analysis. It has the job of computing values for all +the inference variables that replace_regions_in_mir introduced. +
        +
      • To do that, it first runs the MIR type checker. This is +basically a normal type-checker but specialized to MIR, which is +much simpler than full Rust, of course. Running the MIR type +checker will however create various constraints between region +variables, indicating their potential values and relationships to +one another.
      • +
      • After this, we perform constraint propagation by creating a +RegionInferenceContext and invoking its solve +method.
      • +
      • The NLL RFC also includes fairly thorough (and hopefully readable) +coverage.
      • +
      +
    • +
    +

    Universal regions

    +

    The UniversalRegions type represents a collection of universal regions +corresponding to some MIR DefId. It is constructed in +replace_regions_in_mir when we replace all regions with fresh inference +variables. UniversalRegions contains indices for all the free regions in +the given MIR along with any relationships that are known to hold between +them (e.g. implied bounds, where clauses, etc.).

    +

    For example, given the MIR for the following function:

    +
    #![allow(unused)]
    +fn main() {
    +fn foo<'a>(x: &'a u32) {
    +    // ...
    +}
    +}
    +

    we would create a universal region for 'a and one for 'static. There may +also be some complications for handling closures, but we will ignore those for +the moment.

    +

    TODO: write about how these regions are computed.

    +

    +

    Region variables

    +

    The value of a region can be thought of as a set. This set contains all +points in the MIR where the region is valid along with any regions that are +outlived by this region (e.g. if 'a: 'b, then end('b) is in the set for +'a); we call the domain of this set a RegionElement. In the code, the value +for all regions is maintained in the rustc_borrowck::region_infer module. +For each region we maintain a set storing what elements are present in its value (to make this +efficient, we give each kind of element an index, the RegionElementIndex, and +use sparse bitsets).

    +

    The kinds of region elements are as follows:

    +
      +
    • Each location in the MIR control-flow graph: a location is just +the pair of a basic block and an index. This identifies the point +on entry to the statement with that index (or the terminator, if +the index is equal to statements.len()).
    • +
    • There is an element end('a) for each universal region 'a, +corresponding to some portion of the caller's (or caller's caller, +etc) control-flow graph.
    • +
    • Similarly, there is an element denoted end('static) corresponding +to the remainder of program execution after this function returns.
    • +
    • There is an element !1 for each placeholder region !1. This +corresponds (intuitively) to some unknown set of other elements – +for details on placeholders, see the section +placeholders and universes.
    • +
    +

    Constraints

    +

    Before we can infer the value of regions, we need to collect +constraints on the regions. The full set of constraints is described +in the section on constraint propagation, but the two most +common sorts of constraints are:

    +
      +
    1. Outlives constraints. These are constraints that one region outlives another +(e.g. 'a: 'b). Outlives constraints are generated by the MIR type +checker.
    2. +
    3. Liveness constraints. Each region needs to be live at points where it can be +used.
    4. +
    +

    Inference Overview

    +

    So how do we compute the contents of a region? This process is called region +inference. The high-level idea is pretty simple, but there are some details we +need to take care of.

    +

    Here is the high-level idea: we start off each region with the MIR locations we +know must be in it from the liveness constraints. From there, we use all of the +outlives constraints computed from the type checker to propagate the +constraints: for each region 'a, if 'a: 'b, then we add all elements of +'b to 'a, including end('b). This all happens in +propagate_constraints.

    +

    Then, we will check for errors. We first check that type tests are satisfied by +calling check_type_tests. This checks constraints like T: 'a. Second, we +check that universal regions are not "too big". This is done by calling +check_universal_regions. This checks that for each region 'a if 'a +contains the element end('b), then we must already know that 'a: 'b holds +(e.g. from a where clause). If we don't already know this, that is an error... +well, almost. There is some special handling for closures that we will discuss +later.

    +

    Example

    +

    Consider the following example:

    +
    fn foo<'a, 'b>(x: &'a usize) -> &'b usize {
    +    x
    +}
    +

    Clearly, this should not compile because we don't know if 'a outlives 'b +(if it doesn't then the return value could be a dangling reference).

    +

    Let's back up a bit. We need to introduce some free inference variables (as is +done in replace_regions_in_mir). This example doesn't use the exact regions +produced, but it (hopefully) is enough to get the idea across.

    +
    fn foo<'a, 'b>(x: &'a /* '#1 */ usize) -> &'b /* '#3 */ usize {
    +    x // '#2, location L1
    +}
    +

    Some notation: '#1, '#3, and '#2 represent the universal regions for the +argument, return value, and the expression x, respectively. Additionally, I +will call the location of the expression x L1.

    +

    So now we can use the liveness constraints to get the following starting points:

    +
    + + + +
    RegionContents
    '#1
    '#2L1
    '#3L1
    +
    +

    Now we use the outlives constraints to expand each region. Specifically, we +know that '#2: '#3 ...

    +
    + + + +
    RegionContents
    '#1L1
    '#2L1, end('#3) // add contents of '#3 and end('#3)
    '#3L1
    +
    +

    ... and '#1: '#2, so ...

    +
    + + + +
    RegionContents
    '#1L1, end('#2), end('#3) // add contents of '#2 and end('#2)
    '#2L1, end('#3)
    '#3L1
    +
    +

    Now, we need to check that no regions were too big (we don't have any type +tests to check in this case). Notice that '#1 now contains end('#3), but +we have no where clause or implied bound to say that 'a: 'b... that's an +error!

    +

    Some details

    +

    The RegionInferenceContext type contains all of the information needed to +do inference, including the universal regions from replace_regions_in_mir and +the constraints computed for each region. It is constructed just after we +compute the liveness constraints.

    +

    Here are some of the fields of the struct:

    +
      +
    • constraints: contains all the outlives constraints.
    • +
    • liveness_constraints: contains all the liveness constraints.
    • +
    • universal_regions: contains the UniversalRegions returned by +replace_regions_in_mir.
    • +
    • universal_region_relations: contains relations known to be true about +universal regions. For example, if we have a where clause that 'a: 'b, that +relation is assumed to be true while borrow checking the implementation (it +is checked at the caller), so universal_region_relations would contain 'a: 'b.
    • +
    • type_tests: contains some constraints on types that we must check after +inference (e.g. T: 'a).
    • +
    • closure_bounds_mapping: used for propagating region constraints from +closures back out to the creator of the closure.
    • +
    +

    TODO: should we discuss any of the others fields? What about the SCCs?

    +

    Ok, now that we have constructed a RegionInferenceContext, we can do +inference. This is done by calling the solve method on the context. This +is where we call propagate_constraints and then check the resulting type +tests and universal regions, as discussed above.

    +

    Constraint propagation

    + +

    The main work of the region inference is constraint propagation, +which is done in the propagate_constraints function. There are +three sorts of constraints that are used in NLL, and we'll explain how +propagate_constraints works by "layering" those sorts of constraints +on one at a time (each of them is fairly independent from the others):

    +
      +
    • liveness constraints (R live at E), which arise from liveness;
    • +
    • outlives constraints (R1: R2), which arise from subtyping;
    • +
    • member constraints (member R_m of [R_c...]), which arise from impl Trait.
    • +
    +

    In this chapter, we'll explain the "heart" of constraint propagation, +covering both liveness and outlives constraints.

    +

    Notation and high-level concepts

    +

    Conceptually, region inference is a "fixed-point" computation. It is +given some set of constraints {C} and it computes a set of values +Values: R -> {E} that maps each region R to a set of elements +{E} (see here for more notes on region elements):

    +
      +
    • Initially, each region is mapped to an empty set, so Values(R) = {} for all regions R.
    • +
    • Next, we process the constraints repeatedly until a fixed-point is reached: +
        +
      • For each constraint C: +
          +
        • Update Values as needed to satisfy the constraint
        • +
        +
      • +
      +
    • +
    +

    As a simple example, if we have a liveness constraint R live at E, +then we can apply Values(R) = Values(R) union {E} to make the +constraint be satisfied. Similarly, if we have an outlives constraints +R1: R2, we can apply Values(R1) = Values(R1) union Values(R2). +(Member constraints are more complex and we discuss them in this section.)

    +

    In practice, however, we are a bit more clever. Instead of applying +the constraints in a loop, we can analyze the constraints and figure +out the correct order to apply them, so that we only have to apply +each constraint once in order to find the final result.

    +

    Similarly, in the implementation, the Values set is stored in the +scc_values field, but they are indexed not by a region but by a +strongly connected component (SCC). SCCs are an optimization that +avoids a lot of redundant storage and computation. They are explained +in the section on outlives constraints.

    +

    Liveness constraints

    +

    A liveness constraint arises when some variable whose type +includes a region R is live at some point P. This simply means that +the value of R must include the point P. Liveness constraints are +computed by the MIR type checker.

    +

    A liveness constraint R live at E is satisfied if E is a member of +Values(R). So to "apply" such a constraint to Values, we just have +to compute Values(R) = Values(R) union {E}.

    +

    The liveness values are computed in the type-check and passed to the +region inference upon creation in the liveness_constraints argument. +These are not represented as individual constraints like R live at E +though; instead, we store a (sparse) bitset per region variable (of +type LivenessValues). This way we only need a single bit for each +liveness constraint.

    +

    One thing that is worth mentioning: All lifetime parameters are always +considered to be live over the entire function body. This is because +they correspond to some portion of the caller's execution, and that +execution clearly includes the time spent in this function, since the +caller is waiting for us to return.

    +

    Outlives constraints

    +

    An outlives constraint 'a: 'b indicates that the value of 'a must +be a superset of the value of 'b. That is, an outlives +constraint R1: R2 is satisfied if Values(R1) is a superset of +Values(R2). So to "apply" such a constraint to Values, we just +have to compute Values(R1) = Values(R1) union Values(R2).

    +

    One observation that follows from this is that if you have R1: R2 +and R2: R1, then R1 = R2 must be true. Similarly, if you have:

    +
    R1: R2
    +R2: R3
    +R3: R4
    +R4: R1
    +
    +

    then R1 = R2 = R3 = R4 follows. We take advantage of this to make things +much faster, as described shortly.

    +

    In the code, the set of outlives constraints is given to the region +inference context on creation in a parameter of type +OutlivesConstraintSet. The constraint set is basically just a list of 'a: 'b constraints.

    +

    The outlives constraint graph and SCCs

    +

    In order to work more efficiently with outlives constraints, they are +converted into the form of a graph, where the nodes of the +graph are region variables ('a, 'b) and each constraint 'a: 'b +induces an edge 'a -> 'b. This conversion happens in the +RegionInferenceContext::new function that creates the inference +context.

    +

    When using a graph representation, we can detect regions that must be equal +by looking for cycles. That is, if you have a constraint like

    +
    'a: 'b
    +'b: 'c
    +'c: 'd
    +'d: 'a
    +
    +

    then this will correspond to a cycle in the graph containing the +elements 'a...'d.

    +

    Therefore, one of the first things that we do in propagating region +values is to compute the strongly connected components (SCCs) in +the constraint graph. The result is stored in the constraint_sccs +field. You can then easily find the SCC that a region r is a part of +by invoking constraint_sccs.scc(r).

    +

    Working in terms of SCCs allows us to be more efficient: if we have a +set of regions 'a...'d that are part of a single SCC, we don't have +to compute/store their values separately. We can just store one value +for the SCC, since they must all be equal.

    +

    If you look over the region inference code, you will see that a number +of fields are defined in terms of SCCs. For example, the +scc_values field stores the values of each SCC. To get the value +of a specific region 'a then, we first figure out the SCC that the +region is a part of, and then find the value of that SCC.

    +

    When we compute SCCs, we not only figure out which regions are a +member of each SCC, we also figure out the edges between them. So for example +consider this set of outlives constraints:

    +
    'a: 'b
    +'b: 'a
    +
    +'a: 'c
    +
    +'c: 'd
    +'d: 'c
    +
    +

    Here we have two SCCs: S0 contains 'a and 'b, and S1 contains 'c +and 'd. But these SCCs are not independent: because 'a: 'c, that +means that S0: S1 as well. That is -- the value of S0 must be a +superset of the value of S1. One crucial thing is that this graph of +SCCs is always a DAG -- that is, it never has cycles. This is because +all the cycles have been removed to form the SCCs themselves.

    +

    Applying liveness constraints to SCCs

    +

    The liveness constraints that come in from the type-checker are +expressed in terms of regions -- that is, we have a map like +Liveness: R -> {E}. But we want our final result to be expressed +in terms of SCCs -- we can integrate these liveness constraints very +easily just by taking the union:

    +
    for each region R:
    +  let S be the SCC that contains R
    +  Values(S) = Values(S) union Liveness(R)
    +
    +

    In the region inferencer, this step is done in RegionInferenceContext::new.

    +

    Applying outlives constraints

    +

    Once we have computed the DAG of SCCs, we use that to structure out +entire computation. If we have an edge S1 -> S2 between two SCCs, +that means that Values(S1) >= Values(S2) must hold. So, to compute +the value of S1, we first compute the values of each successor S2. +Then we simply union all of those values together. To use a +quasi-iterator-like notation:

    +
    Values(S1) =
    +  s1.successors()
    +    .map(|s2| Values(s2))
    +    .union()
    +
    +

    In the code, this work starts in the propagate_constraints +function, which iterates over all the SCCs. For each SCC S1, we +compute its value by first computing the value of its +successors. Since SCCs form a DAG, we don't have to be concerned about +cycles, though we do need to keep a set around to track whether we +have already processed a given SCC or not. For each successor S2, once +we have computed S2's value, we can union those elements into the +value for S1. (Although we have to be careful in this process to +properly handle higher-ranked +placeholders. Note that the value +for S1 already contains the liveness constraints, since they were +added in RegionInferenceContext::new.

    +

    Once that process is done, we now have the "minimal value" for S1, +taking into account all of the liveness and outlives +constraints. However, in order to complete the process, we must also +consider member constraints, which are described in a later +section.

    +

    Universal regions

    + +

    "Universal regions" is the name that the code uses to refer to "named +lifetimes" -- e.g., lifetime parameters and 'static. The name +derives from the fact that such lifetimes are "universally quantified" +(i.e., we must make sure the code is true for all values of those +lifetimes). It is worth spending a bit of discussing how lifetime +parameters are handled during region inference. Consider this example:

    +
    fn foo<'a, 'b>(x: &'a u32, y: &'b u32) -> &'b u32 {
    +  x
    +}
    +

    This example is intended not to compile, because we are returning x, +which has type &'a u32, but our signature promises that we will +return a &'b u32 value. But how are lifetimes like 'a and 'b +integrated into region inference, and how this error wind up being +detected?

    +

    Universal regions and their relationships to one another

    +

    Early on in region inference, one of the first things we do is to +construct a UniversalRegions struct. This struct tracks the +various universal regions in scope on a particular function. We also +create a UniversalRegionRelations struct, which tracks their +relationships to one another. So if you have e.g. where 'a: 'b, then +the UniversalRegionRelations struct would track that 'a: 'b is +known to hold (which could be tested with the outlives function).

    +

    Everything is a region variable

    +

    One important aspect of how NLL region inference works is that all +lifetimes are represented as numbered variables. This means that the +only variant of region_kind::RegionKind that we use is the ReVar +variant. These region variables are broken into two major categories, +based on their index:

    +
      +
    • 0..N: universal regions -- the ones we are discussing here. In this +case, the code must be correct with respect to any value of those +variables that meets the declared relationships.
    • +
    • N..M: existential regions -- inference variables where the region +inferencer is tasked with finding some suitable value.
    • +
    +

    In fact, the universal regions can be further subdivided based on +where they were brought into scope (see the RegionClassification +type). These subdivisions are not important for the topics discussed +here, but become important when we consider closure constraint +propagation, so we discuss them there.

    +

    Universal lifetimes as the elements of a region's value

    +

    As noted previously, the value that we infer for each region is a set +{E}. The elements of this set can be points in the control-flow +graph, but they can also be an element end('a) corresponding to each +universal lifetime 'a. If the value for some region R0 includes +end('a), then this implies that R0 must extend until the end of 'a +in the caller.

    +

    The "value" of a universal region

    +

    During region inference, we compute a value for each universal region +in the same way as we compute values for other regions. This value +represents, effectively, the lower bound on that universal region +-- the things that it must outlive. We now describe how we use this +value to check for errors.

    +

    Liveness and universal regions

    +

    All universal regions have an initial liveness constraint that +includes the entire function body. This is because lifetime parameters +are defined in the caller and must include the entirety of the +function call that invokes this particular function. In addition, each +universal region 'a includes itself (that is, end('a)) in its +liveness constraint (i.e., 'a must extend until the end of +itself). In the code, these liveness constraints are setup in +init_free_and_bound_regions.

    +

    Propagating outlives constraints for universal regions

    +

    So, consider the first example of this section:

    +
    fn foo<'a, 'b>(x: &'a u32, y: &'b u32) -> &'b u32 {
    +  x
    +}
    +

    Here, returning x requires that &'a u32 <: &'b u32, which gives +rise to an outlives constraint 'a: 'b. Combined with our default liveness +constraints we get:

    +
    'a live at {B, end('a)} // B represents the "function body"
    +'b live at {B, end('b)}
    +'a: 'b
    +
    +

    When we process the 'a: 'b constraint, therefore, we will add +end('b) into the value for 'a, resulting in a final value of {B, end('a), end('b)}.

    +

    Detecting errors

    +

    Once we have finished constraint propagation, we then enforce a +constraint that if some universal region 'a includes an element +end('b), then 'a: 'b must be declared in the function's bounds. If +not, as in our example, that is an error. This check is done in the +check_universal_regions function, which simply iterates over all +universal regions, inspects their final value, and tests against the +declared UniversalRegionRelations.

    +

    Member constraints

    + +

    A member constraint 'm member of ['c_1..'c_N] expresses that the +region 'm must be equal to some choice regions 'c_i (for +some i). These constraints cannot be expressed by users, but they +arise from impl Trait due to its lifetime capture rules. Consider a +function such as the following:

    +
    fn make(a: &'a u32, b: &'b u32) -> impl Trait<'a, 'b> { .. }
    +

    Here, the true return type (often called the "hidden type") is only +permitted to capture the lifetimes 'a or 'b. You can kind of see +this more clearly by desugaring that impl Trait return type into its +more explicit form:

    +
    type MakeReturn<'x, 'y> = impl Trait<'x, 'y>;
    +fn make(a: &'a u32, b: &'b u32) -> MakeReturn<'a, 'b> { .. }
    +

    Here, the idea is that the hidden type must be some type that could +have been written in place of the impl Trait<'x, 'y> -- but clearly +such a type can only reference the regions 'x or 'y (or +'static!), as those are the only names in scope. This limitation is +then translated into a restriction to only access 'a or 'b because +we are returning MakeReturn<'a, 'b>, where 'x and 'y have been +replaced with 'a and 'b respectively.

    +

    Detailed example

    +

    To help us explain member constraints in more detail, let's spell out +the make example in a bit more detail. First off, let's assume that +you have some dummy trait:

    +
    trait Trait<'a, 'b> { }
    +impl<T> Trait<'_, '_> for T { }
    +

    and this is the make function (in desugared form):

    +
    type MakeReturn<'x, 'y> = impl Trait<'x, 'y>;
    +fn make(a: &'a u32, b: &'b u32) -> MakeReturn<'a, 'b> {
    +  (a, b)
    +}
    +

    What happens in this case is that the return type will be (&'0 u32, &'1 u32), +where '0 and '1 are fresh region variables. We will have the following +region constraints:

    +
    '0 live at {L}
    +'1 live at {L}
    +'a: '0
    +'b: '1
    +'0 member of ['a, 'b, 'static]
    +'1 member of ['a, 'b, 'static]
    +
    +

    Here the "liveness set" {L} corresponds to that subset of the body +where '0 and '1 are live -- basically the point from where the +return tuple is constructed to where it is returned (in fact, '0 and +'1 might have slightly different liveness sets, but that's not very +interesting to the point we are illustrating here).

    +

    The 'a: '0 and 'b: '1 constraints arise from subtyping. When we +construct the (a, b) value, it will be assigned type (&'0 u32, &'1 u32) -- the region variables reflect that the lifetimes of these +references could be made smaller. For this value to be created from +a and b, however, we do require that:

    +
    (&'a u32, &'b u32) <: (&'0 u32, &'1 u32)
    +
    +

    which means in turn that &'a u32 <: &'0 u32 and hence that 'a: '0 +(and similarly that &'b u32 <: &'1 u32, 'b: '1).

    +

    Note that if we ignore member constraints, the value of '0 would be +inferred to some subset of the function body (from the liveness +constraints, which we did not write explicitly). It would never become +'a, because there is no need for it too -- we have a constraint that +'a: '0, but that just puts a "cap" on how large '0 can grow to +become. Since we compute the minimal value that we can, we are happy +to leave '0 as being just equal to the liveness set. This is where +member constraints come in.

    +

    Choices are always lifetime parameters

    +

    At present, the "choice" regions from a member constraint are always lifetime +parameters from the current function. As of October 2021, +this falls out from the placement of impl Trait, though in the future it may not +be the case. We take some advantage of this fact, as it simplifies the current +code. In particular, we don't have to consider a case like '0 member of ['1, 'static], in which the value of both '0 and '1 are being inferred and hence +changing. See rust-lang/rust#61773 for more information.

    +

    Applying member constraints

    +

    Member constraints are a bit more complex than other forms of +constraints. This is because they have a "or" quality to them -- that +is, they describe multiple choices that we must select from. E.g., in +our example constraint '0 member of ['a, 'b, 'static], it might be +that '0 is equal to 'a, 'b, or 'static. How can we pick the +correct one? What we currently do is to look for a minimal choice +-- if we find one, then we will grow '0 to be equal to that minimal +choice. To find that minimal choice, we take two factors into +consideration: lower and upper bounds.

    +

    Lower bounds

    +

    The lower bounds are those lifetimes that '0 must outlive -- +i.e., that '0 must be larger than. In fact, when it comes time to +apply member constraints, we've already computed the lower bounds of +'0 because we computed its minimal value (or at least, the lower +bounds considering everything but member constraints).

    +

    Let LB be the current value of '0. We know then that '0: LB must +hold, whatever the final value of '0 is. Therefore, we can rule out +any choice 'choice where 'choice: LB does not hold.

    +

    Unfortunately, in our example, this is not very helpful. The lower +bound for '0 will just be the liveness set {L}, and we know that +all the lifetime parameters outlive that set. So we are left with the +same set of choices here. (But in other examples, particularly those +with different variance, lower bound constraints may be relevant.)

    +

    Upper bounds

    +

    The upper bounds are those lifetimes that must outlive '0 -- +i.e., that '0 must be smaller than. In our example, this would be +'a, because we have the constraint that 'a: '0. In more complex +examples, the chain may be more indirect.

    +

    We can use upper bounds to rule out members in a very similar way to +lower bounds. If UB is some upper bound, then we know that UB: '0 must hold, so we can rule out any choice 'choice where UB: 'choice does not hold.

    +

    In our example, we would be able to reduce our choice set from ['a, 'b, 'static] to just ['a]. This is because '0 has an upper bound +of 'a, and neither 'a: 'b nor 'a: 'static is known to hold.

    +

    (For notes on how we collect upper bounds in the implementation, see +the section below.)

    +

    Minimal choice

    +

    After applying lower and upper bounds, we can still sometimes have +multiple possibilities. For example, imagine a variant of our example +using types with the opposite variance. In that case, we would have +the constraint '0: 'a instead of 'a: '0. Hence the current value +of '0 would be {L, 'a}. Using this as a lower bound, we would be +able to narrow down the member choices to ['a, 'static] because 'b: 'a is not known to hold (but 'a: 'a and 'static: 'a do hold). We +would not have any upper bounds, so that would be our final set of choices.

    +

    In that case, we apply the minimal choice rule -- basically, if +one of our choices if smaller than the others, we can use that. In +this case, we would opt for 'a (and not 'static).

    +

    This choice is consistent with the general 'flow' of region +propagation, which always aims to compute a minimal value for the +region being inferred. However, it is somewhat arbitrary.

    +

    +

    Collecting upper bounds in the implementation

    +

    In practice, computing upper bounds is a bit inconvenient, because our +data structures are setup for the opposite. What we do is to compute +the reverse SCC graph (we do this lazily and cache the result) -- +that is, a graph where 'a: 'b induces an edge SCC('b) -> SCC('a). Like the normal SCC graph, this is a DAG. We can then do a +depth-first search starting from SCC('0) in this graph. This will +take us to all the SCCs that must outlive '0.

    +

    One wrinkle is that, as we walk the "upper bound" SCCs, their values +will not yet have been fully computed. However, we have already +applied their liveness constraints, so we have some information about +their value. In particular, for any regions representing lifetime +parameters, their value will contain themselves (i.e., the initial +value for 'a includes 'a and the value for 'b contains 'b). So +we can collect all of the lifetime parameters that are reachable, +which is precisely what we are interested in.

    +

    Placeholders and universes

    + +

    From time to time we have to reason about regions that we can't +concretely know. For example, consider this program:

    +
    // A function that needs a static reference
    +fn foo(x: &'static u32) { }
    +
    +fn bar(f: for<'a> fn(&'a u32)) {
    +       // ^^^^^^^^^^^^^^^^^^^ a function that can accept **any** reference
    +    let x = 22;
    +    f(&x);
    +}
    +
    +fn main() {
    +    bar(foo);
    +}
    +

    This program ought not to type-check: foo needs a static reference +for its argument, and bar wants to be given a function that +accepts any reference (so it can call it with something on its +stack, for example). But how do we reject it and why?

    +

    Subtyping and Placeholders

    +

    When we type-check main, and in particular the call bar(foo), we +are going to wind up with a subtyping relationship like this one:

    +
    fn(&'static u32) <: for<'a> fn(&'a u32)
    +----------------    -------------------
    +the type of `foo`   the type `bar` expects
    +
    +

    We handle this sort of subtyping by taking the variables that are +bound in the supertype and replacing them with +universally quantified +representatives, denoted like !1 here. We call these regions "placeholder +regions" – they represent, basically, "some unknown region".

    +

    Once we've done that replacement, we have the following relation:

    +
    fn(&'static u32) <: fn(&'!1 u32)
    +
    +

    The key idea here is that this unknown region '!1 is not related to +any other regions. So if we can prove that the subtyping relationship +is true for '!1, then it ought to be true for any region, which is +what we wanted.

    +

    So let's work through what happens next. To check if two functions are +subtypes, we check if their arguments have the desired relationship +(fn arguments are contravariant, so +we swap the left and right here):

    +
    &'!1 u32 <: &'static u32
    +
    +

    According to the basic subtyping rules for a reference, this will be +true if '!1: 'static. That is – if "some unknown region !1" outlives 'static. +Now, this might be true – after all, '!1 could be 'static – +but we don't know that it's true. So this should yield up an error (eventually).

    +

    What is a universe?

    +

    In the previous section, we introduced the idea of a placeholder +region, and we denoted it !1. We call this number 1 the universe +index. The idea of a "universe" is that it is a set of names that +are in scope within some type or at some point. Universes are formed +into a tree, where each child extends its parents with some new names. +So the root universe conceptually contains global names, such as +the lifetime 'static or the type i32. In the compiler, we also +put generic type parameters into this root universe (in this sense, +there is not just one root universe, but one per item). So consider +this function bar:

    +
    struct Foo { }
    +
    +fn bar<'a, T>(t: &'a T) {
    +    ...
    +}
    +

    Here, the root universe would consist of the lifetimes 'static and +'a. In fact, although we're focused on lifetimes here, we can apply +the same concept to types, in which case the types Foo and T would +be in the root universe (along with other global types, like i32). +Basically, the root universe contains all the names that +appear free in the body of bar.

    +

    Now let's extend bar a bit by adding a variable x:

    +
    fn bar<'a, T>(t: &'a T) {
    +    let x: for<'b> fn(&'b u32) = ...;
    +}
    +

    Here, the name 'b is not part of the root universe. Instead, when we +"enter" into this for<'b> (e.g., by replacing it with a placeholder), we will create +a child universe of the root, let's call it U1:

    +
    U0 (root universe)
    +│
    +└─ U1 (child universe)
    +
    +

    The idea is that this child universe U1 extends the root universe U0 +with a new name, which we are identifying by its universe number: +!1.

    +

    Now let's extend bar a bit by adding one more variable, y:

    +
    fn bar<'a, T>(t: &'a T) {
    +    let x: for<'b> fn(&'b u32) = ...;
    +    let y: for<'c> fn(&'c u32) = ...;
    +}
    +

    When we enter this type, we will again create a new universe, which +we'll call U2. Its parent will be the root universe, and U1 will be +its sibling:

    +
    U0 (root universe)
    +│
    +├─ U1 (child universe)
    +│
    +└─ U2 (child universe)
    +
    +

    This implies that, while in U2, we can name things from U0 or U2, but +not U1.

    +

    Giving existential variables a universe. Now that we have this +notion of universes, we can use it to extend our type-checker and +things to prevent illegal names from leaking out. The idea is that we +give each inference (existential) variable – whether it be a type or +a lifetime – a universe. That variable's value can then only +reference names visible from that universe. So for example if a +lifetime variable is created in U0, then it cannot be assigned a value +of !1 or !2, because those names are not visible from the universe +U0.

    +

    Representing universes with just a counter. You might be surprised +to see that the compiler doesn't keep track of a full tree of +universes. Instead, it just keeps a counter – and, to determine if +one universe can see another one, it just checks if the index is +greater. For example, U2 can see U0 because 2 >= 0. But U0 cannot see +U2, because 0 >= 2 is false.

    +

    How can we get away with this? Doesn't this mean that we would allow +U2 to also see U1? The answer is that, yes, we would, if that +question ever arose. But because of the structure of our type +checker etc, there is no way for that to happen. In order for +something happening in the universe U1 to "communicate" with something +happening in U2, they would have to have a shared inference variable X +in common. And because everything in U1 is scoped to just U1 and its +children, that inference variable X would have to be in U0. And since +X is in U0, it cannot name anything from U1 (or U2). This is perhaps easiest +to see by using a kind of generic "logic" example:

    +
    exists<X> {
    +   forall<Y> { ... /* Y is in U1 ... */ }
    +   forall<Z> { ... /* Z is in U2 ... */ }
    +}
    +
    +

    Here, the only way for the two foralls to interact would be through X, +but neither Y nor Z are in scope when X is declared, so its value +cannot reference either of them.

    +

    Universes and placeholder region elements

    +

    But where does that error come from? The way it happens is like this. +When we are constructing the region inference context, we can tell +from the type inference context how many placeholder variables exist +(the InferCtxt has an internal counter). For each of those, we +create a corresponding universal region variable !n and a "region +element" placeholder(n). This corresponds to "some unknown set of other +elements". The value of !n is {placeholder(n)}.

    +

    At the same time, we also give each existential variable a +universe (also taken from the InferCtxt). This universe +determines which placeholder elements may appear in its value: For +example, a variable in universe U3 may name placeholder(1), placeholder(2), and +placeholder(3), but not placeholder(4). Note that the universe of an inference +variable controls what region elements can appear in its value; it +does not say region elements will appear.

    +

    Placeholders and outlives constraints

    +

    In the region inference engine, outlives constraints have the form:

    +
    V1: V2 @ P
    +
    +

    where V1 and V2 are region indices, and hence map to some region +variable (which may be universally or existentially quantified). The +P here is a "point" in the control-flow graph; it's not important +for this section. This variable will have a universe, so let's call +those universes U(V1) and U(V2) respectively. (Actually, the only +one we are going to care about is U(V1).)

    +

    When we encounter this constraint, the ordinary procedure is to start +a DFS from P. We keep walking so long as the nodes we are walking +are present in value(V2) and we add those nodes to value(V1). If +we reach a return point, we add in any end(X) elements. That part +remains unchanged.

    +

    But then after that we want to iterate over the placeholder placeholder(x) +elements in V2 (each of those must be visible to U(V2), but we +should be able to just assume that is true, we don't have to check +it). We have to ensure that value(V1) outlives each of those +placeholder elements.

    +

    Now there are two ways that could happen. First, if U(V1) can see +the universe x (i.e., x <= U(V1)), then we can just add placeholder(x) +to value(V1) and be done. But if not, then we have to approximate: +we may not know what set of elements placeholder(x) represents, but we +should be able to compute some sort of upper bound B for it – +some region B that outlives placeholder(x). For now, we'll just use +'static for that (since it outlives everything) – in the future, we +can sometimes be smarter here (and in fact we have code for doing this +already in other contexts). Moreover, since 'static is in the root +universe U0, we know that all variables can see it – so basically if +we find that value(V2) contains placeholder(x) for some universe x +that V1 can't see, then we force V1 to 'static.

    +

    Extending the "universal regions" check

    +

    After all constraints have been propagated, the NLL region inference +has one final check, where it goes over the values that wound up being +computed for each universal region and checks that they did not get +'too large'. In our case, we will go through each placeholder region +and check that it contains only the placeholder(u) element it is known to +outlive. (Later, we might be able to know that there are relationships +between two placeholder regions and take those into account, as we do +for universal regions from the fn signature.)

    +

    Put another way, the "universal regions" check can be considered to be +checking constraints like:

    +
    {placeholder(1)}: V1
    +
    +

    where {placeholder(1)} is like a constant set, and V1 is the variable we +made to represent the !1 region.

    +

    Back to our example

    +

    OK, so far so good. Now let's walk through what would happen with our +first example:

    +
    fn(&'static u32) <: fn(&'!1 u32) @ P  // this point P is not imp't here
    +
    +

    The region inference engine will create a region element domain like this:

    +
    { CFG; end('static); placeholder(1) }
    +  ---  ------------  ------- from the universe `!1`
    +  |    'static is always in scope
    +  all points in the CFG; not especially relevant here
    +
    +

    It will always create two universal variables, one representing +'static and one representing '!1. Let's call them Vs and V1. They +will have initial values like so:

    +
    Vs = { CFG; end('static) } // it is in U0, so can't name anything else
    +V1 = { placeholder(1) }
    +
    +

    From the subtyping constraint above, we would have an outlives constraint like

    +
    '!1: 'static @ P
    +
    +

    To process this, we would grow the value of V1 to include all of Vs:

    +
    Vs = { CFG; end('static) }
    +V1 = { CFG; end('static), placeholder(1) }
    +
    +

    At that point, constraint propagation is complete, because all the +outlives relationships are satisfied. Then we would go to the "check +universal regions" portion of the code, which would test that no +universal region grew too large.

    +

    In this case, V1 did grow too large – it is not known to outlive +end('static), nor any of the CFG – so we would report an error.

    +

    Another example

    +

    What about this subtyping relationship?

    +
    for<'a> fn(&'a u32, &'a u32)
    +    <:
    +for<'b, 'c> fn(&'b u32, &'c u32)
    +
    +

    Here we would replace the bound region in the supertype with a placeholder, as before, yielding:

    +
    for<'a> fn(&'a u32, &'a u32)
    +    <:
    +fn(&'!1 u32, &'!2 u32)
    +
    +

    then we instantiate the variable on the left-hand side with an +existential in universe U2, yielding the following (?n is a notation +for an existential variable):

    +
    fn(&'?3 u32, &'?3 u32)
    +    <:
    +fn(&'!1 u32, &'!2 u32)
    +
    +

    Then we break this down further:

    +
    &'!1 u32 <: &'?3 u32
    +&'!2 u32 <: &'?3 u32
    +
    +

    and even further, yield up our region constraints:

    +
    '!1: '?3
    +'!2: '?3
    +
    +

    Note that, in this case, both '!1 and '!2 have to outlive the +variable '?3, but the variable '?3 is not forced to outlive +anything else. Therefore, it simply starts and ends as the empty set +of elements, and hence the type-check succeeds here.

    +

    (This should surprise you a little. It surprised me when I first realized it. +We are saying that if we are a fn that needs both of its arguments to have +the same region, we can accept being called with arguments with two +distinct regions. That seems intuitively unsound. But in fact, it's fine, as +I tried to explain in this issue on the Rust issue +tracker long ago. The reason is that even if we get called with arguments of +two distinct lifetimes, those two lifetimes have some intersection (the call +itself), and that intersection can be our value of 'a that we use as the +common lifetime of our arguments. -nmatsakis)

    +

    Final example

    +

    Let's look at one last example. We'll extend the previous one to have +a return type:

    +
    for<'a> fn(&'a u32, &'a u32) -> &'a u32
    +    <:
    +for<'b, 'c> fn(&'b u32, &'c u32) -> &'b u32
    +
    +

    Despite seeming very similar to the previous example, this case is going to get +an error. That's good: the problem is that we've gone from a fn that promises +to return one of its two arguments, to a fn that is promising to return the +first one. That is unsound. Let's see how it plays out.

    +

    First, we replace the bound region in the supertype with a placeholder:

    +
    for<'a> fn(&'a u32, &'a u32) -> &'a u32
    +    <:
    +fn(&'!1 u32, &'!2 u32) -> &'!1 u32
    +
    +

    Then we instantiate the subtype with existentials (in U2):

    +
    fn(&'?3 u32, &'?3 u32) -> &'?3 u32
    +    <:
    +fn(&'!1 u32, &'!2 u32) -> &'!1 u32
    +
    +

    And now we create the subtyping relationships:

    +
    &'!1 u32 <: &'?3 u32 // arg 1
    +&'!2 u32 <: &'?3 u32 // arg 2
    +&'?3 u32 <: &'!1 u32 // return type
    +
    +

    And finally the outlives relationships. Here, let V1, V2, and V3 be the +variables we assign to !1, !2, and ?3 respectively:

    +
    V1: V3
    +V2: V3
    +V3: V1
    +
    +

    Those variables will have these initial values:

    +
    V1 in U1 = {placeholder(1)}
    +V2 in U2 = {placeholder(2)}
    +V3 in U2 = {}
    +
    +

    Now because of the V3: V1 constraint, we have to add placeholder(1) into V3 (and +indeed it is visible from V3), so we get:

    +
    V3 in U2 = {placeholder(1)}
    +
    +

    then we have this constraint V2: V3, so we wind up having to enlarge +V2 to include placeholder(1) (which it can also see):

    +
    V2 in U2 = {placeholder(1), placeholder(2)}
    +
    +

    Now constraint propagation is done, but when we check the outlives +relationships, we find that V2 includes this new element placeholder(1), +so we report an error.

    +

    Propagating closure constraints

    +

    When we are checking the type tests and universal regions, we may come +across a constraint that we can't prove yet if we are in a closure +body! However, the necessary constraints may actually hold (we just +don't know it yet). Thus, if we are inside a closure, we just collect +all the constraints we can't prove yet and return them. Later, when we +are borrow check the MIR node that created the closure, we can also +check that these constraints hold. At that time, if we can't prove +they hold, we report an error.

    +

    How this is implemented

    +

    While borrow-checking a closure inside of RegionInferenceContext::solve we separately try to propagate type-outlives and region-outlives constraints to the parent if we're unable to prove them locally.

    +

    Region-outlive constraints

    +

    If RegionInferenceContext::check_universal_regions fails to prove some outlives constraint 'longer_fr: 'shorter_fr, we try to propagate it in fn try_propagate_universal_region_error. Both these universal regions are either local to the closure or an external region.

    +

    In case 'longer_fr is a local universal region, we search for the largest external region 'fr_minus which is outlived by 'longer_fr, i.e. 'longer_fr: 'fr_minus. In case there are multiple such regions, we pick the mutual_immediate_postdominator: the fixpoint of repeatedly computing the GLB of all GLBs, see TransitiveRelation::postdom_upper_bound for more details.

    +

    If 'fr_minus exists we require it to outlive all non-local upper bounds of 'shorter_fr. There will always be at least one non-local upper bound 'static.

    +

    Type-outlive constraints

    +

    Type-outlives constraints are proven in check_type_tests. This happens after computing the outlives graph, which is now immutable.

    +

    For all type tests we fail to prove via fn eval_verify_bound inside of the closure we call try_promote_type_test. A TypeTest represents a type-outlives bound generic_kind: lower_bound together with a verify_bound. If the VerifyBound holds for the lower_bound, the constraint is satisfied. try_promote_type_test does not care about the verify_bound.

    +

    It starts by calling fn try_promote_type_test_subject. This function takes the GenericKind and tries to transform it to a ClosureOutlivesSubject which is no longer references anything local to the closure. This is done by replacing all free regions in that type with either 'static or region parameters which are equal to that free region. This operation fails if the generic_kind contains a region which cannot be replaced.

    +

    We then promote the lower_bound into the context of the caller. If the lower bound is equal to a placeholder, we replace it with 'static

    +

    We then look at all universal regions uv which are required to be outlived by lower_bound, i.e. for which borrow checking added region constraints. For each of these we then emit a ClosureOutlivesRequirement for all non-local universal regions which are known to outlive uv.

    +

    As we've already built the region graph of the closure at this point and separately check that it is consistent, we are also able to assume the outlive constraints uv: lower_bound here.

    +

    So if we have a type-outlives bounds we can't prove, e.g. T: 'local_infer, we use the region graph to go to universal variables 'a with 'a: local_infer. In case 'a are local, we then use the assumed outlived constraints to go to non-local ones.

    +

    We then store the list of promoted type tests in the BorrowCheckResults. +We then apply them in while borrow-checking its parent in TypeChecker::prove_closure_bounds.

    +

    TODO: explain how exactly that works :3

    +

    Reporting region errors

    +

    TODO: we should discuss how to generate errors from the results of these analyses.

    +

    Two-phase borrows

    +

    Two-phase borrows are a more permissive version of mutable borrows that allow +nested method calls such as vec.push(vec.len()). Such borrows first act as +shared borrows in a "reservation" phase and can later be "activated" into a +full mutable borrow.

    +

    Only certain implicit mutable borrows can be two-phase, any &mut or ref mut +in the source code is never a two-phase borrow. The cases where we generate a +two-phase borrow are:

    +
      +
    1. The autoref borrow when calling a method with a mutable reference receiver.
    2. +
    3. A mutable reborrow in function arguments.
    4. +
    5. The implicit mutable borrow in an overloaded compound assignment operator.
    6. +
    +

    To give some examples:

    +
    #![allow(unused)]
    +fn main() {
    +// In the source code
    +
    +// Case 1:
    +let mut v = Vec::new();
    +v.push(v.len());
    +let r = &mut Vec::new();
    +r.push(r.len());
    +
    +// Case 2:
    +std::mem::replace(r, vec![1, r.len()]);
    +
    +// Case 3:
    +let mut x = std::num::Wrapping(2);
    +x += x;
    +}
    +

    Expanding these enough to show the two-phase borrows:

    +
    // Case 1:
    +let mut v = Vec::new();
    +let temp1 = &two_phase v;
    +let temp2 = v.len();
    +Vec::push(temp1, temp2);
    +let r = &mut Vec::new();
    +let temp3 = &two_phase *r;
    +let temp4 = r.len();
    +Vec::push(temp3, temp4);
    +
    +// Case 2:
    +let temp5 = &two_phase *r;
    +let temp6 = vec![1, r.len()];
    +std::mem::replace(temp5, temp6);
    +
    +// Case 3:
    +let mut x = std::num::Wrapping(2);
    +let temp7 = &two_phase x;
    +let temp8 = x;
    +std::ops::AddAssign::add_assign(temp7, temp8);
    +

    Whether a borrow can be two-phase is tracked by a flag on the AutoBorrow +after type checking, which is then converted to a BorrowKind during MIR +construction.

    +

    Each two-phase borrow is assigned to a temporary that is only used once. As +such we can define:

    +
      +
    • The point where the temporary is assigned to is called the reservation +point of the two-phase borrow.
    • +
    • The point where the temporary is used, which is effectively always a +function call, is called the activation point.
    • +
    +

    The activation points are found using the GatherBorrows visitor. The +BorrowData then holds both the reservation and activation points for the +borrow.

    +

    Checking two-phase borrows

    +

    Two-phase borrows are treated as if they were mutable borrows with the +following exceptions:

    +
      +
    1. At every location in the MIR we check if any two-phase borrows are +activated at this location. If a live two phase borrow is activated at a +location, then we check that there are no borrows that conflict with the +two-phase borrow.
    2. +
    3. At the reservation point we error if there are conflicting live mutable +borrows. And lint if there are any conflicting shared borrows.
    4. +
    5. Between the reservation and the activation point, the two-phase borrow acts +as a shared borrow. We determine (in is_active) if we're at such a point +by using the Dominators for the MIR graph.
    6. +
    7. After the activation point, the two-phase borrow acts as a mutable borrow.
    8. +
    +

    Closure Capture Inference

    +

    This section describes how rustc handles closures. Closures in Rust are +effectively "desugared" into structs that contain the values they use (or +references to the values they use) from their creator's stack frame. rustc has +the job of figuring out which values a closure uses and how, so it can decide +whether to capture a given variable by shared reference, mutable reference, or +by move. rustc also has to figure out which of the closure traits (Fn, +FnMut, or FnOnce) a closure is capable of +implementing.

    +

    Let's start with a few examples:

    +

    Example 1

    +

    To start, let's take a look at how the closure in the following example is desugared:

    +
    fn closure(f: impl Fn()) {
    +    f();
    +}
    +
    +fn main() {
    +    let x: i32 = 10;
    +    closure(|| println!("Hi {}", x));  // The closure just reads x.
    +    println!("Value of x after return {}", x);
    +}
    +

    Let's say the above is the content of a file called immut.rs. If we compile +immut.rs using the following command. The -Z dump-mir=all flag will cause +rustc to generate and dump the MIR to a directory called mir_dump.

    +
    > rustc +stage1 immut.rs -Z dump-mir=all
    +
    +

    After we run this command, we will see a newly generated directory in our +current working directory called mir_dump, which will contain several files. +If we look at file rustc.main.-------.mir_map.0.mir, we will find, among +other things, it also contains this line:

    +
    _4 = &_1;
    +_3 = [closure@immut.rs:7:13: 7:36] { x: move _4 };
    +

    Note that in the MIR examples in this chapter, _1 is x.

    +

    Here in first line _4 = &_1;, the mir_dump tells us that x was borrowed +as an immutable reference. This is what we would hope as our closure just +reads x.

    +

    Example 2

    +

    Here is another example:

    +
    fn closure(mut f: impl FnMut()) {
    +    f();
    +}
    +
    +fn main() {
    +    let mut x: i32 = 10;
    +    closure(|| {
    +        x += 10;  // The closure mutates the value of x
    +        println!("Hi {}", x)
    +    });
    +    println!("Value of x after return {}", x);
    +}
    +
    _4 = &mut _1;
    +_3 = [closure@mut.rs:7:13: 10:6] { x: move _4 };
    +

    This time along, in the line _4 = &mut _1;, we see that the borrow is changed to mutable borrow. +Fair enough! The closure increments x by 10.

    +

    Example 3

    +

    One more example:

    +
    fn closure(f: impl FnOnce()) {
    +    f();
    +}
    +
    +fn main() {
    +    let x = vec![21];
    +    closure(|| {
    +        drop(x);  // Makes x unusable after the fact.
    +    });
    +    // println!("Value of x after return {:?}", x);
    +}
    +
    _6 = [closure@move.rs:7:13: 9:6] { x: move _1 }; // bb16[3]: scope 1 at move.rs:7:13: 9:6
    +

    Here, x is directly moved into the closure and the access to it will not be permitted after the +closure.

    +

    Inferences in the compiler

    +

    Now let's dive into rustc code and see how all these inferences are done by the compiler.

    +

    Let's start with defining a term that we will be using quite a bit in the rest of the discussion - +upvar. An upvar is a variable that is local to the function where the closure is defined. So, +in the above examples, x will be an upvar to the closure. They are also sometimes referred to as +the free variables meaning they are not bound to the context of the closure. +compiler/rustc_passes/src/upvars.rs defines a query called upvars_mentioned +for this purpose.

    +

    Other than lazy invocation, one other thing that distinguishes a closure from a +normal function is that it can use the upvars. It borrows these upvars from its surrounding +context; therefore the compiler has to determine the upvar's borrow type. The compiler starts with +assigning an immutable borrow type and lowers the restriction (that is, changes it from +immutable to mutable to move) as needed, based on the usage. In the Example 1 above, the +closure only uses the variable for printing but does not modify it in any way and therefore, in the +mir_dump, we find the borrow type for the upvar x to be immutable. In example 2, however, the +closure modifies x and increments it by some value. Because of this mutation, the compiler, which +started off assigning x as an immutable reference type, has to adjust it as a mutable reference. +Likewise in the third example, the closure drops the vector and therefore this requires the variable +x to be moved into the closure. Depending on the borrow kind, the closure has to implement the +appropriate trait: Fn trait for immutable borrow, FnMut for mutable borrow, +and FnOnce for move semantics.

    +

    Most of the code related to the closure is in the +compiler/rustc_hir_typeck/src/upvar.rs file and the data structures are +declared in the file compiler/rustc_middle/src/ty/mod.rs.

    +

    Before we go any further, let's discuss how we can examine the flow of control through the rustc +codebase. For closures specifically, set the RUSTC_LOG env variable as below and collect the +output in a file:

    +
    > RUSTC_LOG=rustc_hir_typeck::upvar rustc +stage1 -Z dump-mir=all \
    +    <.rs file to compile> 2> <file where the output will be dumped>
    +
    +

    This uses the stage1 compiler and enables debug! logging for the +rustc_hir_typeck::upvar module.

    +

    The other option is to step through the code using lldb or gdb.

    +
      +
    1. rust-lldb build/host/stage1/bin/rustc test.rs
    2. +
    3. In lldb: +
        +
      1. b upvar.rs:134 // Setting the breakpoint on a certain line in the upvar.rs file
      2. +
      3. r // Run the program until it hits the breakpoint
      4. +
      +
    4. +
    +

    Let's start with upvar.rs. This file has something called +the euv::ExprUseVisitor which walks the source of the closure and +invokes a callback for each upvar that is borrowed, mutated, or moved.

    +
    fn main() {
    +    let mut x = vec![21];
    +    let _cl = || {
    +        let y = x[0];  // 1.
    +        x[0] += 1;  // 2.
    +    };
    +}
    +

    In the above example, our visitor will be called twice, for the lines marked 1 and 2, once for a +shared borrow and another one for a mutable borrow. It will also tell us what was borrowed.

    +

    The callbacks are defined by implementing the Delegate trait. The +InferBorrowKind type implements Delegate and keeps a map that +records for each upvar which mode of capture was required. The modes of capture +can be ByValue (moved) or ByRef (borrowed). For ByRef borrows, the possible +BorrowKinds are ImmBorrow, UniqueImmBorrow, MutBorrow as defined in the +compiler/rustc_middle/src/ty/mod.rs.

    +

    Delegate defines a few different methods (the different callbacks): +consume for move of a variable, borrow for a borrow of some kind +(shared or mutable), and mutate when we see an assignment of something.

    +

    All of these callbacks have a common argument cmt which stands for Category, +Mutability and Type and is defined in +compiler/rustc_hir_typeck/src/expr_use_visitor.rs. Borrowing from the code +comments, "cmt is a complete categorization of a value indicating where it +originated and how it is located, as well as the mutability of the memory in +which the value is stored". Based on the callback (consume, borrow etc.), we +will call the relevant adjust_upvar_borrow_kind_for_<something> and pass the +cmt along. Once the borrow type is adjusted, we store it in the table, which +basically says what borrows were made for each closure.

    +
    self.tables
    +    .borrow_mut()
    +    .upvar_capture_map
    +    .extend(delegate.adjust_upvar_captures);
    +

    Async closures/"coroutine-closures"

    + +

    Please read RFC 3668 to understand the general motivation of the feature. This is a very technical and somewhat "vertical" chapter; ideally we'd split this and sprinkle it across all the relevant chapters, but for the purposes of understanding async closures holistically, I've put this together all here in one chapter.

    +

    Coroutine-closures -- a technical deep dive

    +

    Coroutine-closures are a generalization of async closures, being special syntax for closure expressions which return a coroutine, notably one that is allowed to capture from the closure's upvars.

    +

    For now, the only usable kind of coroutine-closure is the async closure, and supporting async closures is the extent of this PR. We may eventually support gen || {}, etc., and most of the problems and curiosities described in this document apply to all coroutine-closures in general.

    +

    As a consequence of the code being somewhat general, this document may flip between calling them "async closures" and "coroutine-closures". The future that is returned by the async closure will generally be called the "coroutine" or the "child coroutine".

    +

    HIR

    +

    Async closures (and in the future, other coroutine flavors such as gen) are represented in HIR as a hir::Closure. +The closure-kind of the hir::Closure is ClosureKind::CoroutineClosure(_)1, which wraps an async block, which is also represented in HIR as a hir::Closure. +The closure-kind of the async block is ClosureKind::Closure(CoroutineKind::Desugared(_, CoroutineSource::Closure))2.

    +

    Like async fn, when lowering an async closure's body, we need to unconditionally move all of the closures arguments into the body so they are captured. This is handled by lower_coroutine_body_with_moved_arguments3. The only notable quirk with this function is that the async block we end up generating as a capture kind of CaptureBy::ByRef4. We later force all of the closure args to be captured by-value5, but we don't want the whole async block to act as if it were an async move, since that would defeat the purpose of the self-borrowing of an async closure.

    +

    rustc_middle::ty Representation

    +

    For the purposes of keeping the implementation mostly future-compatible (i.e. with gen || {} and async gen || {}), most of this section calls async closures "coroutine-closures".

    +

    The main thing that this PR introduces is a new TyKind called CoroutineClosure6 and corresponding variants on other relevant enums in typeck and borrowck (UpvarArgs, DefiningTy, AggregateKind).

    +

    We introduce a new TyKind instead of generalizing the existing TyKind::Closure due to major representational differences in the type. The major differences between CoroutineClosures can be explored by first inspecting the CoroutineClosureArgsParts, which is the "unpacked" representation of the coroutine-closure's generics.

    +

    Similarities to closures

    +

    Like a closure, we have parent_args, a closure_kind_ty, and a tupled_upvars_ty. These represent the same thing as their closure counterparts; namely: the generics inherited from the body that the closure is defined in, the maximum "calling capability" of the closure (i.e. must it be consumed to be called, like FnOnce, or can it be called by-ref), and the captured upvars of the closure itself.

    +

    The signature

    +

    A traditional closure has a fn_sig_as_fn_ptr_ty which it uses to represent the signature of the closure. In contrast, we store the signature of a coroutine closure in a somewhat "exploded" way, since coroutine-closures have two signatures depending on what AsyncFn* trait you call it with (see below sections).

    +

    Conceptually, the coroutine-closure may be thought as containing several different signature types depending on whether it is being called by-ref or by-move.

    +

    To conveniently recreate both of these signatures, the signature_parts_ty stores all of the relevant parts of the coroutine returned by this coroutine-closure. This signature parts type will have the general shape of fn(tupled_inputs, resume_ty) -> (return_ty, yield_ty), where resume_ty, return_ty, and yield_ty are the respective types for the coroutine returned by the coroutine-closure7.

    +

    The compiler mainly deals with the CoroutineClosureSignature type8, which is created by extracting the relevant types out of the fn() ptr type described above, and which exposes methods that can be used to construct the coroutine that the coroutine-closure ultimately returns.

    +

    The data we need to carry along to construct a Coroutine return type

    +

    Along with the data stored in the signature, to construct a TyKind::Coroutine to return, we also need to store the "witness" of the coroutine.

    +

    So what about the upvars of the Coroutine that is returned? Well, for AsyncFnOnce (i.e. call-by-move), this is simply the same upvars that the coroutine returns. But for AsyncFnMut/AsyncFn, the coroutine that is returned from the coroutine-closure borrows data from the coroutine-closure with a given "environment" lifetime9. This corresponds to the &self lifetime10 on the AsyncFnMut/AsyncFn call signature, and the GAT lifetime of the ByRef11.

    +

    Actually getting the coroutine return type(s)

    +

    To most easily construct the Coroutine that a coroutine-closure returns, you can use the to_coroutine_given_kind_and_upvars12 helper on CoroutineClosureSignature, which can be acquired from the CoroutineClosureArgs.

    +

    Most of the args to that function will be components that you can get out of the CoroutineArgs, except for the goal_kind: ClosureKind which controls which flavor of coroutine to return based off of the ClosureKind passed in -- i.e. it will prepare the by-ref coroutine if ClosureKind::Fn | ClosureKind::FnMut, and the by-move coroutine if ClosureKind::FnOnce.

    +

    Trait Hierarchy

    +

    We introduce a parallel hierarchy of Fn* traits that are implemented for . The motivation for the introduction was covered in a blog post: Async Closures.

    +

    All currently-stable callable types (i.e., closures, function items, function pointers, and dyn Fn* trait objects) automatically implement AsyncFn*() -> T if they implement Fn*() -> Fut for some output type Fut, and Fut implements Future<Output = T>13.

    +

    Async closures implement AsyncFn* as their bodies permit; i.e. if they end up using upvars in a way that is compatible (i.e. if they consume or mutate their upvars, it may affect whether they implement AsyncFn and AsyncFnMut...)

    +

    Lending

    +

    We may in the future move AsyncFn* onto a more general set of LendingFn* traits; however, there are some concrete technical implementation details that limit our ability to use LendingFn ergonomically in the compiler today. These have to do with:

    +
      +
    • Closure signature inference.
    • +
    • Limitations around higher-ranked trait bounds.
    • +
    • Shortcomings with error messages.
    • +
    +

    These limitations, plus the fact that the underlying trait should have no effect on the user experience of async closures and async Fn trait bounds, leads us to AsyncFn* for now. To ensure we can eventually move to these more general traits, the precise AsyncFn* trait definitions (including the associated types) are left as an implementation detail.

    +

    When do async closures implement the regular Fn* traits?

    +

    We mention above that "regular" callable types can implement AsyncFn*, but the reverse question exists of "can async closures implement Fn* too"? The short answer is "when it's valid", i.e. when the coroutine that would have been returned from AsyncFn/AsyncFnMut does not actually have any upvars that are "lent" from the parent coroutine-closure.

    +

    See the "follow-up: when do..." section below for an elaborated answer. The full answer describes a pretty interesting and hopefully thorough heuristic that is used to ensure that most async closures "just work".

    +

    Tale of two bodies...

    +

    When async closures are called with AsyncFn/AsyncFnMut, they return a coroutine that borrows from the closure. However, when they are called via AsyncFnOnce, we consume that closure, and cannot return a coroutine that borrows from data that is now dropped.

    +

    To work around this limitation, we synthesize a separate by-move MIR body for calling AsyncFnOnce::call_once on a coroutine-closure that can be called by-ref.

    +

    This body operates identically to the "normal" coroutine returned from calling the coroutine-closure, except for the fact that it has a different set of upvars, since we must move the captures from the parent coroutine-closure into the child coroutine.

    +

    Synthesizing the by-move body

    +

    When we want to access the by-move body of the coroutine returned by a coroutine-closure, we can do so via the coroutine_by_move_body_def_id14 query.

    +

    This query synthesizes a new MIR body by copying the MIR body of the coroutine and inserting additional derefs and field projections15 to preserve the semantics of the body.

    +

    Since we've synthesized a new def id, this query is also responsible for feeding a ton of other relevant queries for the MIR body. This query is ensure()d16 during the mir_promoted query, since it operates on the built mir of the coroutine.

    +

    Closure signature inference

    +

    The closure signature inference algorithm for async closures is a bit more complicated than the inference algorithm for "traditional" closures. Like closures, we iterate through all of the clauses that may be relevant (for the expectation type passed in)17.

    +

    To extract a signature, we consider two situations:

    +
      +
    • Projection predicates with AsyncFnOnce::Output, which we will use to extract the inputs and output type for the closure. This corresponds to the situation that there was a F: AsyncFn*() -> T bound18.
    • +
    • Projection predicates with FnOnce::Output, which we will use to extract the inputs. For the output, we also try to deduce an output by looking for relevant Future::Output projection predicates. This corresponds to the situation that there was an F: Fn*() -> T, T: Future<Output = U> bound.19 +
        +
      • If there is no Future bound, we simply use a fresh infer var for the output. This corresponds to the case where one can pass an async closure to a combinator function like Option::map.20
      • +
      +
    • +
    +

    We support the latter case simply to make it easier for users to simply drop-in async || {} syntax, even when they're calling an API that was designed before first-class AsyncFn* traits were available.

    +

    Calling a closure before its kind has been inferred

    +

    We defer21 the computation of a coroutine-closure's "kind" (i.e. its maximum calling mode: AsyncFnOnce/AsyncFnMut/AsyncFn) until the end of typeck. However, since we want to be able to call that coroutine-closure before the end of typeck, we need to come up with the return type of the coroutine-closure before that.

    +

    Unlike regular closures, whose return type does not change depending on what Fn* trait we call it with, coroutine-closures do end up returning different coroutine types depending on the flavor of AsyncFn* trait used to call it.

    +

    Specifically, while the def-id of the returned coroutine does not change, the upvars22 (which are either borrowed or moved from the parent coroutine-closure) and the coroutine-kind23 are dependent on the calling mode.

    +

    We introduce a AsyncFnKindHelper trait which allows us to defer the question of "does this coroutine-closure support this calling mode"24 via a trait goal, and "what are the tupled upvars of this calling mode"25 via an associated type, which can be computed by appending the input types of the coroutine-closure to either the upvars or the "by ref" upvars computed during upvar analysis.

    +

    Ok, so why?

    +

    This seems a bit roundabout and complex, and I admit that it is. But let's think of the "do nothing" alternative -- we could instead mark all AsyncFn* goals as ambiguous until upvar analysis, at which point we would know exactly what to put into the upvars of the coroutine we return. However, this is actually very detrimental to inference in the program, since it means that programs like this would not be valid:

    +
    #![allow(unused)]
    +fn main() {
    +let c = async || -> String { .. };
    +let s = c().await;
    +// ^^^ If we can't project `<{c} as AsyncFn>::call()` to a coroutine, then the `IntoFuture::into_future` call inside of the `.await` stalls, and the type of `s` is left unconstrained as an infer var.
    +s.as_bytes();
    +// ^^^ That means we can't call any methods on the awaited return of a coroutine-closure, like... at all!
    +}
    +

    So instead, we use this alias (in this case, a projection: AsyncFnKindHelper::Upvars<'env, ...>) to delay the computation of the tupled upvars and give us something to put in its place, while still allowing us to return a TyKind::Coroutine (which is a rigid type) and we may successfully confirm the built-in traits we need (in our case, Future), since the Future implementation doesn't depend on the upvars at all.

    +

    Upvar analysis

    +

    By and large, the upvar analysis for coroutine-closures and their child coroutines proceeds like normal upvar analysis. However, there are several interesting bits that happen to account for async closures' special natures:

    +

    Forcing all inputs to be captured

    +

    Like async fn, all input arguments are captured. We explicitly force26 all of these inputs to be captured by move so that the future coroutine returned by async closures does not depend on whether the input is used by the body or not, which would impart an interesting semver hazard.

    +

    Computing the by-ref captures

    +

    For a coroutine-closure that supports AsyncFn/AsyncFnMut, we must also compute the relationship between the captures of the coroutine-closure and its child coroutine. Specifically, the coroutine-closure may move a upvar into its captures, but the coroutine may only borrow that upvar.

    +

    We compute the "coroutine_captures_by_ref_ty" by looking at all of the child coroutine's captures and comparing them to the corresponding capture of the parent coroutine-closure27. This coroutine_captures_by_ref_ty ends up being represented as a for<'env> fn() -> captures... type, with the additional binder lifetime representing the "&self" lifetime of calling AsyncFn::async_call or AsyncFnMut::async_call_mut. We instantiate that binder later when actually calling the methods.

    +

    Note that not every by-ref capture from the parent coroutine-closure results in a "lending" borrow. See the Follow-up: When do async closures implement the regular Fn* traits? section below for more details, since this intimately influences whether or not the coroutine-closure is allowed to implement the Fn* family of traits.

    +

    By-move body + FnOnce quirk

    +

    There are several situations where the closure upvar analysis ends up inferring upvars for the coroutine-closure's child coroutine that are too relaxed, and end up resulting in borrow-checker errors. This is best illustrated via examples. For example, given:

    +
    #![allow(unused)]
    +fn main() {
    +fn force_fnonce<T: async FnOnce()>(t: T) -> T { t }
    +
    +let x = String::new();
    +let c = force_fnonce(async move || {
    +    println!("{x}");
    +});
    +}
    +

    x will be moved into the coroutine-closure, but the coroutine that is returned would only borrow &x. However, since force_fnonce forces the coroutine-closure to AsyncFnOnce, which is not lending, we must force the capture to happen by-move28.

    +

    Similarly:

    +
    #![allow(unused)]
    +fn main() {
    +let x = String::new();
    +let y = String::new();
    +let c = async move || {
    +    drop(y);
    +    println!("{x}");
    +};
    +}
    +

    x will be moved into the coroutine-closure, but the coroutine that is returned would only borrow &x. However, since we also capture y and drop it, the coroutine-closure is forced to be AsyncFnOnce. We must also force the capture of x to happen by-move. To determine this situation in particular, since unlike the last example the coroutine-kind's closure-kind has not yet been constrained, we must analyze the body of the coroutine-closure to see if how all of the upvars are used, to determine if they've been used in a way that is "consuming" -- i.e. that would force it to FnOnce29.

    +

    Follow-up: When do async closures implement the regular Fn* traits?

    +

    Well, first of all, all async closures implement FnOnce since they can always be called at least once.

    +

    For Fn/FnMut, the detailed answer involves answering a related question: is the coroutine-closure lending? Because if it is, then it cannot implement the non-lending Fn/FnMut traits.

    +

    Determining when the coroutine-closure must lend its upvars is implemented in the should_reborrow_from_env_of_parent_coroutine_closure helper function30. Specifically, this needs to happen in two places:

    +
      +
    1. Are we borrowing data owned by the parent closure? We can determine if that is the case by checking if the parent capture is by-move, EXCEPT if we apply a deref projection, which means we're reborrowing a reference that we captured by-move.
    2. +
    +
    #![allow(unused)]
    +fn main() {
    +let x = &1i32; // Let's call this lifetime `'1`.
    +let c = async move || {
    +    println!("{:?}", *x);
    +    // Even though the inner coroutine borrows by ref, we're only capturing `*x`,
    +    // not `x`, so the inner closure is allowed to reborrow the data for `'1`.
    +};
    +}
    +
      +
    1. If a coroutine is mutably borrowing from a parent capture, then that mutable borrow cannot live for longer than either the parent or the borrow that we have on the original upvar. Therefore we always need to borrow the child capture with the lifetime of the parent coroutine-closure's env.
    2. +
    +
    #![allow(unused)]
    +fn main() {
    +let mut x = 1i32;
    +let c = async || {
    +    x = 1;
    +    // The parent borrows `x` for some `&'1 mut i32`.
    +    // However, when we call `c()`, we implicitly autoref for the signature of
    +    // `AsyncFnMut::async_call_mut`. Let's call that lifetime `'call`. Since
    +    // the maximum that `&'call mut &'1 mut i32` can be reborrowed is `&'call mut i32`,
    +    // the inner coroutine should capture w/ the lifetime of the coroutine-closure.
    +};
    +}
    +

    If either of these cases apply, then we should capture the borrow with the lifetime of the parent coroutine-closure's env. Luckily, if this function is not correct, then the program is not unsound, since we still borrowck and validate the choices made from this function -- the only side-effect is that the user may receive unnecessary borrowck errors.

    +

    Instance resolution

    +

    If a coroutine-closure has a closure-kind of FnOnce, then its AsyncFnOnce::call_once and FnOnce::call_once implementations resolve to the coroutine-closure's body31, and the Future::poll of the coroutine that gets returned resolves to the body of the child closure.

    +

    If a coroutine-closure has a closure-kind of FnMut/Fn, then the same applies to AsyncFn and the corresponding Future implementation of the coroutine that gets returned.31 However, we use a MIR shim to generate the implementation of AsyncFnOnce::call_once/FnOnce::call_once32, and Fn::call/FnMut::call_mut instances if they exist33.

    +

    This is represented by the ConstructCoroutineInClosureShim34. The receiver_by_ref bool will be true if this is the instance of Fn::call/FnMut::call_mut.35 The coroutine that all of these instances returns corresponds to the by-move body we will have synthesized by this point.36

    +

    Borrow-checking

    +

    It turns out that borrow-checking async closures is pretty straightforward. After adding a new DefiningTy::CoroutineClosure37 variant, and teaching borrowck how to generate the signature of the coroutine-closure38, borrowck proceeds totally fine.

    +

    One thing to note is that we don't borrow-check the synthetic body we make for by-move coroutines, since by construction (and the validity of the by-ref coroutine body it was derived from) it must be valid.

    +
    +
    1. +

      https://github.com/rust-lang/rust/blob/5ca0e9fa9b2f92b463a0a2b0b34315e09c0b7236/compiler/rustc_ast_lowering/src/expr.rs#L1147

      +
    2. +
    3. +

      https://github.com/rust-lang/rust/blob/5ca0e9fa9b2f92b463a0a2b0b34315e09c0b7236/compiler/rustc_ast_lowering/src/expr.rs#L1117

      +
    4. +
    5. +

      https://github.com/rust-lang/rust/blob/5ca0e9fa9b2f92b463a0a2b0b34315e09c0b7236/compiler/rustc_ast_lowering/src/item.rs#L1096-L1100

      +
    6. +
    7. +

      https://github.com/rust-lang/rust/blob/5ca0e9fa9b2f92b463a0a2b0b34315e09c0b7236/compiler/rustc_ast_lowering/src/item.rs#L1276-L1279

      +
    8. +
    9. +

      https://github.com/rust-lang/rust/blob/5ca0e9fa9b2f92b463a0a2b0b34315e09c0b7236/compiler/rustc_hir_typeck/src/upvar.rs#L250-L256

      +
    10. +
    11. +

      https://github.com/rust-lang/rust/blob/5ca0e9fa9b2f92b463a0a2b0b34315e09c0b7236/compiler/rustc_type_ir/src/ty_kind.rs#L163-L168

      +
    12. +
    13. +

      https://github.com/rust-lang/rust/blob/5ca0e9fa9b2f92b463a0a2b0b34315e09c0b7236/compiler/rustc_type_ir/src/ty_kind/closure.rs#L221-L229

      +
    14. +
    15. +

      https://github.com/rust-lang/rust/blob/5ca0e9fa9b2f92b463a0a2b0b34315e09c0b7236/compiler/rustc_type_ir/src/ty_kind/closure.rs#L362

      +
    16. +
    17. +

      https://github.com/rust-lang/rust/blob/5ca0e9fa9b2f92b463a0a2b0b34315e09c0b7236/compiler/rustc_type_ir/src/ty_kind/closure.rs#L447-L455

      +
    18. +
    19. +

      https://github.com/rust-lang/rust/blob/5ca0e9fa9b2f92b463a0a2b0b34315e09c0b7236/library/core/src/ops/async_function.rs#L36

      +
    20. +
    21. +

      https://github.com/rust-lang/rust/blob/5ca0e9fa9b2f92b463a0a2b0b34315e09c0b7236/library/core/src/ops/async_function.rs#L30

      +
    22. +
    23. +

      https://github.com/rust-lang/rust/blob/5ca0e9fa9b2f92b463a0a2b0b34315e09c0b7236/compiler/rustc_type_ir/src/ty_kind/closure.rs#L419

      +
    24. +
    25. +

      https://github.com/rust-lang/rust/blob/7c7bb7dc017545db732f5cffec684bbaeae0a9a0/compiler/rustc_next_trait_solver/src/solve/assembly/structural_traits.rs#L404-L409

      +
    26. +
    27. +

      https://github.com/rust-lang/rust/blob/5ca0e9fa9b2f92b463a0a2b0b34315e09c0b7236/compiler/rustc_mir_transform/src/coroutine/by_move_body.rs#L1-L70

      +
    28. +
    29. +

      https://github.com/rust-lang/rust/blob/5ca0e9fa9b2f92b463a0a2b0b34315e09c0b7236/compiler/rustc_mir_transform/src/coroutine/by_move_body.rs#L131-L195

      +
    30. +
    31. +

      https://github.com/rust-lang/rust/blob/5ca0e9fa9b2f92b463a0a2b0b34315e09c0b7236/compiler/rustc_mir_transform/src/lib.rs#L339-L342

      +
    32. +
    33. +

      https://github.com/rust-lang/rust/blob/5ca0e9fa9b2f92b463a0a2b0b34315e09c0b7236/compiler/rustc_hir_typeck/src/closure.rs#L345-L362

      +
    34. +
    35. +

      https://github.com/rust-lang/rust/blob/5ca0e9fa9b2f92b463a0a2b0b34315e09c0b7236/compiler/rustc_hir_typeck/src/closure.rs#L486-L487

      +
    36. +
    37. +

      https://github.com/rust-lang/rust/blob/5ca0e9fa9b2f92b463a0a2b0b34315e09c0b7236/compiler/rustc_hir_typeck/src/closure.rs#L517-L534

      +
    38. +
    39. +

      https://github.com/rust-lang/rust/blob/5ca0e9fa9b2f92b463a0a2b0b34315e09c0b7236/compiler/rustc_hir_typeck/src/closure.rs#L575-L590

      +
    40. +
    41. +

      https://github.com/rust-lang/rust/blob/705cfe0e966399e061d64dd3661bfbc57553ed87/compiler/rustc_hir_typeck/src/callee.rs#L169-L210

      +
    42. +
    43. +

      https://github.com/rust-lang/rust/blob/705cfe0e966399e061d64dd3661bfbc57553ed87/compiler/rustc_type_ir/src/ty_kind/closure.rs#L574-L576

      +
    44. +
    45. +

      https://github.com/rust-lang/rust/blob/705cfe0e966399e061d64dd3661bfbc57553ed87/compiler/rustc_type_ir/src/ty_kind/closure.rs#L554-L563

      +
    46. +
    47. +

      https://github.com/rust-lang/rust/blob/7c7bb7dc017545db732f5cffec684bbaeae0a9a0/library/core/src/ops/async_function.rs#L135-L144

      +
    48. +
    49. +

      https://github.com/rust-lang/rust/blob/7c7bb7dc017545db732f5cffec684bbaeae0a9a0/library/core/src/ops/async_function.rs#L146-L154

      +
    50. +
    51. +

      https://github.com/rust-lang/rust/blob/7c7bb7dc017545db732f5cffec684bbaeae0a9a0/compiler/rustc_hir_typeck/src/upvar.rs#L250-L259

      +
    52. +
    53. +

      https://github.com/rust-lang/rust/blob/7c7bb7dc017545db732f5cffec684bbaeae0a9a0/compiler/rustc_hir_typeck/src/upvar.rs#L375-L471

      +
    54. +
    55. +

      https://github.com/rust-lang/rust/blob/7c7bb7dc017545db732f5cffec684bbaeae0a9a0/compiler/rustc_hir_typeck/src/upvar.rs#L211-L248

      +
    56. +
    57. +

      https://github.com/rust-lang/rust/blob/7c7bb7dc017545db732f5cffec684bbaeae0a9a0/compiler/rustc_hir_typeck/src/upvar.rs#L532-L539

      +
    58. +
    59. +

      https://github.com/rust-lang/rust/blob/7c7bb7dc017545db732f5cffec684bbaeae0a9a0/compiler/rustc_hir_typeck/src/upvar.rs#L1818-L1860

      +
    60. +
    61. +

      https://github.com/rust-lang/rust/blob/705cfe0e966399e061d64dd3661bfbc57553ed87/compiler/rustc_ty_utils/src/instance.rs#L351 ↩2

      +
    62. +
    63. +

      https://github.com/rust-lang/rust/blob/705cfe0e966399e061d64dd3661bfbc57553ed87/compiler/rustc_ty_utils/src/instance.rs#L341-L349

      +
    64. +
    65. +

      https://github.com/rust-lang/rust/blob/705cfe0e966399e061d64dd3661bfbc57553ed87/compiler/rustc_ty_utils/src/instance.rs#L312-L326

      +
    66. +
    67. +

      https://github.com/rust-lang/rust/blob/705cfe0e966399e061d64dd3661bfbc57553ed87/compiler/rustc_middle/src/ty/instance.rs#L129-L134

      +
    68. +
    69. +

      https://github.com/rust-lang/rust/blob/705cfe0e966399e061d64dd3661bfbc57553ed87/compiler/rustc_middle/src/ty/instance.rs#L136-L141

      +
    70. +
    71. +

      https://github.com/rust-lang/rust/blob/07cbbdd69363da97075650e9be24b78af0bcdd23/compiler/rustc_middle/src/ty/instance.rs#L841

      +
    72. +
    73. +

      https://github.com/rust-lang/rust/blob/705cfe0e966399e061d64dd3661bfbc57553ed87/compiler/rustc_borrowck/src/universal_regions.rs#L110-L115

      +
    74. +
    75. +

      https://github.com/rust-lang/rust/blob/7c7bb7dc017545db732f5cffec684bbaeae0a9a0/compiler/rustc_borrowck/src/universal_regions.rs#L743-L790

      +
    76. +

    From MIR to binaries

    +

    All of the preceding chapters of this guide have one thing in common: +we never generated any executable machine code at all! +With this chapter, all of that changes.

    +

    So far, +we've shown how the compiler can take raw source code in text format +and transform it into MIR. +We have also shown how the compiler does various +analyses on the code to detect things like type or lifetime errors. +Now, we will finally take the MIR and produce some executable machine code.

    +
    +

    NOTE: This part of a compiler is often called the backend. +The term is a bit overloaded because in the compiler source, +it usually refers to the "codegen backend" (i.e. LLVM, Cranelift, or GCC). +Usually, when you see the word "backend" in this part, +we are referring to the "codegen backend".

    +
    +

    So what do we need to do?

    +
      +
    1. First, we need to collect the set of things to generate code for. +In particular, +we need to find out which concrete types to substitute for generic ones, +since we need to generate code for the concrete types. +Generating code for the concrete types +(i.e. emitting a copy of the code for each concrete type) is called monomorphization, +so the process of collecting all the concrete types is called monomorphization collection.
    2. +
    3. Next, we need to actually lower the MIR to a codegen IR +(usually LLVM IR) for each concrete type we collected.
    4. +
    5. Finally, we need to invoke the codegen backend, +which runs a bunch of optimization passes, +generates executable code, +and links together an executable binary.
    6. +
    +

    The code for codegen is actually a bit complex due to a few factors:

    +
      +
    • Support for multiple codegen backends (LLVM, Cranelift, and GCC). +We try to share as much backend code between them as possible, +so a lot of it is generic over the codegen implementation. +This means that there are often a lot of layers of abstraction.
    • +
    • Codegen happens asynchronously in another thread for performance.
    • +
    • The actual codegen is done by a third-party library (either of the 3 backends).
    • +
    +

    Generally, the rustc_codegen_ssa crate contains backend-agnostic code, +while the rustc_codegen_llvm crate contains code specific to LLVM codegen.

    +

    At a very high level, the entry point is +rustc_codegen_ssa::base::codegen_crate. +This function starts the process discussed in the rest of this chapter.

    +

    MIR optimizations

    +

    MIR optimizations are optimizations run on the MIR to produce better MIR +before codegen. This is important for two reasons: first, it makes the final +generated executable code better, and second, it means that LLVM has less work +to do, so compilation is faster. Note that since MIR is generic (not +monomorphized yet), these optimizations are particularly +effective; we can optimize the generic version, so all of the monomorphizations +are cheaper!

    +

    MIR optimizations run after borrow checking. We run a series of optimization +passes over the MIR to improve it. Some passes are required to run on all code, +some passes don't actually do optimizations but only check stuff, and some +passes are only turned on in release mode.

    +

    The optimized_mir query is called to produce the optimized MIR +for a given DefId. This query makes sure that the borrow checker has +run and that some validation has occurred. Then, it steals the MIR, +optimizes it, and returns the improved MIR.

    +

    Quickstart for adding a new optimization

    +
      +
    1. +

      Make a Rust source file in tests/mir-opt that shows the code you want to +optimize. This should be kept simple, so avoid println! or other formatting +code if it's not necessary for the optimization. The reason for this is that +println!, format!, etc. generate a lot of MIR that can make it harder to +understand what the optimization does to the test.

      +
    2. +
    3. +

      Run ./x test --bless tests/mir-opt/<your-test>.rs to generate a MIR +dump. Read this README for instructions on how to dump +things.

      +
    4. +
    5. +

      Commit the current working directory state. The reason you should commit the +test output before you implement the optimization is so that you (and your +reviewers) can see a before/after diff of what the optimization changed.

      +
    6. +
    7. +

      Implement a new optimization in compiler/rustc_mir_transform/src. +The fastest and easiest way to do this is to

      +
        +
      1. pick a small optimization (such as remove_storage_markers) and copy it +to a new file,
      2. +
      3. add your optimization to one of the lists in the +run_optimization_passes() function,
      4. +
      5. and then start modifying the copied optimization.
      6. +
      +
    8. +
    9. +

      Rerun ./x test --bless tests/mir-opt/<your-test>.rs to regenerate the +MIR dumps. Look at the diffs to see if they are what you expect.

      +
    10. +
    11. +

      Run ./x test tests/ui to see if your optimization broke anything.

      +
    12. +
    13. +

      If there are issues with your optimization, experiment with it a bit and +repeat steps 5 and 6.

      +
    14. +
    15. +

      Commit and open a PR. You can do this at any point, even if things aren't +working yet, so that you can ask for feedback on the PR. Open a "WIP" PR +(just prefix your PR title with [WIP] or otherwise note that it is a +work in progress) in that case.

      +

      Make sure to commit the blessed test output as well! It's necessary for CI to +pass and it's very helpful to reviewers.

      +
    16. +
    +

    If you have any questions along the way, feel free to ask in +#t-compiler/wg-mir-opt on Zulip.

    +

    Defining optimization passes

    +

    The list of passes run and the order in which they are run is defined by the +run_optimization_passes function. It contains an array of passes to +run. Each pass in the array is a struct that implements the MirPass trait. +The array is an array of &dyn MirPass trait objects. Typically, a pass is +implemented in its own module of the rustc_mir_transform crate.

    +

    Some examples of passes are:

    +
      +
    • CleanupPostBorrowck: Remove some of the info that is only needed for +analyses, rather than codegen.
    • +
    • ConstProp: Does constant propagation.
    • +
    +

    You can see the "Implementors" section of the MirPass rustdocs for more examples.

    +

    MIR optimization levels

    +

    MIR optimizations can come in various levels of readiness. Experimental +optimizations may cause miscompilations, or slow down compile times. +These passes are still included in nightly builds to gather feedback and make it easier to modify +the pass. To enable working with slow or otherwise experimental optimization passes, +you can specify the -Z mir-opt-level debug flag. You can find the +definitions of the levels in the compiler MCP. If you are developing a MIR pass and +want to query whether your optimization pass should run, you can check the +current level using tcx.sess.opts.unstable_opts.mir_opt_level.

    +

    MIR Debugging

    +

    The -Z dump-mir flag can be used to dump a text representation of the MIR. +The following optional flags, used in combination with -Z dump-mir, enable +additional output formats, including:

    +
      +
    • -Z dump-mir-graphviz - dumps a .dot file that represents MIR as a +control-flow graph
    • +
    • -Z dump-mir-dataflow - dumps a .dot file showing the dataflow state at +each point in the control-flow graph
    • +
    +

    -Z dump-mir=F is a handy compiler option that will let you view the MIR for +each function at each stage of compilation. -Z dump-mir takes a filter F +which allows you to control which functions and which passes you are +interested in. For example:

    +
    > rustc -Z dump-mir=foo ...
    +
    +

    This will dump the MIR for any function whose name contains foo; it +will dump the MIR both before and after every pass. Those files will +be created in the mir_dump directory. There will likely be quite a +lot of them!

    +
    > cat > foo.rs
    +fn main() {
    +    println!("Hello, world!");
    +}
    +^D
    +> rustc -Z dump-mir=main foo.rs
    +> ls mir_dump/* | wc -l
    +     161
    +
    +

    The files have names like rustc.main.000-000.CleanEndRegions.after.mir. These +names have a number of parts:

    +
    rustc.main.000-000.CleanEndRegions.after.mir
    +      ---- --- --- --------------- ----- either before or after
    +      |    |   |   name of the pass
    +      |    |   index of dump within the pass (usually 0, but some passes dump intermediate states)
    +      |    index of the pass
    +      def-path to the function etc being dumped
    +
    +

    You can also make more selective filters. For example, main & CleanEndRegions +will select for things that reference both main and the pass +CleanEndRegions:

    +
    > rustc -Z dump-mir='main & CleanEndRegions' foo.rs
    +> ls mir_dump
    +rustc.main.000-000.CleanEndRegions.after.mir	rustc.main.000-000.CleanEndRegions.before.mir
    +
    + +

    Filters can also have | parts to combine multiple sets of +&-filters. For example main & CleanEndRegions | main & NoLandingPads will select either main and CleanEndRegions or +main and NoLandingPads:

    +
    > rustc -Z dump-mir='main & CleanEndRegions | main & NoLandingPads' foo.rs
    +> ls mir_dump
    +rustc.main-promoted[0].002-000.NoLandingPads.after.mir
    +rustc.main-promoted[0].002-000.NoLandingPads.before.mir
    +rustc.main-promoted[0].002-006.NoLandingPads.after.mir
    +rustc.main-promoted[0].002-006.NoLandingPads.before.mir
    +rustc.main-promoted[1].002-000.NoLandingPads.after.mir
    +rustc.main-promoted[1].002-000.NoLandingPads.before.mir
    +rustc.main-promoted[1].002-006.NoLandingPads.after.mir
    +rustc.main-promoted[1].002-006.NoLandingPads.before.mir
    +rustc.main.000-000.CleanEndRegions.after.mir
    +rustc.main.000-000.CleanEndRegions.before.mir
    +rustc.main.002-000.NoLandingPads.after.mir
    +rustc.main.002-000.NoLandingPads.before.mir
    +rustc.main.002-006.NoLandingPads.after.mir
    +rustc.main.002-006.NoLandingPads.before.mir
    +
    +

    (Here, the main-promoted[0] files refer to the MIR for "promoted constants" +that appeared within the main function.)

    +

    The -Z unpretty=mir-cfg flag can be used to create a graphviz MIR +control-flow diagram for the whole crate:

    +

    A control-flow diagram

    +

    TODO: anything else?

    +

    Constant Evaluation

    +

    Constant evaluation is the process of computing values at compile time. For a +specific item (constant/static/array length) this happens after the MIR for the +item is borrow-checked and optimized. In many cases trying to const evaluate an +item will trigger the computation of its MIR for the first time.

    +

    Prominent examples are:

    +
      +
    • The initializer of a static
    • +
    • Array length +
        +
      • needs to be known to reserve stack or heap space
      • +
      +
    • +
    • Enum variant discriminants +
        +
      • needs to be known to prevent two variants from having the same +discriminant
      • +
      +
    • +
    • Patterns +
        +
      • need to be known to check for overlapping patterns
      • +
      +
    • +
    +

    Additionally constant evaluation can be used to reduce the workload or binary +size at runtime by precomputing complex operations at compile time and only +storing the result.

    +

    All uses of constant evaluation can either be categorized as "influencing the type system" +(array lengths, enum variant discriminants, const generic parameters), or as solely being +done to precompute expressions to be used at runtime.

    +

    Constant evaluation can be done by calling the const_eval_* functions of TyCtxt. +They're the wrappers of the const_eval query.

    +
      +
    • const_eval_global_id_for_typeck evaluates a constant to a valtree, +so the result value can be further inspected by the compiler.
    • +
    • const_eval_global_id evaluate a constant to an "opaque blob" containing its final value; +this is only useful for codegen backends and the CTFE evaluator engine itself.
    • +
    • eval_static_initializer specifically computes the initial values of a static. +Statics are special; all other functions do not represent statics correctly +and have thus assertions preventing their use on statics.
    • +
    +

    The const_eval_* functions use a ParamEnv of environment +in which the constant is evaluated (e.g. the function within which the constant is used) +and a GlobalId. The GlobalId is made up of an Instance referring to a constant +or static or of an Instance of a function and an index into the function's Promoted table.

    +

    Constant evaluation returns an EvalToValTreeResult for type system constants +or EvalToConstValueResult with either the error, or a representation of the +evaluated constant: a valtree or a MIR constant +value, respectively.

    +

    Interpreter

    + +

    The interpreter is a virtual machine for executing MIR without compiling to +machine code. It is usually invoked via tcx.const_eval_* functions. The +interpreter is shared between the compiler (for compile-time function +evaluation, CTFE) and the tool Miri, which +uses the same virtual machine to detect Undefined Behavior in (unsafe) Rust +code.

    +

    If you start out with a constant:

    +
    #![allow(unused)]
    +fn main() {
    +const FOO: usize = 1 << 12;
    +}
    +

    rustc doesn't actually invoke anything until the constant is either used or +placed into metadata.

    +

    Once you have a use-site like:

    +
    type Foo = [u8; FOO - 42];
    +

    The compiler needs to figure out the length of the array before being able to +create items that use the type (locals, constants, function arguments, ...).

    +

    To obtain the (in this case empty) parameter environment, one can call +let param_env = tcx.param_env(length_def_id);. The GlobalId needed is

    +
    let gid = GlobalId {
    +    promoted: None,
    +    instance: Instance::mono(length_def_id),
    +};
    +

    Invoking tcx.const_eval(param_env.and(gid)) will now trigger the creation of +the MIR of the array length expression. The MIR will look something like this:

    +
    Foo::{{constant}}#0: usize = {
    +    let mut _0: usize;
    +    let mut _1: (usize, bool);
    +
    +    bb0: {
    +        _1 = CheckedSub(const FOO, const 42usize);
    +        assert(!move (_1.1: bool), "attempt to subtract with overflow") -> bb1;
    +    }
    +
    +    bb1: {
    +        _0 = move (_1.0: usize);
    +        return;
    +    }
    +}
    +
    +

    Before the evaluation, a virtual memory location (in this case essentially a +vec![u8; 4] or vec![u8; 8]) is created for storing the evaluation result.

    +

    At the start of the evaluation, _0 and _1 are +Operand::Immediate(Immediate::Scalar(ScalarMaybeUndef::Undef)). This is quite +a mouthful: Operand can represent either data stored somewhere in the +interpreter memory (Operand::Indirect), or (as an optimization) +immediate data stored in-line. And Immediate can either be a single +(potentially uninitialized) scalar value (integer or thin pointer), +or a pair of two of them. In our case, the single scalar value is not (yet) +initialized.

    +

    When the initialization of _1 is invoked, the value of the FOO constant is +required, and triggers another call to tcx.const_eval_*, which will not be shown +here. If the evaluation of FOO is successful, 42 will be subtracted from its +value 4096 and the result stored in _1 as +Operand::Immediate(Immediate::ScalarPair(Scalar::Raw { data: 4054, .. }, Scalar::Raw { data: 0, .. }). The first part of the pair is the computed value, +the second part is a bool that's true if an overflow happened. A Scalar::Raw +also stores the size (in bytes) of this scalar value; we are eliding that here.

    +

    The next statement asserts that said boolean is 0. In case the assertion +fails, its error message is used for reporting a compile-time error.

    +

    Since it does not fail, Operand::Immediate(Immediate::Scalar(Scalar::Raw { data: 4054, .. })) is stored in the virtual memory it was allocated before the +evaluation. _0 always refers to that location directly.

    +

    After the evaluation is done, the return value is converted from Operand to +ConstValue by op_to_const: the former representation is geared towards +what is needed during const evaluation, while ConstValue is shaped by the +needs of the remaining parts of the compiler that consume the results of const +evaluation. As part of this conversion, for types with scalar values, even if +the resulting Operand is Indirect, it will return an immediate +ConstValue::Scalar(computed_value) (instead of the usual ConstValue::ByRef). +This makes using the result much more efficient and also more convenient, as no +further queries need to be executed in order to get at something as simple as a +usize.

    +

    Future evaluations of the same constants will not actually invoke +the interpreter, but just use the cached result.

    +

    Datastructures

    +

    The interpreter's outside-facing datastructures can be found in +rustc_middle/src/mir/interpret. +This is mainly the error enum and the ConstValue and Scalar types. A +ConstValue can be either Scalar (a single Scalar, i.e., integer or thin +pointer), Slice (to represent byte slices and strings, as needed for pattern +matching) or ByRef, which is used for anything else and refers to a virtual +allocation. These allocations can be accessed via the methods on +tcx.interpret_interner. A Scalar is either some Raw integer or a pointer; +see the next section for more on that.

    +

    If you are expecting a numeric result, you can use eval_usize (panics on +anything that can't be represented as a u64) or try_eval_usize which results +in an Option<u64> yielding the Scalar if possible.

    +

    Memory

    +

    To support any kind of pointers, the interpreter needs to have a "virtual memory" that the +pointers can point to. This is implemented in the Memory type. In the +simplest model, every global variable, stack variable and every dynamic +allocation corresponds to an Allocation in that memory. (Actually using an +allocation for every MIR stack variable would be very inefficient; that's why we +have Operand::Immediate for stack variables that are both small and never have +their address taken. But that is purely an optimization.)

    +

    Such an Allocation is basically just a sequence of u8 storing the value of +each byte in this allocation. (Plus some extra data, see below.) Every +Allocation has a globally unique AllocId assigned in Memory. With that, a +Pointer consists of a pair of an AllocId (indicating the allocation) and +an offset into the allocation (indicating which byte of the allocation the +pointer points to). It may seem odd that a Pointer is not just an integer +address, but remember that during const evaluation, we cannot know at which +actual integer address the allocation will end up -- so we use AllocId as +symbolic base addresses, which means we need a separate offset. (As an aside, +it turns out that pointers at run-time are +more than just integers, too.)

    +

    These allocations exist so that references and raw pointers have something to +point to. There is no global linear heap in which things are allocated, but each +allocation (be it for a local variable, a static or a (future) heap allocation) +gets its own little memory with exactly the required size. So if you have a +pointer to an allocation for a local variable a, there is no possible (no +matter how unsafe) operation that you can do that would ever change said pointer +to a pointer to a different local variable b. +Pointer arithmetic on a will only ever change its offset; the AllocId stays the same.

    +

    This, however, causes a problem when we want to store a Pointer into an +Allocation: we cannot turn it into a sequence of u8 of the right length! +AllocId and offset together are twice as big as a pointer "seems" to be. This +is what the relocation field of Allocation is for: the byte offset of the +Pointer gets stored as a bunch of u8, while its AllocId gets stored +out-of-band. The two are reassembled when the Pointer is read from memory. +The other bit of extra data an Allocation needs is undef_mask for keeping +track of which of its bytes are initialized.

    +

    Global memory and exotic allocations

    +

    Memory exists only during evaluation; it gets destroyed when the +final value of the constant is computed. In case that constant contains any +pointers, those get "interned" and moved to a global "const eval memory" that is +part of TyCtxt. These allocations stay around for the remaining computation +and get serialized into the final output (so that dependent crates can use +them).

    +

    Moreover, to also support function pointers, the global memory in TyCtxt can +also contain "virtual allocations": instead of an Allocation, these contain an +Instance. That allows a Pointer to point to either normal data or a +function, which is needed to be able to evaluate casts from function pointers to +raw pointers.

    +

    Finally, the GlobalAlloc type used in the global memory also contains a +variant Static that points to a particular const or static item. This is +needed to support circular statics, where we need to have a Pointer to a +static for which we cannot yet have an Allocation as we do not know the +bytes of its value.

    +

    Pointer values vs Pointer types

    +

    One common cause of confusion in the interpreter is that being a pointer value and having +a pointer type are entirely independent properties. By "pointer value", we +refer to a Scalar::Ptr containing a Pointer and thus pointing somewhere into +the interpreter's virtual memory. This is in contrast to Scalar::Raw, which is just some +concrete integer.

    +

    However, a variable of pointer or reference type, such as *const T or &T, +does not have to have a pointer value: it could be obtained by casting or +transmuting an integer to a pointer. +And similarly, when casting or transmuting a reference to some +actual allocation to an integer, we end up with a pointer value +(Scalar::Ptr) at integer type (usize). This is a problem because we +cannot meaningfully perform integer operations such as division on pointer +values.

    +

    Interpretation

    +

    Although the main entry point to constant evaluation is the tcx.const_eval_* +functions, there are additional functions in +rustc_const_eval/src/const_eval +that allow accessing the fields of a ConstValue (ByRef or otherwise). You should +never have to access an Allocation directly except for translating it to the +compilation target (at the moment just LLVM).

    +

    The interpreter starts by creating a virtual stack frame for the current constant that is +being evaluated. There's essentially no difference between a constant and a +function with no arguments, except that constants do not allow local (named) +variables at the time of writing this guide.

    +

    A stack frame is defined by the Frame type in +rustc_const_eval/src/interpret/eval_context.rs +and contains all the local +variables memory (None at the start of evaluation). Each frame refers to the +evaluation of either the root constant or subsequent calls to const fn. The +evaluation of another constant simply calls tcx.const_eval_*, which produce an +entirely new and independent stack frame.

    +

    The frames are just a Vec<Frame>, there's no way to actually refer to a +Frame's memory even if horrible shenanigans are done via unsafe code. The only +memory that can be referred to are Allocations.

    +

    The interpreter now calls the step method (in +rustc_const_eval/src/interpret/step.rs +) until it either returns an error or has no further statements to execute. Each +statement will now initialize or modify the locals or the virtual memory +referred to by a local. This might require evaluating other constants or +statics, which just recursively invokes tcx.const_eval_*.

    +

    Monomorphization

    + +

    As you probably know, Rust has a very expressive type system that has extensive +support for generic types. But of course, assembly is not generic, so we need +to figure out the concrete types of all the generics before the code can +execute.

    +

    Different languages handle this problem differently. For example, in some +languages, such as Java, we may not know the most precise type of value until +runtime. In the case of Java, this is ok because (almost) all variables are +reference values anyway (i.e. pointers to a heap allocated object). This +flexibility comes at the cost of performance, since all accesses to an object +must dereference a pointer.

    +

    Rust takes a different approach: it monomorphizes all generic types. This +means that compiler stamps out a different copy of the code of a generic +function for each concrete type needed. For example, if I use a Vec<u64> and +a Vec<String> in my code, then the generated binary will have two copies of +the generated code for Vec: one for Vec<u64> and another for Vec<String>. +The result is fast programs, but it comes at the cost of compile time (creating +all those copies can take a while) and binary size (all those copies might take +a lot of space).

    +

    Monomorphization is the first step in the backend of the Rust compiler.

    +

    Collection

    +

    First, we need to figure out what concrete types we need for all the generic +things in our program. This is called collection, and the code that does this +is called the monomorphization collector.

    +

    Take this example:

    +
    fn banana() {
    +   peach::<u64>();
    +}
    +
    +fn main() {
    +    banana();
    +}
    +

    The monomorphization collector will give you a list of [main, banana, peach::<u64>]. These are the functions that will have machine code generated +for them. Collector will also add things like statics to that list.

    +

    See the collector rustdocs for more info.

    +

    The monomorphization collector is run just before MIR lowering and codegen. +rustc_codegen_ssa::base::codegen_crate calls the +collect_and_partition_mono_items query, which does monomorphization +collection and then partitions them into codegen +units.

    +

    Codegen Unit (CGU) partitioning

    +

    For better incremental build times, the CGU partitioner creates two CGU for each source level +modules. One is for "stable" i.e. non-generic code and the other is more volatile code i.e. +monomorphized/specialized instances.

    +

    For dependencies, consider Crate A and Crate B, such that Crate B depends on Crate A. +The following table lists different scenarios for a function in Crate A that might be used by one +or more modules in Crate B.

    +
    + + + + +
    Crate A functionBehavior
    Non-generic functionCrate A function doesn't appear in any codegen units of Crate B
    Non-generic #[inline] functionCrate A function appears within a single CGU of Crate B, and exists even after post-inlining stage
    Generic functionRegardless of inlining, all monomorphized (specialized) functions
    from Crate A appear within a single codegen unit for Crate B.
    The codegen unit exists even after the post inlining stage.
    Generic #[inline] function- same -
    +
    +

    For more details about the partitioner read the module level documentation.

    +

    Lowering MIR to a Codegen IR

    +

    Now that we have a list of symbols to generate from the collector, we need to +generate some sort of codegen IR. In this chapter, we will assume LLVM IR, +since that's what rustc usually uses. The actual monomorphization is performed +as we go, while we do the translation.

    +

    Recall that the backend is started by +rustc_codegen_ssa::base::codegen_crate. Eventually, this reaches +rustc_codegen_ssa::mir::codegen_mir, which does the lowering from +MIR to LLVM IR.

    +

    The code is split into modules which handle particular MIR primitives:

    + +

    Before a function is translated a number of simple and primitive analysis +passes will run to help us generate simpler and more efficient LLVM IR. An +example of such an analysis pass would be figuring out which variables are +SSA-like, so that we can translate them to SSA directly rather than relying on +LLVM's mem2reg for those variables. The analysis can be found in +rustc_codegen_ssa::mir::analyze.

    +

    Usually a single MIR basic block will map to a LLVM basic block, with very few +exceptions: intrinsic or function calls and less basic MIR statements like +assert can result in multiple basic blocks. This is a perfect lede into the +non-portable LLVM-specific part of the code generation. Intrinsic generation is +fairly easy to understand as it involves very few abstraction levels in between +and can be found in rustc_codegen_llvm::intrinsic.

    +

    Everything else will use the builder interface. This is the code that gets +called in the rustc_codegen_ssa::mir::* modules discussed above.

    +
    +

    TODO: discuss how constants are generated

    +
    +

    Code generation

    +

    Code generation (or "codegen") is the part of the compiler +that actually generates an executable binary. +Usually, rustc uses LLVM for code generation, +but there is also support for Cranelift and GCC. +The key is that rustc doesn't implement codegen itself. +It's worth noting, though, that in the Rust source code, +many parts of the backend have codegen in their names +(there are no hard boundaries).

    +
    +

    NOTE: If you are looking for hints on how to debug code generation bugs, +please see this section of the debugging chapter.

    +
    +

    What is LLVM?

    +

    LLVM is "a collection of modular and reusable compiler and +toolchain technologies". In particular, the LLVM project contains a pluggable +compiler backend (also called "LLVM"), which is used by many compiler projects, +including the clang C compiler and our beloved rustc.

    +

    LLVM takes input in the form of LLVM IR. It is basically assembly code with +additional low-level types and annotations added. These annotations are helpful +for doing optimizations on the LLVM IR and outputted machine code. The end +result of all this is (at long last) something executable (e.g. an ELF object, +an EXE, or wasm).

    +

    There are a few benefits to using LLVM:

    +
      +
    • We don't have to write a whole compiler backend. This reduces implementation +and maintenance burden.
    • +
    • We benefit from the large suite of advanced optimizations that the LLVM +project has been collecting.
    • +
    • We can automatically compile Rust to any of the platforms for which LLVM has +support. For example, as soon as LLVM added support for wasm, voila! rustc, +clang, and a bunch of other languages were able to compile to wasm! (Well, +there was some extra stuff to be done, but we were 90% there anyway).
    • +
    • We and other compiler projects benefit from each other. For example, when the +Spectre and Meltdown security vulnerabilities were discovered, +only LLVM needed to be patched.
    • +
    +

    Running LLVM, linking, and metadata generation

    +

    Once LLVM IR for all of the functions and statics, etc is built, it is time to +start running LLVM and its optimization passes. LLVM IR is grouped into +"modules". Multiple "modules" can be codegened at the same time to aid in +multi-core utilization. These "modules" are what we refer to as codegen +units. These units were established way back during monomorphization +collection phase.

    +

    Once LLVM produces objects from these modules, these objects are passed to the +linker along with, optionally, the metadata object and an archive or an +executable is produced.

    +

    It is not necessarily the codegen phase described above that runs the +optimizations. With certain kinds of LTO, the optimization might happen at the +linking time instead. It is also possible for some optimizations to happen +before objects are passed on to the linker and some to happen during the +linking.

    +

    This all happens towards the very end of compilation. The code for this can be +found in rustc_codegen_ssa::back and +rustc_codegen_llvm::back. Sadly, this piece of code is not +really well-separated into LLVM-dependent code; the rustc_codegen_ssa +contains a fair amount of code specific to the LLVM backend.

    +

    Once these components are done with their work you end up with a number of +files in your filesystem corresponding to the outputs you have requested.

    +

    Updating LLVM

    + + +

    Rust supports building against multiple LLVM versions:

    +
      +
    • Tip-of-tree for the current LLVM development branch is usually supported +within a few days. PRs for such fixes are tagged with llvm-main.
    • +
    • The latest released major version is always supported.
    • +
    • The one or two preceding major versions are usually supported.
    • +
    +

    By default, Rust uses its own fork in the rust-lang/llvm-project repository. +This fork is based on a release/$N.x branch of the upstream project, where +$N is either the latest released major version, or the current major version +in release candidate phase. The fork is never based on the main development +branch.

    +

    Our LLVM fork only accepts:

    +
      +
    • Backports of changes that have already landed upstream.
    • +
    • Workarounds for build issues affecting our CI environment.
    • +
    +

    With the exception of one grandfathered-in patch for SGX enablement, we do not +accept functional patches that have not been upstreamed first.

    +

    There are three types of LLVM updates, with different procedures:

    +
      +
    • Backports while the current major LLVM version is supported.
    • +
    • Backports while the current major LLVM version is no longer supported (or +the change is not eligible for upstream backport).
    • +
    • Update to a new major LLVM version.
    • +
    +

    Backports (upstream supported)

    +

    While the current major LLVM version is supported upstream, fixes should be +backported upstream first, and the release branch then merged back into the +Rust fork.

    +
      +
    1. Make sure the bugfix is in upstream LLVM.
    2. +
    3. If this hasn't happened already, request a backport to the upstream release +branch. If you have LLVM commit access, follow the backport process. +Otherwise, open an issue requesting the backport. Continue once the +backport has been approved and merged.
    4. +
    5. Identify the branch that rustc is currently using. The src/llvm-project +submodule is always pinned to a branch of the +rust-lang/llvm-project repository.
    6. +
    7. Fork the rust-lang/llvm-project repository.
    8. +
    9. Check out the appropriate branch (typically named rustc/a.b-yyyy-mm-dd).
    10. +
    11. Add a remote for the upstream repository using +git remote add upstream https://github.com/llvm/llvm-project.git and +fetch it using git fetch upstream.
    12. +
    13. Merge the upstream/release/$N.x branch.
    14. +
    15. Push this branch to your fork.
    16. +
    17. Send a Pull Request to rust-lang/llvm-project to the same branch as before. +Be sure to reference the Rust and/or LLVM issue that you're fixing in the PR +description.
    18. +
    19. Wait for the PR to be merged.
    20. +
    21. Send a PR to rust-lang/rust updating the src/llvm-project submodule with +your bugfix. This can be done locally with git submodule update --remote src/llvm-project typically.
    22. +
    23. Wait for PR to be merged.
    24. +
    +

    An example PR: +#59089

    +

    Backports (upstream not supported)

    +

    Upstream LLVM releases are only supported for two to three months after the +GA release. Once upstream backports are no longer accepted, changes should be +cherry-picked directly to our fork.

    +
      +
    1. Make sure the bugfix is in upstream LLVM.
    2. +
    3. Identify the branch that rustc is currently using. The src/llvm-project +submodule is always pinned to a branch of the +rust-lang/llvm-project repository.
    4. +
    5. Fork the rust-lang/llvm-project repository.
    6. +
    7. Check out the appropriate branch (typically named rustc/a.b-yyyy-mm-dd).
    8. +
    9. Add a remote for the upstream repository using +git remote add upstream https://github.com/llvm/llvm-project.git and +fetch it using git fetch upstream.
    10. +
    11. Cherry-pick the relevant commit(s) using git cherry-pick -x.
    12. +
    13. Push this branch to your fork.
    14. +
    15. Send a Pull Request to rust-lang/llvm-project to the same branch as before. +Be sure to reference the Rust and/or LLVM issue that you're fixing in the PR +description.
    16. +
    17. Wait for the PR to be merged.
    18. +
    19. Send a PR to rust-lang/rust updating the src/llvm-project submodule with +your bugfix. This can be done locally with git submodule update --remote src/llvm-project typically.
    20. +
    21. Wait for PR to be merged.
    22. +
    +

    An example PR: +#59089

    +

    New LLVM Release Updates

    + +

    Unlike bugfixes, +updating to a new release of LLVM typically requires a lot more work. +This is where we can't reasonably cherry-pick commits backwards, +so we need to do a full update. +There's a lot of stuff to do here, +so let's go through each in detail.

    +
      +
    1. +

      LLVM announces that its latest release version has branched. +This will show up as a branch in the llvm/llvm-project repository, +typically named release/$N.x, +where $N is the version of LLVM that's being released.

      +
    2. +
    3. +

      Create a new branch in the rust-lang/llvm-project repository +from this release/$N.x branch, +and name it rustc/a.b-yyyy-mm-dd, +where a.b is the current version number of LLVM in-tree +at the time of the branch, +and the remaining part is the current date.

      +
    4. +
    5. +

      Apply Rust-specific patches to the llvm-project repository. +All features and bugfixes are upstream, +but there's often some weird build-related patches +that don't make sense to upstream. +These patches are typically the latest patches in the +rust-lang/llvm-project branch that rustc is currently using.

      +
    6. +
    7. +

      Build the new LLVM in the rust repository. +To do this, +you'll want to update the src/llvm-project repository to your branch, +and the revision you've created. +It's also typically a good idea to update .gitmodules with the new +branch name of the LLVM submodule. +Make sure you've committed changes to +src/llvm-project to ensure submodule updates aren't reverted. +Some commands you should execute are:

      +
        +
      • ./x build src/llvm-project - test that LLVM still builds
      • +
      • ./x build - build the rest of rustc
      • +
      +

      You'll likely need to update llvm-wrapper/*.cpp +to compile with updated LLVM bindings. +Note that you should use #ifdef and such to ensure +that the bindings still compile on older LLVM versions.

      +

      Note that profile = "compiler" and other defaults set by ./x setup +download LLVM from CI instead of building it from source. +You should disable this temporarily to make sure your changes are being used. +This is done by having the following setting in bootstrap.toml:

      +
      [llvm]
      +download-ci-llvm = false
      +
      +
    8. +
    9. +

      Test for regressions across other platforms. LLVM often has at least one bug +for non-tier-1 architectures, so it's good to do some more testing before +sending this to bors! If you're low on resources you can send the PR as-is +now to bors, though, and it'll get tested anyway.

      +

      Ideally, build LLVM and test it on a few platforms:

      +
        +
      • Linux
      • +
      • macOS
      • +
      • Windows
      • +
      +

      Afterwards, run some docker containers that CI also does:

      +
        +
      • ./src/ci/docker/run.sh wasm32
      • +
      • ./src/ci/docker/run.sh arm-android
      • +
      • ./src/ci/docker/run.sh dist-various-1
      • +
      • ./src/ci/docker/run.sh dist-various-2
      • +
      • ./src/ci/docker/run.sh armhf-gnu
      • +
      +
    10. +
    11. +

      Prepare a PR to rust-lang/rust. Work with maintainers of +rust-lang/llvm-project to get your commit in a branch of that repository, +and then you can send a PR to rust-lang/rust. You'll change at least +src/llvm-project and will likely also change llvm-wrapper as well.

      + +
      +

      For prior art, here are some previous LLVM updates:

      + +
      +

      Note that sometimes it's easiest to land llvm-wrapper compatibility as a PR +before actually updating src/llvm-project. +This way, +while you're working through LLVM issues, +others interested in trying out the new LLVM can benefit from work you've done +to update the C++ bindings.

      +
    12. +
    13. +

      Over the next few months, +LLVM will continually push commits to its release/a.b branch. +We will often want to have those bug fixes as well. +The merge process for that is to use git merge itself to merge LLVM's +release/a.b branch with the branch created in step 2. +This is typically +done multiple times when necessary while LLVM's release branch is baking.

      +
    14. +
    15. +

      LLVM then announces the release of version a.b.

      +
    16. +
    17. +

      After LLVM's official release, +we follow the process of creating a new branch on the +rust-lang/llvm-project repository again, +this time with a new date. +It is only then that the PR to update Rust to use that version is merged.

      +

      The commit history of rust-lang/llvm-project +should look much cleaner as a git rebase is done, +where just a few Rust-specific commits are stacked on top of stock LLVM's release branch.

      +
    18. +
    +

    Caveats and gotchas

    +

    Ideally the above instructions are pretty smooth, but here's some caveats to +keep in mind while going through them:

    +
      +
    • LLVM bugs are hard to find, don't hesitate to ask for help! +Bisection is definitely your friend here +(yes LLVM takes forever to build, yet bisection is still your friend). +Note that you can make use of Dev Desktops, +which is an initiative to provide the contributors with remote access to powerful hardware.
    • +
    • If you've got general questions, wg-llvm can help you out.
    • +
    • Creating branches is a privileged operation on GitHub, so you'll need someone +with write access to create the branches for you most likely.
    • +
    +

    Debugging LLVM

    +
    +

    NOTE: If you are looking for info about code generation, please see this +chapter instead.

    +
    +

    This section is about debugging compiler bugs in code generation (e.g. why the +compiler generated some piece of code or crashed in LLVM). LLVM is a big +project on its own that probably needs to have its own debugging document (not +that I could find one). But here are some tips that are important in a rustc +context:

    +

    Minimize the example

    +

    As a general rule, compilers generate lots of information from analyzing code. +Thus, a useful first step is usually to find a minimal example. One way to do +this is to

    +
      +
    1. +

      create a new crate that reproduces the issue (e.g. adding whatever crate is +at fault as a dependency, and using it from there)

      +
    2. +
    3. +

      minimize the crate by removing external dependencies; that is, moving +everything relevant to the new crate

      +
    4. +
    5. +

      further minimize the issue by making the code shorter (there are tools that +help with this like creduce)

      +
    6. +
    +

    For more discussion on methodology for steps 2 and 3 above, there is an +epic blog post from pnkfelix specifically about Rust program minimization.

    +

    Enable LLVM internal checks

    +

    The official compilers (including nightlies) have LLVM assertions disabled, +which means that LLVM assertion failures can show up as compiler crashes (not +ICEs but "real" crashes) and other sorts of weird behavior. If you are +encountering these, it is a good idea to try using a compiler with LLVM +assertions enabled - either an "alt" nightly or a compiler you build yourself +by setting [llvm] assertions=true in your bootstrap.toml - and see whether +anything turns up.

    +

    The rustc build process builds the LLVM tools into +./build/<host-triple>/llvm/bin. They can be called directly. +These tools include:

    +
      +
    • llc, which compiles bitcode (.bc files) to executable code; this can be used to +replicate LLVM backend bugs.
    • +
    • opt, a bitcode transformer that runs LLVM optimization passes.
    • +
    • bugpoint, which reduces large test cases to small, useful ones.
    • +
    • and many others, some of which are referenced in the text below.
    • +
    +

    By default, the Rust build system does not check for changes to the LLVM source code or +its build configuration settings. So, if you need to rebuild the LLVM that is linked +into rustc, first delete the file .llvm-stamp, which should be located +in build/<host-triple>/llvm/.

    +

    The default rustc compilation pipeline has multiple codegen units, which is +hard to replicate manually and means that LLVM is called multiple times in +parallel. If you can get away with it (i.e. if it doesn't make your bug +disappear), passing -C codegen-units=1 to rustc will make debugging easier.

    +

    Get your hands on raw LLVM input

    +

    For rustc to generate LLVM IR, you need to pass the --emit=llvm-ir flag. If +you are building via cargo, use the RUSTFLAGS environment variable (e.g. +RUSTFLAGS='--emit=llvm-ir'). This causes rustc to spit out LLVM IR into the +target directory.

    +

    cargo llvm-ir [options] path spits out the LLVM IR for a particular function +at path. (cargo install cargo-asm installs cargo asm and cargo llvm-ir). --build-type=debug emits code for debug builds. There are also +other useful options. Also, debug info in LLVM IR can clutter the output a lot: +RUSTFLAGS="-C debuginfo=0" is really useful.

    +

    RUSTFLAGS="-C save-temps" outputs LLVM bitcode (not the same as IR) at +different stages during compilation, which is sometimes useful. The output LLVM +bitcode will be in .bc files in the compiler's output directory, set via the +--out-dir DIR argument to rustc.

    +
      +
    • +

      If you are hitting an assertion failure or segmentation fault from the LLVM +backend when invoking rustc itself, it is a good idea to try passing each +of these .bc files to the llc command, and see if you get the same +failure. (LLVM developers often prefer a bug reduced to a .bc file over one +that uses a Rust crate for its minimized reproduction.)

      +
    • +
    • +

      To get human readable versions of the LLVM bitcode, one just needs to convert +the bitcode (.bc) files to .ll files using llvm-dis, which should be in +the target local compilation of rustc.

      +
    • +
    +

    Note that rustc emits different IR depending on whether -O is enabled, even +without LLVM's optimizations, so if you want to play with the IR rustc emits, +you should:

    +
    $ rustc +local my-file.rs --emit=llvm-ir -O -C no-prepopulate-passes \
    +    -C codegen-units=1
    +$ OPT=./build/$TRIPLE/llvm/bin/opt
    +$ $OPT -S -O2 < my-file.ll > my
    +
    +

    If you just want to get the LLVM IR during the LLVM pipeline, to e.g. see which +IR causes an optimization-time assertion to fail, or to see when LLVM performs +a particular optimization, you can pass the rustc flag -C llvm-args=-print-after-all, and possibly add -C llvm-args='-filter-print-funcs=EXACT_FUNCTION_NAME (e.g. -C llvm-args='-filter-print-funcs=_ZN11collections3str21_$LT$impl$u20$str$GT$\ 7replace17hbe10ea2e7c809b0bE').

    +

    That produces a lot of output into standard error, so you'll want to pipe that +to some file. Also, if you are using neither -filter-print-funcs nor -C codegen-units=1, then, because the multiple codegen units run in parallel, the +printouts will mix together and you won't be able to read anything.

    +
      +
    • +

      One caveat to the aforementioned methodology: the -print family of options +to LLVM only prints the IR unit that the pass runs on (e.g., just a +function), and does not include any referenced declarations, globals, +metadata, etc. This means you cannot in general feed the output of -print +into llc to reproduce a given problem.

      +
    • +
    • +

      Within LLVM itself, calling F.getParent()->dump() at the beginning of +SafeStackLegacyPass::runOnFunction will dump the whole module, which +may provide better basis for reproduction. (However, you +should be able to get that same dump from the .bc files dumped by +-C save-temps.)

      +
    • +
    +

    If you want just the IR for a specific function (say, you want to see why it +causes an assertion or doesn't optimize correctly), you can use llvm-extract, +e.g.

    +
    $ ./build/$TRIPLE/llvm/bin/llvm-extract \
    +    -func='_ZN11collections3str21_$LT$impl$u20$str$GT$7replace17hbe10ea2e7c809b0bE' \
    +    -S \
    +    < unextracted.ll \
    +    > extracted.ll
    +
    +

    Investigate LLVM optimization passes

    +

    If you are seeing incorrect behavior due to an optimization pass, a very handy +LLVM option is -opt-bisect-limit, which takes an integer denoting the index +value of the highest pass to run. Index values for taken passes are stable +from run to run; by coupling this with software that automates bisecting the +search space based on the resulting program, an errant pass can be quickly +determined. When an -opt-bisect-limit is specified, all runs are displayed +to standard error, along with their index and output indicating if the +pass was run or skipped. Setting the limit to an index of -1 (e.g., +RUSTFLAGS="-C llvm-args=-opt-bisect-limit=-1") will show all passes and +their corresponding index values.

    +

    If you want to play with the optimization pipeline, you can use the opt tool +from ./build/<host-triple>/llvm/bin/ with the LLVM IR emitted by rustc.

    +

    When investigating the implementation of LLVM itself, you should be +aware of its internal debug infrastructure. +This is provided in LLVM Debug builds, which you enable for rustc +LLVM builds by changing this setting in the bootstrap.toml:

    +
    [llvm]
    +# Indicates whether the LLVM assertions are enabled or not
    +assertions = true
    +
    +# Indicates whether the LLVM build is a Release or Debug build
    +optimize = false
    +
    +

    The quick summary is:

    +
      +
    • Setting assertions=true enables coarse-grain debug messaging. +
        +
      • beyond that, setting optimize=false enables fine-grain debug messaging.
      • +
      +
    • +
    • LLVM_DEBUG(dbgs() << msg) in LLVM is like debug!(msg) in rustc.
    • +
    • The -debug option turns on all messaging; it is like setting the +environment variable RUSTC_LOG=debug in rustc.
    • +
    • The -debug-only=<pass1>,<pass2> variant is more selective; it is like +setting the environment variable RUSTC_LOG=path1,path2 in rustc.
    • +
    +

    Getting help and asking questions

    +

    If you have some questions, head over to the rust-lang Zulip and +specifically the #t-compiler/wg-llvm stream.

    +

    Compiler options to know and love

    +

    The -C help and -Z help compiler switches will list out a variety +of interesting options you may find useful. Here are a few of the most +common that pertain to LLVM development (some of them are employed in the +tutorial above):

    +
      +
    • The --emit llvm-ir option emits a <filename>.ll file with LLVM IR in textual format +
        +
      • The --emit llvm-bc option emits in bytecode format (<filename>.bc)
      • +
      +
    • +
    • Passing -C llvm-args=<foo> allows passing pretty much all the +options that tools like llc and opt would accept; +e.g. -C llvm-args=-print-before-all to print IR before every LLVM +pass.
    • +
    • The -C no-prepopulate-passes will avoid pre-populate the LLVM pass +manager with a list of passes. This will allow you to view the LLVM +IR that rustc generates, not the LLVM IR after optimizations.
    • +
    • The -C passes=val option allows you to supply a space separated list of extra LLVM passes to run
    • +
    • The -C save-temps option saves all temporary output files during compilation
    • +
    • The -Z print-llvm-passes option will print out LLVM optimization passes being run
    • +
    • The -Z time-llvm-passes option measures the time of each LLVM pass
    • +
    • The -Z verify-llvm-ir option will verify the LLVM IR for correctness
    • +
    • The -Z no-parallel-backend will disable parallel compilation of distinct compilation units
    • +
    • The -Z llvm-time-trace option will output a Chrome profiler compatible JSON file +which contains details and timings for LLVM passes.
    • +
    • The -C llvm-args=-opt-bisect-limit=<index> option allows for bisecting LLVM +optimizations.
    • +
    +

    Filing LLVM bug reports

    +

    When filing an LLVM bug report, you will probably want some sort of minimal +working example that demonstrates the problem. The Godbolt compiler explorer is +really helpful for this.

    +
      +
    1. +

      Once you have some LLVM IR for the problematic code (see above), you can +create a minimal working example with Godbolt. Go to +llvm.godbolt.org.

      +
    2. +
    3. +

      Choose LLVM-IR as programming language.

      +
    4. +
    5. +

      Use llc to compile the IR to a particular target as is:

      +
        +
      • There are some useful flags: -mattr enables target features, -march= +selects the target, -mcpu= selects the CPU, etc.
      • +
      • Commands like llc -march=help output all architectures available, which +is useful because sometimes the Rust arch names and the LLVM names do not +match.
      • +
      • If you have compiled rustc yourself somewhere, in the target directory +you have binaries for llc, opt, etc.
      • +
      +
    6. +
    7. +

      If you want to optimize the LLVM-IR, you can use opt to see how the LLVM +optimizations transform it.

      +
    8. +
    9. +

      Once you have a godbolt link demonstrating the issue, it is pretty easy to +fill in an LLVM bug. Just visit their github issues page.

      +
    10. +
    +

    Porting bug fixes from LLVM

    +

    Once you've identified the bug as an LLVM bug, you will sometimes +find that it has already been reported and fixed in LLVM, but we haven't +gotten the fix yet (or perhaps you are familiar enough with LLVM to fix it yourself).

    +

    In that case, we can sometimes opt to port the fix for the bug +directly to our own LLVM fork, so that rustc can use it more easily. +Our fork of LLVM is maintained in rust-lang/llvm-project. Once +you've landed the fix there, you'll also need to land a PR modifying +our submodule commits -- ask around on Zulip for help.

    +

    Backend Agnostic Codegen

    + +

    rustc_codegen_ssa +provides an abstract interface for all backends to implement, +namely LLVM, Cranelift, and GCC.

    +

    Below is some background information on the refactoring that created this +abstract interface.

    +

    Refactoring of rustc_codegen_llvm

    +

    by Denis Merigoux, October 23rd 2018

    +

    State of the code before the refactoring

    +

    All the code related to the compilation of MIR into LLVM IR was contained +inside the rustc_codegen_llvm crate. Here is the breakdown of the most +important elements:

    +
      +
    • the back folder (7,800 LOC) implements the mechanisms for creating the +different object files and archive through LLVM, but also the communication +mechanisms for parallel code generation;
    • +
    • the debuginfo (3,200 LOC) folder contains all code that passes debug +information down to LLVM;
    • +
    • the llvm (2,200 LOC) folder defines the FFI necessary to communicate with +LLVM using the C++ API;
    • +
    • the mir (4,300 LOC) folder implements the actual lowering from MIR to LLVM +IR;
    • +
    • the base.rs (1,300 LOC) file contains some helper functions but also the +high-level code that launches the code generation and distributes the work.
    • +
    • the builder.rs (1,200 LOC) file contains all the functions generating +individual LLVM IR instructions inside a basic block;
    • +
    • the common.rs (450 LOC) contains various helper functions and all the +functions generating LLVM static values;
    • +
    • the type_.rs (300 LOC) defines most of the type translations to LLVM IR.
    • +
    +

    The goal of this refactoring is to separate inside this crate code that is +specific to the LLVM from code that can be reused for other rustc backends. For +instance, the mir folder is almost entirely backend-specific but it relies +heavily on other parts of the crate. The separation of the code must not affect +the logic of the code nor its performance.

    +

    For these reasons, the separation process involves two transformations that +have to be done at the same time for the resulting code to compile:

    +
      +
    1. replace all the LLVM-specific types by generics inside function signatures +and structure definitions;
    2. +
    3. encapsulate all functions calling the LLVM FFI inside a set of traits that +will define the interface between backend-agnostic code and the backend.
    4. +
    +

    While the LLVM-specific code will be left in rustc_codegen_llvm, all the new +traits and backend-agnostic code will be moved in rustc_codegen_ssa (name +suggestion by @eddyb).

    +

    Generic types and structures

    +

    @irinagpopa started to parametrize the types of rustc_codegen_llvm by a +generic Value type, implemented in LLVM by a reference &'ll Value. This +work has been extended to all structures inside the mir folder and elsewhere, +as well as for LLVM's BasicBlock and Type types.

    +

    The two most important structures for the LLVM codegen are CodegenCx and +Builder. They are parametrized by multiple lifetime parameters and the type +for Value.

    +
    struct CodegenCx<'ll, 'tcx> {
    +  /* ... */
    +}
    +
    +struct Builder<'a, 'll, 'tcx> {
    +  cx: &'a CodegenCx<'ll, 'tcx>,
    +  /* ... */
    +}
    +

    CodegenCx is used to compile one codegen-unit that can contain multiple +functions, whereas Builder is created to compile one basic block.

    +

    The code in rustc_codegen_llvm has to deal with multiple explicit lifetime +parameters, that correspond to the following:

    +
      +
    • 'tcx is the longest lifetime, that corresponds to the original TyCtxt +containing the program's information;
    • +
    • 'a is a short-lived reference of a CodegenCx or another object inside a +struct;
    • +
    • 'll is the lifetime of references to LLVM objects such as Value or +Type.
    • +
    +

    Although there are already many lifetime parameters in the code, making it +generic uncovered situations where the borrow-checker was passing only due to +the special nature of the LLVM objects manipulated (they are extern pointers). +For instance, an additional lifetime parameter had to be added to +LocalAnalyser in analyse.rs, leading to the definition:

    +
    struct LocalAnalyzer<'mir, 'a, 'tcx> {
    +  /* ... */
    +}
    +

    However, the two most important structures CodegenCx and Builder are not +defined in the backend-agnostic code. Indeed, their content is highly specific +of the backend and it makes more sense to leave their definition to the backend +implementor than to allow just a narrow spot via a generic field for the +backend's context.

    +

    Traits and interface

    +

    Because they have to be defined by the backend, CodegenCx and Builder will +be the structures implementing all the traits defining the backend's interface. +These traits are defined in the folder rustc_codegen_ssa/traits and all the +backend-agnostic code is parametrized by them. For instance, let us explain how +a function in base.rs is parametrized:

    +
    pub fn codegen_instance<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>>(
    +    cx: &'a Bx::CodegenCx,
    +    instance: Instance<'tcx>
    +) {
    +    /* ... */
    +}
    +

    In this signature, we have the two lifetime parameters explained earlier and +the master type Bx which satisfies the trait BuilderMethods corresponding +to the interface satisfied by the Builder struct. The BuilderMethods +defines an associated type Bx::CodegenCx that itself satisfies the +CodegenMethods traits implemented by the struct CodegenCx.

    +

    On the trait side, here is an example with part of the definition of +BuilderMethods in traits/builder.rs:

    +
    pub trait BuilderMethods<'a, 'tcx>:
    +    HasCodegen<'tcx>
    +    + DebugInfoBuilderMethods<'tcx>
    +    + ArgTypeMethods<'tcx>
    +    + AbiBuilderMethods<'tcx>
    +    + IntrinsicCallMethods<'tcx>
    +    + AsmBuilderMethods<'tcx>
    +{
    +    fn new_block<'b>(
    +        cx: &'a Self::CodegenCx,
    +        llfn: Self::Function,
    +        name: &'b str
    +    ) -> Self;
    +    /* ... */
    +    fn cond_br(
    +        &mut self,
    +        cond: Self::Value,
    +        then_llbb: Self::BasicBlock,
    +        else_llbb: Self::BasicBlock,
    +    );
    +    /* ... */
    +}
    +

    Finally, a master structure implementing the ExtraBackendMethods trait is +used for high-level codegen-driving functions like codegen_crate in +base.rs. For LLVM, it is the empty LlvmCodegenBackend. +ExtraBackendMethods should be implemented by the same structure that +implements the CodegenBackend defined in +rustc_codegen_utils/codegen_backend.rs.

    +

    During the traitification process, certain functions have been converted from +methods of a local structure to methods of CodegenCx or Builder and a +corresponding self parameter has been added. Indeed, LLVM stores information +internally that it can access when called through its API. This information +does not show up in a Rust data structure carried around when these methods are +called. However, when implementing a Rust backend for rustc, these methods +will need information from CodegenCx, hence the additional parameter (unused +in the LLVM implementation of the trait).

    +

    State of the code after the refactoring

    +

    The traits offer an API which is very similar to the API of LLVM. This is not +the best solution since LLVM has a very special way of doing things: when +adding another backend, the traits definition might be changed in order to +offer more flexibility.

    +

    However, the current separation between backend-agnostic and LLVM-specific code +has allowed the reuse of a significant part of the old rustc_codegen_llvm. +Here is the new LOC breakdown between backend-agnostic (BA) and LLVM for the +most important elements:

    +
      +
    • back folder: 3,800 (BA) vs 4,100 (LLVM);
    • +
    • mir folder: 4,400 (BA) vs 0 (LLVM);
    • +
    • base.rs: 1,100 (BA) vs 250 (LLVM);
    • +
    • builder.rs: 1,400 (BA) vs 0 (LLVM);
    • +
    • common.rs: 350 (BA) vs 350 (LLVM);
    • +
    +

    The debuginfo folder has been left almost untouched by the splitting and is +specific to LLVM. Only its high-level features have been traitified.

    +

    The new traits folder has 1500 LOC only for trait definitions. Overall, the +27,000 LOC-sized old rustc_codegen_llvm code has been split into the new +18,500 LOC-sized new rustc_codegen_llvm and the 12,000 LOC-sized +rustc_codegen_ssa. We can say that this refactoring allowed the reuse of +approximately 10,000 LOC that would otherwise have had to be duplicated between +the multiple backends of rustc.

    +

    The refactored version of rustc's backend introduced no regression over the +test suite nor in performance benchmark, which is in coherence with the nature +of the refactoring that used only compile-time parametricity (no trait +objects).

    +

    Implicit caller location

    + +

    Approved in RFC 2091, this feature enables the accurate reporting of caller location during panics +initiated from functions like Option::unwrap, Result::expect, and Index::index. This feature +adds the #[track_caller] attribute for functions, the +caller_location intrinsic, and the stabilization-friendly +core::panic::Location::caller wrapper.

    +

    Motivating example

    +

    Take this example program:

    +
    fn main() {
    +    let foo: Option<()> = None;
    +    foo.unwrap(); // this should produce a useful panic message!
    +}
    +

    Prior to Rust 1.42, panics like this unwrap() printed a location in core:

    +
    $ rustc +1.41.0 example.rs; example.exe
    +thread 'main' panicked at 'called `Option::unwrap()` on a `None` value',...core\macros\mod.rs:15:40
    +note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace.
    +
    +

    As of 1.42, we get a much more helpful message:

    +
    $ rustc +1.42.0 example.rs; example.exe
    +thread 'main' panicked at 'called `Option::unwrap()` on a `None` value', example.rs:3:5
    +note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
    +
    +

    These error messages are achieved through a combination of changes to panic! internals to make use +of core::panic::Location::caller and a number of #[track_caller] annotations in the standard +library which propagate caller information.

    +

    Reading caller location

    +

    Previously, panic! made use of the file!(), line!(), and column!() macros to construct a +Location pointing to where the panic occurred. These macros couldn't be given an overridden +location, so functions which intentionally invoked panic! couldn't provide their own location, +hiding the actual source of error.

    +

    Internally, panic!() now calls core::panic::Location::caller() to find out where it +was expanded. This function is itself annotated with #[track_caller] and wraps the +caller_location compiler intrinsic implemented by rustc. This intrinsic is easiest +explained in terms of how it works in a const context.

    +

    Caller location in const

    +

    There are two main phases to returning the caller location in a const context: walking up the stack +to find the right location and allocating a const value to return.

    +

    Finding the right Location

    +

    In a const context we "walk up the stack" from where the intrinsic is invoked, stopping when we +reach the first function call in the stack which does not have the attribute. This walk is in +InterpCx::find_closest_untracked_caller_location().

    +

    Starting at the bottom, we iterate up over stack Frames in the +InterpCx::stack, calling +InstanceKind::requires_caller_location on the +Instances from each Frame. We stop once we find one that returns false and +return the span of the previous frame which was the "topmost" tracked function.

    +

    Allocating a static Location

    +

    Once we have a Span, we need to allocate static memory for the Location, which is performed by +the TyCtxt::const_caller_location() query. Internally this calls +InterpCx::alloc_caller_location() and results in a unique +memory kind (MemoryKind::CallerLocation). The SSA codegen backend is able +to emit code for these same values, and we use this code there as well.

    +

    Once our Location has been allocated in static memory, our intrinsic returns a reference to it.

    +

    Generating code for #[track_caller] callees

    +

    To generate efficient code for a tracked function and its callers, we need to provide the same +behavior from the intrinsic's point of view without having a stack to walk up at runtime. We invert +the approach: as we grow the stack down we pass an additional argument to calls of tracked functions +rather than walking up the stack when the intrinsic is called. That additional argument can be +returned wherever the caller location is queried.

    +

    The argument we append is of type &'static core::panic::Location<'static>. A reference was chosen +to avoid unnecessary copying because a pointer is a third the size of +std::mem::size_of::<core::panic::Location>() == 24 at time of writing.

    +

    When generating a call to a function which is tracked, we pass the location argument the value of +FunctionCx::get_caller_location.

    +

    If the calling function is tracked, get_caller_location returns the local in +FunctionCx::caller_location which was populated by the current caller's caller. +In these cases the intrinsic "returns" a reference which was actually provided in an argument to its +caller.

    +

    If the calling function is not tracked, get_caller_location allocates a Location static from +the current Span and returns a reference to that.

    +

    We more efficiently achieve the same behavior as a loop starting from the bottom by passing a single +&Location value through the caller_location fields of multiple FunctionCxs as we grow the +stack downward.

    +

    Codegen examples

    +

    What does this transformation look like in practice? Take this example which uses the new feature:

    +
    #![feature(track_caller)]
    +use std::panic::Location;
    +
    +#[track_caller]
    +fn print_caller() {
    +    println!("called from {}", Location::caller());
    +}
    +
    +fn main() {
    +    print_caller();
    +}
    +

    Here print_caller() appears to take no arguments, but we compile it to something like this:

    +
    #![feature(panic_internals)]
    +use std::panic::Location;
    +
    +fn print_caller(caller: &Location) {
    +    println!("called from {}", caller);
    +}
    +
    +fn main() {
    +    print_caller(&Location::internal_constructor(file!(), line!(), column!()));
    +}
    +

    Dynamic dispatch

    +

    In codegen contexts we have to modify the callee ABI to pass this information down the stack, but +the attribute expressly does not modify the type of the function. The ABI change must be +transparent to type checking and remain sound in all uses.

    +

    Direct calls to tracked functions will always know the full codegen flags for the callee and can +generate appropriate code. Indirect callers won't have this information and it's not encoded in +the type of the function pointer they call, so we generate a ReifyShim around the function +whenever taking a pointer to it. This shim isn't able to report the actual location of the indirect +call (the function's definition site is reported instead), but it prevents miscompilation and is +probably the best we can do without modifying fully-stabilized type signatures.

    +
    +

    Note: We always emit a ReifyShim when taking a pointer to a tracked function. While the +constraint here is imposed by codegen contexts, we don't know during MIR construction of the shim +whether we'll be called in a const context (safe to ignore shim) or in a codegen context (unsafe +to ignore shim). Even if we did know, the results from const and codegen contexts must agree.

    +
    +

    The attribute

    +

    The #[track_caller] attribute is checked alongside other codegen attributes to ensure the +function:

    +
      +
    • has the "Rust" ABI (as opposed to e.g., "C")
    • +
    • is not a closure
    • +
    • is not #[naked]
    • +
    +

    If the use is valid, we set CodegenFnAttrsFlags::TRACK_CALLER. This flag influences +the return value of InstanceKind::requires_caller_location which is in turn +used in both const and codegen contexts to ensure correct propagation.

    +

    Traits

    +

    When applied to trait method implementations, the attribute works as it does for regular functions.

    +

    When applied to a trait method prototype, the attribute applies to all implementations of the +method. When applied to a default trait method implementation, the attribute takes effect on +that implementation and any overrides.

    +

    Examples:

    +
    #![feature(track_caller)]
    +
    +macro_rules! assert_tracked {
    +    () => {{
    +        let location = std::panic::Location::caller();
    +        assert_eq!(location.file(), file!());
    +        assert_ne!(location.line(), line!(), "line should be outside this fn");
    +        println!("called at {}", location);
    +    }};
    +}
    +
    +trait TrackedFourWays {
    +    /// All implementations inherit `#[track_caller]`.
    +    #[track_caller]
    +    fn blanket_tracked();
    +
    +    /// Implementors can annotate themselves.
    +    fn local_tracked();
    +
    +    /// This implementation is tracked (overrides are too).
    +    #[track_caller]
    +    fn default_tracked() {
    +        assert_tracked!();
    +    }
    +
    +    /// Overrides of this implementation are tracked (it is too).
    +    #[track_caller]
    +    fn default_tracked_to_override() {
    +        assert_tracked!();
    +    }
    +}
    +
    +/// This impl uses the default impl for `default_tracked` and provides its own for
    +/// `default_tracked_to_override`.
    +impl TrackedFourWays for () {
    +    fn blanket_tracked() {
    +        assert_tracked!();
    +    }
    +
    +    #[track_caller]
    +    fn local_tracked() {
    +        assert_tracked!();
    +    }
    +
    +    fn default_tracked_to_override() {
    +        assert_tracked!();
    +    }
    +}
    +
    +fn main() {
    +    <() as TrackedFourWays>::blanket_tracked();
    +    <() as TrackedFourWays>::default_tracked();
    +    <() as TrackedFourWays>::default_tracked_to_override();
    +    <() as TrackedFourWays>::local_tracked();
    +}
    +

    Background/History

    +

    Broadly speaking, this feature's goal is to improve common Rust error messages without breaking +stability guarantees, requiring modifications to end-user source, relying on platform-specific +debug-info, or preventing user-defined types from having the same error-reporting benefits.

    +

    Improving the output of these panics has been a goal of proposals since at least mid-2016 (see +non-viable alternatives in the approved RFC for details). It took two more years until RFC 2091 +was approved, much of its rationale for this feature's design having been discovered through the +discussion around several earlier proposals.

    +

    The design in the original RFC limited itself to implementations that could be done inside the +compiler at the time without significant refactoring. However in the year and a half between the +approval of the RFC and the actual implementation work, a revised design was proposed and written +up on the tracking issue. During the course of implementing that, it was also discovered that an +implementation was possible without modifying the number of arguments in a function's MIR, which +would simplify later stages and unlock use in traits.

    +

    Because the RFC's implementation strategy could not readily support traits, the semantics were not +originally specified. They have since been implemented following the path which seemed most correct +to the author and reviewers.

    +

    Libraries and metadata

    +

    When the compiler sees a reference to an external crate, it needs to load some +information about that crate. This chapter gives an overview of that process, +and the supported file formats for crate libraries.

    +

    Libraries

    +

    A crate dependency can be loaded from an rlib, dylib, or rmeta file. A +key point of these file formats is that they contain rustc-specific +metadata. This metadata allows the compiler to discover enough +information about the external crate to understand the items it contains, +which macros it exports, and much more.

    +

    rlib

    +

    An rlib is an archive file, which is similar to a tar file. This file +format is specific to rustc, and may change over time. This file contains:

    +
      +
    • Object code, which is the result of code generation. This is used during +regular linking. There is a separate .o file for each codegen unit. The +codegen step can be skipped with the -C linker-plugin-lto CLI option, which means each .o +file will only contain LLVM bitcode.
    • +
    • LLVM bitcode, which is a binary representation of LLVM's intermediate +representation, which is embedded as a section in the .o files. This can +be used for Link Time Optimization (LTO). This can be removed with the +-C embed-bitcode=no CLI option to improve compile times +and reduce disk space if LTO is not needed.
    • +
    • rustc metadata, in a file named lib.rmeta.
    • +
    • A symbol table, which is essentially a list of symbols with offsets to the +object files that contain that symbol. This is pretty standard for archive +files.
    • +
    +

    dylib

    +

    A dylib is a platform-specific shared library. It includes the rustc +metadata in a special link section called .rustc.

    +

    rmeta

    +

    An rmeta file is a custom binary format that contains the metadata for the +crate. This file can be used for fast "checks" of a project by skipping all code +generation (as is done with cargo check), collecting enough information for +documentation (as is done with cargo doc), or for pipelining. +This file is created if the --emit=metadata CLI option is used.

    +

    rmeta files do not support linking, since they do not contain compiled +object files.

    +

    Metadata

    +

    The metadata contains a wide swath of different elements. This guide will not go +into detail about every field it contains. You are encouraged to browse the +CrateRoot definition to get a sense of the different elements it contains. +Everything about metadata encoding and decoding is in the rustc_metadata +package.

    +

    Here are a few highlights of things it contains:

    +
      +
    • The version of the rustc compiler. The compiler will refuse to load files +from any other version.
    • +
    • The Strict Version Hash (SVH). This helps ensure the +correct dependency is loaded.
    • +
    • The Stable Crate Id. This is a hash used +to identify crates.
    • +
    • Information about all the source files in the library. This can be used for +a variety of things, such as diagnostics pointing to sources in a +dependency.
    • +
    • Information about exported macros, traits, types, and items. Generally, +anything that's needed to be known when a path references something inside a +crate dependency.
    • +
    • Encoded MIR. This is optional, and only encoded if needed for code +generation. cargo check skips this for performance reasons.
    • +
    +

    Strict Version Hash

    +

    The Strict Version Hash (SVH, also known as the "crate hash") is a 64-bit +hash that is used to ensure that the correct crate dependencies are loaded. It +is possible for a directory to contain multiple copies of the same dependency +built with different settings, or built from different sources. The crate +loader will skip any crates that have the wrong SVH.

    +

    The SVH is also used for the incremental compilation session filename, +though that usage is mostly historic.

    +

    The hash includes a variety of elements:

    +
      +
    • Hashes of the HIR nodes.
    • +
    • All of the upstream crate hashes.
    • +
    • All of the source filenames.
    • +
    • Hashes of certain command-line flags (like -C metadata via the Stable +Crate Id, and all CLI options marked with [TRACKED]).
    • +
    +

    See compute_hir_hash for where the hash is actually computed.

    +

    Stable Crate Id

    +

    The StableCrateId is a 64-bit hash used to identify different crates with +potentially the same name. It is a hash of the crate name and all the +-C metadata CLI options computed in StableCrateId::new. It is +used in a variety of places, such as symbol name mangling, crate loading, and +much more.

    +

    By default, all Rust symbols are mangled and incorporate the stable crate id. +This allows multiple versions of the same crate to be included together. Cargo +automatically generates -C metadata hashes based on a variety of factors, like +the package version, source, and target kind (a lib and test can have the same +crate name, so they need to be disambiguated).

    +

    Crate loading

    +

    Crate loading can have quite a few subtle complexities. During name +resolution, when an external crate is referenced (via an extern crate or +path), the resolver uses the CrateLoader which is responsible for finding +the crate libraries and loading the metadata for them. After the dependency +is loaded, the CrateLoader will provide the information the resolver needs +to perform its job (such as expanding macros, resolving paths, etc.).

    +

    To load each external crate, the CrateLoader uses a CrateLocator to +actually find the correct files for one specific crate. There is some great +documentation in the locator module that goes into detail on how loading +works, and I strongly suggest reading it to get the full picture.

    +

    The location of a dependency can come from several different places. Direct +dependencies are usually passed with --extern flags, and the loader can look +at those directly. Direct dependencies often have references to their own +dependencies, which need to be loaded, too. These are usually found by +scanning the directories passed with the -L flag for any file whose metadata +contains a matching crate name and SVH. The loader +will also look at the sysroot to find dependencies.

    +

    As crates are loaded, they are kept in the CStore with the crate metadata +wrapped in the CrateMetadata struct. After resolution and expansion, the +CStore will make its way into the GlobalCtxt for the rest of the +compilation.

    +

    Pipelining

    +

    One trick to improve compile times is to start building a crate as soon as the +metadata for its dependencies is available. For a library, there is no need to +wait for the code generation of dependencies to finish. Cargo implements this +technique by telling rustc to emit an rmeta file for each +dependency as well as an rlib. As early as it can, rustc will +save the rmeta file to disk before it continues to the code generation +phase. The compiler sends a JSON message to let the build tool know that it +can start building the next crate if possible.

    +

    The crate loading system is smart enough to know when it +sees an rmeta file to use that if the rlib is not there (or has only been +partially written).

    +

    This pipelining isn't possible for binaries, because the linking phase will +require the code generation of all its dependencies. In the future, it may be +possible to further improve this scenario by splitting linking into a separate +command (see #64191).

    +

    Profile-guided optimization

    + +

    rustc supports doing profile-guided optimization (PGO). +This chapter describes what PGO is and how the support for it is +implemented in rustc.

    +

    What is profiled-guided optimization?

    +

    The basic concept of PGO is to collect data about the typical execution of +a program (e.g. which branches it is likely to take) and then use this data +to inform optimizations such as inlining, machine-code layout, +register allocation, etc.

    +

    There are different ways of collecting data about a program's execution. +One is to run the program inside a profiler (such as perf) and another +is to create an instrumented binary, that is, a binary that has data +collection built into it, and run that. +The latter usually provides more accurate data.

    +

    How is PGO implemented in rustc?

    +

    rustc current PGO implementation relies entirely on LLVM. +LLVM actually supports multiple forms of PGO:

    +
      +
    • Sampling-based PGO where an external profiling tool like perf is used +to collect data about a program's execution.
    • +
    • GCOV-based profiling, where code coverage infrastructure is used to collect +profiling information.
    • +
    • Front-end based instrumentation, where the compiler front-end (e.g. Clang) +inserts instrumentation intrinsics into the LLVM IR it generates (but see the +1"Note").
    • +
    • IR-level instrumentation, where LLVM inserts the instrumentation intrinsics +itself during optimization passes.
    • +
    +

    rustc supports only the last approach, IR-level instrumentation, mainly +because it is almost exclusively implemented in LLVM and needs little +maintenance on the Rust side. Fortunately, it is also the most modern approach, +yielding the best results.

    +

    So, we are dealing with an instrumentation-based approach, i.e. profiling data +is generated by a specially instrumented version of the program that's being +optimized. Instrumentation-based PGO has two components: a compile-time +component and run-time component, and one needs to understand the overall +workflow to see how they interact.

    +

    Overall workflow

    +

    Generating a PGO-optimized program involves the following four steps:

    +
      +
    1. Compile the program with instrumentation enabled (e.g. rustc -C profile-generate main.rs)
    2. +
    3. Run the instrumented program (e.g. ./main) which generates a default-<id>.profraw file
    4. +
    5. Convert the .profraw file into a .profdata file using LLVM's llvm-profdata tool.
    6. +
    7. Compile the program again, this time making use of the profiling data +(e.g. rustc -C profile-use=merged.profdata main.rs)
    8. +
    +

    Compile-time aspects

    +

    Depending on which step in the above workflow we are in, two different things +can happen at compile time:

    +

    Create binaries with instrumentation

    +

    As mentioned above, the profiling instrumentation is added by LLVM. +rustc instructs LLVM to do so by setting the appropriate +flags when creating LLVM PassManagers:

    +
    	// `PMBR` is an `LLVMPassManagerBuilderRef`
    +    unwrap(PMBR)->EnablePGOInstrGen = true;
    +    // Instrumented binaries have a default output path for the `.profraw` file
    +    // hard-coded into them:
    +    unwrap(PMBR)->PGOInstrGen = PGOGenPath;
    +
    +

    rustc also has to make sure that some of the symbols from LLVM's profiling +runtime are not removed by marking the with the right export level.

    +

    Compile binaries where optimizations make use of profiling data

    +

    In the final step of the workflow described above, the program is compiled +again, with the compiler using the gathered profiling data in order to drive +optimization decisions. rustc again leaves most of the work to LLVM here, +basically just telling the LLVM PassManagerBuilder +where the profiling data can be found:

    +
    	unwrap(PMBR)->PGOInstrUse = PGOUsePath;
    +
    +

    LLVM does the rest (e.g. setting branch weights, marking functions with +cold or inlinehint, etc).

    +

    Runtime aspects

    +

    Instrumentation-based approaches always also have a runtime component, i.e. +once we have an instrumented program, that program needs to be run in order +to generate profiling data, and collecting and persisting this profiling +data needs some infrastructure in place.

    +

    In the case of LLVM, these runtime components are implemented in +compiler-rt and statically linked into any instrumented +binaries. +The rustc version of this can be found in library/profiler_builtins which +basically packs the C code from compiler-rt into a Rust crate.

    +

    In order for profiler_builtins to be built, profiler = true must be set +in rustc's bootstrap.toml.

    +

    Testing PGO

    +

    Since the PGO workflow spans multiple compiler invocations most testing happens +in run-make tests (the relevant tests have pgo in their name). +There is also a codegen test that checks that some expected +instrumentation artifacts show up in LLVM IR.

    +

    Additional information

    +

    Clang's documentation contains a good overview on PGO in LLVM.

    +
    +
    1. +

      Note: rustc now supports front-end-based coverage +instrumentation, via the experimental option +-C instrument-coverage, but using these +coverage results for PGO has not been attempted at this time.

      +
    2. +

    LLVM source-based code coverage

    + +

    rustc supports detailed source-based code and test coverage analysis +with a command line option (-C instrument-coverage) that instruments Rust +libraries and binaries with additional instructions and data, at compile time.

    +

    The coverage instrumentation injects calls to the LLVM intrinsic instruction +llvm.instrprof.increment at code branches +(based on a MIR-based control flow analysis), and LLVM converts these to +instructions that increment static counters, when executed. The LLVM coverage +instrumentation also requires a Coverage Map that encodes source metadata, +mapping counter IDs--directly and indirectly--to the file locations (with +start and end line and column).

    +

    Rust libraries, with or without coverage instrumentation, can be linked into +instrumented binaries. When the program is executed and cleanly terminates, +LLVM libraries write the final counter values to a file (default.profraw or +a custom file set through environment variable LLVM_PROFILE_FILE).

    +

    Developers use existing LLVM coverage analysis tools to decode .profraw +files, with corresponding Coverage Maps (from matching binaries that produced +them), and generate various reports for analysis, for example:

    +

    Screenshot of sample `llvm-cov show` result, for function add_quoted_string +

    +

    Detailed instructions and examples are documented in the +rustc book.

    + +

    When working on the coverage instrumentation code, it is usually necessary to +enable the profiler runtime by setting profiler = true in [build]. +This allows the compiler to produce instrumented binaries, and makes it possible +to run the full coverage test suite.

    +

    Enabling debug assertions in the compiler and in LLVM is recommended, but not +mandatory.

    +
    # Similar to the "compiler" profile, but also enables debug assertions in LLVM.
    +# These assertions can detect malformed coverage mappings in some cases.
    +profile = "codegen"
    +
    +[build]
    +# IMPORTANT: This tells the build system to build the LLVM profiler runtime.
    +# Without it, the compiler can't produce coverage-instrumented binaries,
    +# and many of the coverage tests will be skipped.
    +profiler = true
    +
    +[rust]
    +# Enable debug assertions in the compiler.
    +debug-assertions = true
    +
    +

    Rust symbol mangling

    +

    -C instrument-coverage automatically enables Rust symbol mangling v0 (as +if the user specified -C symbol-mangling-version=v0 option when invoking +rustc) to ensure consistent and reversible name mangling. This has two +important benefits:

    +
      +
    1. LLVM coverage tools can analyze coverage over multiple runs, including some +changes to source code; so mangled names must be consistent across compilations.
    2. +
    3. LLVM coverage reports can report coverage by function, and even separates +out the coverage counts of each unique instantiation of a generic function, +if invoked with multiple type substitution variations.
    4. +
    +

    The LLVM profiler runtime

    +

    Coverage data is only generated by running the executable Rust program. rustc +statically links coverage-instrumented binaries with LLVM runtime code +(compiler-rt) that implements program hooks +(such as an exit hook) to write the counter values to the .profraw file.

    +

    In the rustc source tree, +library/profiler_builtins bundles the LLVM compiler-rt code into a Rust library crate. +Note that when building rustc, +profiler_builtins is only included when build.profiler = true is set in bootstrap.toml.

    +

    When compiling with -C instrument-coverage, +CrateLoader::postprocess() dynamically loads +profiler_builtins by calling inject_profiler_runtime().

    +

    Testing coverage instrumentation

    +

    (See also the compiletest documentation for the tests/coverage +test suite.)

    +

    Coverage instrumentation in the MIR is validated by a mir-opt test: +tests/mir-opt/coverage/instrument_coverage.rs.

    +

    Coverage instrumentation in LLVM IR is validated by the tests/coverage +test suite in coverage-map mode. +These tests compile a test program to LLVM IR assembly, and then +use the src/tools/coverage-dump tool to extract and pretty-print the +coverage mappings that would be embedded in the final binary.

    +

    End-to-end testing of coverage instrumentation and coverage reporting is +performed by the tests/coverage test suite in coverage-run mode, +and by the tests/coverage-run-rustdoc test suite. +These tests compile and run a test program with coverage +instrumentation, then use LLVM tools to convert the coverage data into a +human-readable coverage report.

    +
    +

    Tests in coverage-run mode have an implicit //@ needs-profiler-runtime +directive, so they will be skipped if the profiler runtime has not been +enabled in bootstrap.toml.

    +
    +

    Finally, the tests/codegen/instrument-coverage/testprog.rs test compiles a simple Rust program +with -C instrument-coverage and compares the compiled program's LLVM IR to +expected LLVM IR instructions and structured data for a coverage-enabled +program, including various checks for Coverage Map-related metadata and the LLVM +intrinsic calls to increment the runtime counters.

    +

    Expected results for the coverage, coverage-run-rustdoc, +and mir-opt tests can be refreshed by running:

    +
    ./x test coverage --bless
    +./x test coverage-run-rustdoc --bless
    +./x test tests/mir-opt --bless
    +
    +

    Sanitizers support

    +

    The rustc compiler contains support for following sanitizers:

    +
      +
    • AddressSanitizer a faster memory error detector. Can +detect out-of-bounds access to heap, stack, and globals, use after free, use +after return, double free, invalid free, memory leaks.
    • +
    • ControlFlowIntegrity LLVM Control Flow Integrity (CFI) provides +forward-edge control flow protection.
    • +
    • Hardware-assisted AddressSanitizer a tool similar to +AddressSanitizer but based on partial hardware assistance.
    • +
    • KernelControlFlowIntegrity LLVM Kernel Control Flow Integrity +(KCFI) provides forward-edge control flow protection for operating systems +kernels.
    • +
    • LeakSanitizer a run-time memory leak detector.
    • +
    • MemorySanitizer a detector of uninitialized reads.
    • +
    • ThreadSanitizer a fast data race detector.
    • +
    +

    How to use the sanitizers?

    +

    To enable a sanitizer compile with -Z sanitizer=... option, where value is one +of address, cfi, hwaddress, kcfi, leak, memory or thread. For more +details on how to use sanitizers please refer to the sanitizer flag in the +unstable book.

    +

    How are sanitizers implemented in rustc?

    +

    The implementation of sanitizers (except CFI) relies almost entirely on LLVM. +The rustc is an integration point for LLVM compile time instrumentation passes +and runtime libraries. Highlight of the most important aspects of the +implementation:

    +
      +
    • +

      The sanitizer runtime libraries are part of the compiler-rt project, and +will be built on supported targets +when enabled in bootstrap.toml:

      +
      [build]
      +sanitizers = true
      +
      +

      The runtimes are placed into target libdir.

      +
    • +
    • +

      During LLVM code generation, the functions intended for instrumentation are +marked with appropriate LLVM attribute: +SanitizeAddress, SanitizeHWAddress, SanitizeMemory, or +SanitizeThread. By default all functions are instrumented, but this +behaviour can be changed with #[no_sanitize(...)].

      +
    • +
    • +

      The decision whether to perform instrumentation or not is possible only at a +function granularity. In the cases were those decision differ between +functions it might be necessary to inhibit inlining, both at MIR +level and LLVM level.

      +
    • +
    • +

      The LLVM IR generated by rustc is instrumented by dedicated LLVM +passes, different for each sanitizer. Instrumentation +passes are invoked after optimization passes.

      +
    • +
    • +

      When producing an executable, the sanitizer specific runtime library is +linked in. The libraries are searched for in the target +libdir. First relative to the overridden system root and subsequently +relative to the default system root. Fall-back to the default system root +ensures that sanitizer runtimes remain available when using sysroot overrides +constructed by cargo -Z build-std or xargo.

      +
    • +
    +

    Testing sanitizers

    +

    Sanitizers are validated by code generation tests in +tests/codegen/sanitize*.rs and end-to-end functional tests in +tests/ui/sanitizer/ directory.

    +

    Testing sanitizer functionality requires the sanitizer runtimes (built when +sanitizer = true in bootstrap.toml) and target providing support for particular +sanitizer. When sanitizer is unsupported on given target, sanitizers tests will +be ignored. This behaviour is controlled by compiletest needs-sanitizer-* +directives.

    +

    Enabling sanitizer on a new target

    +

    To enable a sanitizer on a new target which is already supported by LLVM:

    +
      +
    1. Include the sanitizer in the list of supported_sanitizers in the target +definition. rustc --target .. -Zsanitizer=.. should now +recognize sanitizer as supported.
    2. +
    3. Build the runtime for the target and include it in the libdir.
    4. +
    5. Teach compiletest that your target now supports the sanitizer. +Tests marked with needs-sanitizer-* should now run on the target.
    6. +
    7. Run tests ./x test --force-rerun tests/ui/sanitize/ to verify.
    8. +
    9. --enable-sanitizers in the CI configuration to build and +distribute the sanitizer runtime as part of the release process.
    10. +
    +

    Additional Information

    + +

    Debugging support in the Rust compiler

    + +

    This document explains the state of debugging tools support in the Rust compiler (rustc). +It gives an overview of GDB, LLDB, WinDbg/CDB, +as well as infrastructure around Rust compiler to debug Rust code. +If you want to learn how to debug the Rust compiler itself, +see Debugging the Compiler.

    +

    The material is gathered from the video, +Tom Tromey discusses debugging support in rustc.

    +

    Preliminaries

    +

    Debuggers

    +

    According to Wikipedia

    +
    +

    A debugger or debugging tool is a computer program that is used to test and debug +other programs (the "target" program).

    +
    +

    Writing a debugger from scratch for a language requires a lot of work, especially if +debuggers have to be supported on various platforms. GDB and LLDB, however, can be +extended to support debugging a language. This is the path that Rust has chosen. +This document's main goal is to document the said debuggers support in Rust compiler.

    +

    DWARF

    +

    According to the DWARF standard website

    +
    +

    DWARF is a debugging file format used by many compilers and debuggers to support source level +debugging. It addresses the requirements of a number of procedural languages, +such as C, C++, and Fortran, and is designed to be extensible to other languages. +DWARF is architecture independent and applicable to any processor or operating system. +It is widely used on Unix, Linux and other operating systems, +as well as in stand-alone environments.

    +
    +

    DWARF reader is a program that consumes the DWARF format and creates debugger compatible output. +This program may live in the compiler itself. DWARF uses a data structure called +Debugging Information Entry (DIE) which stores the information as "tags" to denote functions, +variables etc., e.g., DW_TAG_variable, DW_TAG_pointer_type, DW_TAG_subprogram etc. +You can also invent your own tags and attributes.

    +

    CodeView/PDB

    +

    PDB (Program Database) is a file format created by Microsoft that contains debug information. +PDBs can be consumed by debuggers such as WinDbg/CDB and other tools to display debug information. +A PDB contains multiple streams that describe debug information about a specific binary such +as types, symbols, and source files used to compile the given binary. CodeView is another +format which defines the structure of symbol records and type records that appear within +PDB streams.

    +

    Supported debuggers

    +

    GDB

    +

    Rust expression parser

    +

    To be able to show debug output, we need an expression parser. +This (GDB) expression parser is written in Bison, +and can parse only a subset of Rust expressions. +GDB parser was written from scratch and has no relation to any other parser, +including that of rustc.

    +

    GDB has Rust-like value and type output. It can print values and types in a way +that look like Rust syntax in the output. Or when you print a type as ptype in GDB, +it also looks like Rust source code. Checkout the documentation in the manual for GDB/Rust.

    +

    Parser extensions

    +

    Expression parser has a couple of extensions in it to facilitate features that you cannot do +with Rust. Some limitations are listed in the manual for GDB/Rust. There is some special +code in the DWARF reader in GDB to support the extensions.

    +

    A couple of examples of DWARF reader support needed are as follows:

    +
      +
    1. +

      Enum: Needed for support for enum types. +The Rust compiler writes the information about enum into DWARF, +and GDB reads the DWARF to understand where is the tag field, +or if there is a tag field, +or if the tag slot is shared with non-zero optimization etc.

      +
    2. +
    3. +

      Dissect trait objects: DWARF extension where the trait object's description in the DWARF +also points to a stub description of the corresponding vtable which in turn points to the +concrete type for which this trait object exists. This means that you can do a print *object +for that trait object, and GDB will understand how to find the correct type of the payload in +the trait object.

      +
    4. +
    +

    TODO: Figure out if the following should be mentioned in the GDB-Rust document rather than +this guide page so there is no duplication. This is regarding the following comments:

    +

    This comment by Tom

    +
    +

    gdb's Rust extensions and limitations are documented in the gdb manual: +https://sourceware.org/gdb/onlinedocs/gdb/Rust.html -- however, this neglects to mention that +gdb convenience variables and registers follow the gdb $ convention, and that the Rust parser +implements the gdb @ extension.

    +
    +

    This question by Aman

    +
    +

    @tromey do you think we should mention this part in the GDB-Rust document rather than this +document so there is no duplication etc.?

    +
    +

    LLDB

    +

    Rust expression parser

    +

    This expression parser is written in C++. It is a type of Recursive Descent parser. +It implements slightly less of the Rust language than GDB. +LLDB has Rust-like value and type output.

    +

    Developer notes

    +
      +
    • LLDB has a plugin architecture but that does not work for language support.
    • +
    • GDB generally works better on Linux.
    • +
    +

    WinDbg/CDB

    +

    Microsoft provides Windows Debugging Tools such as the Windows Debugger (WinDbg) and +the Console Debugger (CDB) which both support debugging programs written in Rust. These +debuggers parse the debug info for a binary from the PDB, if available, to construct a +visualization to serve up in the debugger.

    +

    Natvis

    +

    Both WinDbg and CDB support defining and viewing custom visualizations for any given type +within the debugger using the Natvis framework. The Rust compiler defines a set of Natvis +files that define custom visualizations for a subset of types in the standard libraries such +as, std, core, and alloc. These Natvis files are embedded into PDBs generated by the +*-pc-windows-msvc target triples to automatically enable these custom visualizations when +debugging. This default can be overridden by setting the strip rustc flag to either debuginfo +or symbols.

    +

    Rust has support for embedding Natvis files for crates outside of the standard libraries by +using the #[debugger_visualizer] attribute. +For more details on how to embed debugger visualizers, +please refer to the section on the debugger_visualizer attribute.

    +

    DWARF and rustc

    +

    DWARF is the standard way compilers generate debugging information that debuggers read. +It is the debugging format on macOS and Linux. +It is a multi-language and extensible format, +and is mostly good enough for Rust's purposes. +Hence, the current implementation reuses DWARF's concepts. +This is true even if some of the concepts in DWARF do not align with Rust semantically because, +generally, there can be some kind of mapping between the two.

    +

    We have some DWARF extensions that the Rust compiler emits and the debuggers understand that +are not in the DWARF standard.

    +
      +
    • +

      Rust compiler will emit DWARF for a virtual table, and this vtable object will have a +DW_AT_containing_type that points to the real type. This lets debuggers dissect a trait object +pointer to correctly find the payload. E.g., here's such a DIE, from a test case in the gdb +repository:

      +
      <1><1a9>: Abbrev Number: 3 (DW_TAG_structure_type)
      +   <1aa>   DW_AT_containing_type: <0x1b4>
      +   <1ae>   DW_AT_name        : (indirect string, offset: 0x23d): vtable
      +   <1b2>   DW_AT_byte_size   : 0
      +   <1b3>   DW_AT_alignment   : 8
      +
      +
    • +
    • +

      The other extension is that the Rust compiler can emit a tagless discriminated union. +See DWARF feature request for this item.

      +
    • +
    +

    Current limitations of DWARF

    +
      +
    • Traits - require a bigger change than normal to DWARF, on how to represent Traits in DWARF.
    • +
    • DWARF provides no way to differentiate between Structs and Tuples. Rust compiler emits +fields with __0 and debuggers look for a sequence of such names to overcome this limitation. +For example, in this case the debugger would look at a field via x.__0 instead of x.0. +This is resolved via the Rust parser in the debugger so now you can do x.0.
    • +
    +

    DWARF relies on debuggers to know some information about platform ABI. +Rust does not do that all the time.

    +

    Developer notes

    +

    This section is from the talk about certain aspects of development.

    +

    What is missing

    +

    Code signing for LLDB debug server on macOS

    +

    According to Wikipedia, System Integrity Protection is

    +
    +

    System Integrity Protection (SIP, sometimes referred to as rootless) is a security feature +of Apple's macOS operating system introduced in OS X El Capitan. It comprises a number of +mechanisms that are enforced by the kernel. A centerpiece is the protection of system-owned +files and directories against modifications by processes without a specific "entitlement", +even when executed by the root user or a user with root privileges (sudo).

    +
    +

    It prevents processes using ptrace syscall. If a process wants to use ptrace it has to be +code signed. The certificate that signs it has to be trusted on your machine.

    +

    See Apple developer documentation for System Integrity Protection.

    +

    We may need to sign up with Apple and get the keys to do this signing. Tom has looked into if +Mozilla cannot do this because it is at the maximum number of +keys it is allowed to sign. Tom does not know if Mozilla could get more keys.

    +

    Alternatively, Tom suggests that maybe a Rust legal entity is needed to get the keys via Apple. +This problem is not technical in nature. If we had such a key we could sign GDB as well and +ship that.

    +

    DWARF and Traits

    +

    Rust traits are not emitted into DWARF at all. The impact of this is calling a method x.method() +does not work as is. The reason being that method is implemented by a trait, as opposed +to a type. That information is not present so finding trait methods is missing.

    +

    DWARF has a notion of interface types (possibly added for Java). Tom's idea was to use this +interface type as traits.

    +

    DWARF only deals with concrete names, not the reference types. So, a given implementation of a +trait for a type would be one of these interfaces (DW_tag_interface type). Also, the type for +which it is implemented would describe all the interfaces this type implements. This requires a +DWARF extension.

    +

    Issue on Github: https://github.com/rust-lang/rust/issues/33014

    +

    Typical process for a Debug Info change (LLVM)

    +

    LLVM has Debug Info (DI) builders. This is the primary thing that Rust calls into. +This is why we need to change LLVM first because that is emitted first and not DWARF directly. +This is a kind of metadata that you construct and hand-off to LLVM. For the Rustc/LLVM hand-off +some LLVM DI builder methods are called to construct representation of a type.

    +

    The steps of this process are as follows:

    +
      +
    1. +

      LLVM needs changing.

      +

      LLVM does not emit Interface types at all, so this needs to be implemented in the LLVM first.

      +

      Get sign off on LLVM maintainers that this is a good idea.

      +
    2. +
    3. +

      Change the DWARF extension.

      +
    4. +
    5. +

      Update the debuggers.

      +

      Update DWARF readers, expression evaluators.

      +
    6. +
    7. +

      Update Rust compiler.

      +

      Change it to emit this new information.

      +
    8. +
    +

    Procedural macro stepping

    +

    A deeply profound question is that how do you actually debug a procedural macro? +What is the location you emit for a macro expansion? Consider some of the following cases -

    +
      +
    • You can emit location of the invocation of the macro.
    • +
    • You can emit the location of the definition of the macro.
    • +
    • You can emit locations of the content of the macro.
    • +
    +

    RFC: https://github.com/rust-lang/rfcs/pull/2117

    +

    Focus is to let macros decide what to do. This can be achieved by having some kind of attribute +that lets the macro tell the compiler where the line marker should be. This affects where you +set the breakpoints and what happens when you step it.

    +

    Source file checksums in debug info

    +

    Both DWARF and CodeView (PDB) support embedding a cryptographic hash of each source file that +contributed to the associated binary.

    +

    The cryptographic hash can be used by a debugger to verify that the source file matches the +executable. If the source file does not match, the debugger can provide a warning to the user.

    +

    The hash can also be used to prove that a given source file has not been modified since it was +used to compile an executable. Because MD5 and SHA1 both have demonstrated vulnerabilities, +using SHA256 is recommended for this application.

    +

    The Rust compiler stores the hash for each source file in the corresponding SourceFile in +the SourceMap. The hashes of input files to external crates are stored in rlib metadata.

    +

    A default hashing algorithm is set in the target specification. This allows the target to +specify the best hash available, since not all targets support all hash algorithms.

    +

    The hashing algorithm for a target can also be overridden with the -Z source-file-checksum= +command-line option.

    +

    DWARF 5

    +

    DWARF version 5 supports embedding an MD5 hash to validate the source file version in use. +DWARF 5 - Section 6.2.4.1 opcode DW_LNCT_MD5

    +

    LLVM

    +

    LLVM IR supports MD5 and SHA1 (and SHA256 in LLVM 11+) source file checksums in the DIFile node.

    +

    LLVM DIFile documentation

    +

    Microsoft Visual C++ Compiler /ZH option

    +

    The MSVC compiler supports embedding MD5, SHA1, or SHA256 hashes in the PDB using the /ZH +compiler option.

    +

    MSVC /ZH documentation

    +

    Clang

    +

    Clang always embeds an MD5 checksum, though this does not appear in documentation.

    +

    Future work

    +

    Name mangling changes

    +
      +
    • New demangler in libiberty (gcc source tree).
    • +
    • New demangler in LLVM or LLDB.
    • +
    +

    TODO: Check the location of the demangler source. #1157

    +

    Reuse Rust compiler for expressions

    +

    This is an important idea because debuggers by and large do not try to implement type +inference. You need to be much more explicit when you type into the debugger than your +actual source code. So, you cannot just copy and paste an expression from your source +code to debugger and expect the same answer but this would be nice. This can be helped +by using compiler.

    +

    It is certainly doable but it is a large project. You certainly need a bridge to the +debugger because the debugger alone has access to the memory. Both GDB (gcc) and LLDB (clang) +have this feature. LLDB uses Clang to compile code to JIT and GDB can do the same with GCC.

    +

    Both debuggers expression evaluation implement both a superset and a subset of Rust. +They implement just the expression language, +but they also add some extensions like GDB has convenience variables. +Therefore, if you are taking this route, +then you not only need to do this bridge, +but may have to add some mode to let the compiler understand some extensions.

    +

    Background topics

    +

    This section covers a numbers of common compiler terms that arise in +this guide. We try to give the general definition while providing some +Rust-specific context.

    +

    +

    What is a control-flow graph?

    +

    A control-flow graph (CFG) is a common term from compilers. If you've ever +used a flow-chart, then the concept of a control-flow graph will be +pretty familiar to you. It's a representation of your program that +clearly exposes the underlying control flow.

    +

    A control-flow graph is structured as a set of basic blocks +connected by edges. The key idea of a basic block is that it is a set +of statements that execute "together" – that is, whenever you branch +to a basic block, you start at the first statement and then execute +all the remainder. Only at the end of the block is there the +possibility of branching to more than one place (in MIR, we call that +final statement the terminator):

    +
    bb0: {
    +    statement0;
    +    statement1;
    +    statement2;
    +    ...
    +    terminator;
    +}
    +
    +

    Many expressions that you are used to in Rust compile down to multiple +basic blocks. For example, consider an if statement:

    +
    a = 1;
    +if some_variable {
    +    b = 1;
    +} else {
    +    c = 1;
    +}
    +d = 1;
    +

    This would compile into four basic blocks in MIR. In textual form, it looks like +this:

    +
    BB0: {
    +    a = 1;
    +    if some_variable {
    +        goto BB1;
    +    } else {
    +        goto BB2;
    +    }
    +}
    +
    +BB1: {
    +    b = 1;
    +    goto BB3;
    +}
    +
    +BB2: {
    +    c = 1;
    +    goto BB3;
    +}
    +
    +BB3: {
    +    d = 1;
    +    ...
    +}
    +
    +

    In graphical form, it looks like this:

    +
                    BB0
    +       +--------------------+
    +       | a = 1;             |
    +       +--------------------+
    +             /       \
    +  if some_variable   else
    +           /           \
    +     BB1  /             \  BB2
    +    +-----------+   +-----------+
    +    | b = 1;    |   | c = 1;    |
    +    +-----------+   +-----------+
    +            \          /
    +             \        /
    +              \ BB3  /
    +            +----------+
    +            | d = 1;   |
    +            | ...      |
    +            +----------+
    +
    +

    When using a control-flow graph, a loop simply appears as a cycle in +the graph, and the break keyword translates into a path out of that +cycle.

    +

    +

    What is a dataflow analysis?

    +

    Static Program Analysis by Anders Møller +and Michael I. Schwartzbach is an incredible resource!

    +

    Dataflow analysis is a type of static analysis that is common in many +compilers. It describes a general technique, rather than a particular analysis.

    +

    The basic idea is that we can walk over a control-flow graph (CFG) and +keep track of what some value could be. At the end of the walk, we might have +shown that some claim is true or not necessarily true (e.g. "this variable must +be initialized"). rustc tends to do dataflow analyses over the MIR, since MIR +is already a CFG.

    +

    For example, suppose we want to check that x is initialized before it is used +in this snippet:

    +
    fn foo() {
    +    let mut x;
    +
    +    if some_cond {
    +        x = 1;
    +    }
    +
    +    dbg!(x);
    +}
    +

    A CFG for this code might look like this:

    +
     +------+
    + | Init | (A)
    + +------+
    +    |   \
    +    |   if some_cond
    +  else    \ +-------+
    +    |      \| x = 1 | (B)
    +    |       +-------+
    +    |      /
    + +---------+
    + | dbg!(x) | (C)
    + +---------+
    +
    +

    We can do the dataflow analysis as follows: we will start off with a flag init +which indicates if we know x is initialized. As we walk the CFG, we will +update the flag. At the end, we can check its value.

    +

    So first, in block (A), the variable x is declared but not initialized, so +init = false. In block (B), we initialize the value, so we know that x is +initialized. So at the end of (B), init = true.

    +

    Block (C) is where things get interesting. Notice that there are two incoming +edges, one from (A) and one from (B), corresponding to whether some_cond is true or not. +But we cannot know that! It could be the case the some_cond is always true, +so that x is actually always initialized. It could also be the case that +some_cond depends on something random (e.g. the time), so x may not be +initialized. In general, we cannot know statically (due to Rice's +Theorem). So what should the value of init be in block (C)?

    +

    Generally, in dataflow analyses, if a block has multiple parents (like (C) in +our example), its dataflow value will be some function of all its parents (and +of course, what happens in (C)). Which function we use depends on the analysis +we are doing.

    +

    In this case, we want to be able to prove definitively that x must be +initialized before use. This forces us to be conservative and assume that +some_cond might be false sometimes. So our "merging function" is "and". That +is, init = true in (C) if init = true in (A) and in (B) (or if x is +initialized in (C)). But this is not the case; in particular, init = false in +(A), and x is not initialized in (C). Thus, init = false in (C); we can +report an error that "x may not be initialized before use".

    +

    There is definitely a lot more that can be said about dataflow analyses. There is an +extensive body of research literature on the topic, including a lot of theory. +We only discussed a forwards analysis, but backwards dataflow analysis is also +useful. For example, rather than starting from block (A) and moving forwards, +we might have started with the usage of x and moved backwards to try to find +its initialization.

    +

    +

    What is "universally quantified"? What about "existentially quantified"?

    +

    In math, a predicate may be universally quantified or existentially +quantified:

    +
      +
    • Universal quantification: +
        +
      • the predicate holds if it is true for all possible inputs.
      • +
      • Traditional notation: ∀x: P(x). Read as "for all x, P(x) holds".
      • +
      +
    • +
    • Existential quantification: +
        +
      • the predicate holds if there is any input where it is true, i.e., there +only has to be a single input.
      • +
      • Traditional notation: ∃x: P(x). Read as "there exists x such that P(x) holds".
      • +
      +
    • +
    +

    In Rust, they come up in type checking and trait solving. For example,

    +
    fn foo<T>()
    +

    This function claims that the function is well-typed for all types T: ∀ T: well_typed(foo).

    +

    Another example:

    +
    fn foo<'a>(_: &'a usize)
    +

    This function claims that for any lifetime 'a (determined by the +caller), it is well-typed: ∀ 'a: well_typed(foo).

    +

    Another example:

    +
    fn foo<F>()
    +where for<'a> F: Fn(&'a u8)
    +

    This function claims that it is well-typed for all types F such that for all +lifetimes 'a, F: Fn(&'a u8): ∀ F: ∀ 'a: (F: Fn(&'a u8)) => well_typed(foo).

    +

    One more example:

    +
    fn foo(_: dyn Debug)
    +

    This function claims that there exists some type T that implements Debug +such that the function is well-typed: ∃ T: (T: Debug) and well_typed(foo).

    +

    +

    What is a de Bruijn Index?

    +

    De Bruijn indices are a way of representing, using only integers, +which variables are bound in which binders. They were originally invented for +use in lambda calculus evaluation (see this Wikipedia article for +more). In rustc, we use de Bruijn indices to represent generic types.

    +

    Here is a basic example of how de Bruijn indices might be used for closures (we +don't actually do this in rustc though!):

    +
    |x| {
    +    f(x) // de Bruijn index of `x` is 1 because `x` is bound 1 level up
    +
    +    |y| {
    +        g(x, y) // index of `x` is 2 because it is bound 2 levels up
    +                // index of `y` is 1 because it is bound 1 level up
    +    }
    +}
    +

    What are co- and contra-variance?

    +

    Check out the subtyping chapter from the +Rust Nomicon.

    +

    See the variance chapter of this guide for more info on how +the type checker handles variance.

    +

    +

    What is a "free region" or a "free variable"? What about "bound region"?

    +

    Let's describe the concepts of free vs bound in terms of program +variables, since that's the thing we're most familiar with.

    +
      +
    • Consider this expression, which creates a closure: |a, b| a + b. +Here, the a and b in a + b refer to the arguments that the closure will +be given when it is called. We say that the a and b there are bound to +the closure, and that the closure signature |a, b| is a binder for the +names a and b (because any references to a or b within refer to the +variables that it introduces).
    • +
    • Consider this expression: a + b. In this expression, a and b refer to +local variables that are defined outside of the expression. We say that +those variables appear free in the expression (i.e., they are free, +not bound (tied up)).
    • +
    +

    So there you have it: a variable "appears free" in some +expression/statement/whatever if it refers to something defined +outside of that expressions/statement/whatever. Equivalently, we can +then refer to the "free variables" of an expression – which is just +the set of variables that "appear free".

    +

    So what does this have to do with regions? Well, we can apply the +analogous concept to type and regions. For example, in the type &'a u32, 'a appears free. But in the type for<'a> fn(&'a u32), it +does not.

    +

    Further Reading About Compilers

    +
    +

    Thanks to mem, scottmcm, and Levi on the official Discord for the +recommendations, and to tinaun for posting a link to a twitter thread from +Graydon Hoare +which had some more recommendations!

    +

    Other sources: https://gcc.gnu.org/wiki/ListOfCompilerBooks

    +

    If you have other suggestions, please feel free to open an issue or PR.

    +
    +

    Books

    + +

    Courses

    + +

    Wikis

    + +

    Misc Papers and Blog Posts

    + +

    Glossary

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TermMeaning
    arena, arena allocationAn arena is a large memory buffer from which other memory allocations are made. This style of allocation is called arena allocation. See this chapter for more info.
    ASTThe abstract syntax tree produced by the rustc_ast crate; reflects user syntax very closely.
    APITAn argument-position impl Trait. Also known as an anonymous type parameter. (see the reference).
    binderA binder is a place where a variable or type is declared; for example, the <T> is a binder for the generic type parameter T in fn foo<T>(..), and |a| ... is a binder for the parameter a. See the background chapter for more.
    BodyIdAn identifier that refers to a specific body (definition of a function or constant) in the crate. See the HIR chapter for more.
    bound variableA bound variable is one that is declared within an expression/term. For example, the variable a is bound within the closure expression |a| a * 2. See the background chapter for more
    codegenShort for code generation. The code to translate MIR into LLVM IR.
    codegen unitWhen we produce LLVM IR, we group the Rust code into a number of codegen units (sometimes abbreviated as CGUs). Each of these units is processed by LLVM independently from one another, enabling parallelism. They are also the unit of incremental re-use. (see more)
    completenessA technical term in type theory, it means that every type-safe program also type-checks. Having both soundness and completeness is very hard, and usually soundness is more important. (see "soundness").
    control-flow graphA representation of the control-flow of a program; see the background chapter for more
    CTFEShort for compile-time function evaluation, this is the ability of the compiler to evaluate const fns at compile time. This is part of the compiler's constant evaluation system. (see more)
    cxWe tend to use cx as an abbreviation for context. See also tcx, infcx, etc.
    ctxtWe also use ctxt as an abbreviation for context, e.g. TyCtxt. See also cx or tcx.
    DAGA directed acyclic graph is used during compilation to keep track of dependencies between queries. (see more)
    data-flow analysisA static analysis that figures out what properties are true at each point in the control-flow of a program; see the background chapter for more.
    de Bruijn indexA technique for describing which binder a variable is bound by using only integers. It has the benefit that it is invariant under variable renaming. (see more)
    DefIdAn index identifying a definition (see rustc_middle/src/hir/def_id.rs). Uniquely identifies a DefPath. See the HIR chapter for more.
    discriminantThe underlying value associated with an enum variant or generator state to indicate it as "active" (but not to be confused with its "variant index"). At runtime, the discriminant of the active variant is encoded in the tag.
    double pointerA pointer with additional metadata. See fat pointer for more.
    drop glue(Internal) compiler-generated instructions that handle calling the destructors (Drop) for data types.
    DSTShort for dynamically-sized type, this is a type for which the compiler cannot statically know the size in memory (e.g. str or [u8]). Such types don't implement Sized and cannot be allocated on the stack. They can only occur as the last field in a struct. They can only be used behind a pointer (e.g. &str or &[u8]).
    early-bound lifetimeA lifetime region that is substituted at its definition site. Bound in an item's Generics and substituted/instantiated using a GenericArgs. Contrast with late-bound lifetime. (see more)
    effectsRight now only means const traits and ~const bounds. (see more)
    empty typeSee uninhabited type.
    fat pointerA two word value carrying the address of some value, along with some further information necessary to put the value to use. Rust includes two kinds of fat pointers: references to slices, and trait objects. A reference to a slice carries the starting address of the slice and its length. A trait object carries a value's address and a pointer to the trait's implementation appropriate to that value. "Fat pointers" are also known as "wide pointers", and "double pointers".
    free variableA free variable is one that is not bound within an expression or term; see the background chapter for more
    genericsThe list of generic parameters defined on an item. There are three kinds of generic parameters: Type, lifetime and const parameters.
    HIRThe high-level IR, created by lowering and desugaring the AST. (see more)
    HirIdIdentifies a particular node in the HIR by combining a def-id with an "intra-definition offset". See the HIR chapter for more.
    ICEShort for internal compiler error, this is when the compiler crashes.
    ICHShort for incremental compilation hash, these are used as fingerprints for things such as HIR and crate metadata, to check if changes have been made. This is useful in incremental compilation to see if part of a crate has changed and should be recompiled.
    infcxThe type inference context (InferCtxt). (see rustc_middle::infer)
    inference variable, infer var When doing type, region, const inference, an inference variable is a kind of special type/region that represents what you are trying to infer. Think of X in algebra. For example, if we are trying to infer the type of a variable in a program, we create an inference variable to represent that unknown type.
    internInterning refers to storing certain frequently-used constant data, such as strings, and then referring to the data by an identifier (e.g. a Symbol) rather than the data itself, to reduce memory usage and number of allocations. See this chapter for more info.
    interpreterThe heart of const evaluation, running MIR code at compile time. (see more)
    intrinsicIntrinsics are special functions that are implemented in the compiler itself but exposed (often unstably) to users. They do magical and dangerous things. (See std::intrinsics)
    IRShort for intermediate representation, a general term in compilers. During compilation, the code is transformed from raw source (ASCII text) to various IRs. In Rust, these are primarily HIR, MIR, and LLVM IR. Each IR is well-suited for some set of computations. For example, MIR is well-suited for the borrow checker, and LLVM IR is well-suited for codegen because LLVM accepts it.
    IRLO, irloSometimes used as an abbreviation for internals.rust-lang.org.
    itemA kind of "definition" in the language, such as a static, const, use statement, module, struct, etc. Concretely, this corresponds to the Item type.
    lang itemItems that represent concepts intrinsic to the language itself, such as special built-in traits like Sync and Send; or traits representing operations such as Add; or functions that are called by the compiler. (see more)
    late-bound lifetimeA lifetime region that is substituted at its call site. Bound in a HRTB and substituted by specific functions in the compiler, such as liberate_late_bound_regions. Contrast with early-bound lifetime. (see more)
    local crateThe crate currently being compiled. This is in contrast to "upstream crates" which refer to dependencies of the local crate.
    LTOShort for link-time optimizations, this is a set of optimizations offered by LLVM that occur just before the final binary is linked. These include optimizations like removing functions that are never used in the final program, for example. ThinLTO is a variant of LTO that aims to be a bit more scalable and efficient, but possibly sacrifices some optimizations. You may also read issues in the Rust repo about "FatLTO", which is the loving nickname given to non-Thin LTO. LLVM documentation: here and here.
    LLVM(actually not an acronym :P) an open-source compiler backend. It accepts LLVM IR and outputs native binaries. Various languages (e.g. Rust) can then implement a compiler front-end that outputs LLVM IR and use LLVM to compile to all the platforms LLVM supports.
    memoizationThe process of storing the results of (pure) computations (such as pure function calls) to avoid having to repeat them in the future. This is typically a trade-off between execution speed and memory usage.
    MIRThe mid-level IR that is created after type-checking for use by borrowck and codegen. (see more)
    MiriA tool to detect Undefined Behavior in (unsafe) Rust code. (see more)
    monomorphizationThe process of taking generic implementations of types and functions and instantiating them with concrete types. For example, in the code we might have Vec<T>, but in the final executable, we will have a copy of the Vec code for every concrete type used in the program (e.g. a copy for Vec<usize>, a copy for Vec<MyStruct>, etc).
    normalizeA general term for converting to a more canonical form, but in the case of rustc typically refers to associated type normalization.
    newtypeA wrapper around some other type (e.g., struct Foo(T) is a "newtype" for T). This is commonly used in Rust to give a stronger type for indices.
    nicheInvalid bit patterns for a type that can be used for layout optimizations. Some types cannot have certain bit patterns. For example, the NonZero* integers or the reference &T cannot be represented by a 0 bitstring. This means the compiler can perform layout optimizations by taking advantage of the invalid "niche value". An example application for this is the Discriminant elision on Option-like enums, which allows using a type's niche as the "tag" for an enum without requiring a separate field.
    NLLShort for non-lexical lifetimes, this is an extension to Rust's borrowing system to make it be based on the control-flow graph.
    node-id or NodeIdAn index identifying a particular node in the AST or HIR; gradually being phased out and replaced with HirId. See the HIR chapter for more.
    obligationSomething that must be proven by the trait system. (see more)
    placeholderNOTE: skolemization is deprecated by placeholder a way of handling subtyping around "for-all" types (e.g., for<'a> fn(&'a u32)) as well as solving higher-ranked trait bounds (e.g., for<'a> T: Trait<'a>). See the chapter on placeholder and universes for more details.
    pointUsed in the NLL analysis to refer to some particular location in the MIR; typically used to refer to a node in the control-flow graph.
    projectionA general term for a "relative path", e.g. x.f is a "field projection", and T::Item is an "associated type projection".
    promoted constantsConstants extracted from a function and lifted to static scope; see this section for more details.
    providerThe function that executes a query. (see more)
    quantifiedIn math or logic, existential and universal quantification are used to ask questions like "is there any type T for which is true?" or "is this true for all types T?"; see the background chapter for more.
    queryA sub-computation during compilation. Query results can be cached in the current session or to disk for incremental compilation. (see more)
    recoveryRecovery refers to handling invalid syntax during parsing (e.g. a missing comma) and continuing to parse the AST. This avoid showing spurious errors to the user (e.g. showing 'missing field' errors when the struct definition contains errors).
    regionAnother term for "lifetime" often used in the literature and in the borrow checker.
    ribA data structure in the name resolver that keeps track of a single scope for names. (see more)
    RPITA return-position impl Trait. (see the reference).
    RPITITA return-position impl Trait in trait. Unlike RPIT, this is desugared to a generic associated type (GAT). Introduced in RFC 3425. (see more)
    scrutineeA scrutinee is the expression that is matched on in match expressions and similar pattern matching constructs. For example, in match x { A => 1, B => 2 }, the expression x is the scrutinee.
    sessThe compiler session, which stores global data used throughout compilation
    side tablesBecause the AST and HIR are immutable once created, we often carry extra information about them in the form of hashtables, indexed by the id of a particular node.
    sigilLike a keyword but composed entirely of non-alphanumeric tokens. For example, & is a sigil for references.
    soundnessA technical term in type theory. Roughly, if a type system is sound, then a program that type-checks is type-safe. That is, one can never (in safe rust) force a value into a variable of the wrong type. (see "completeness").
    spanA location in the user's source code, used for error reporting primarily. These are like a file-name/line-number/column tuple on steroids: they carry a start/end point, and also track macro expansions and compiler desugaring. All while being packed into a few bytes (really, it's an index into a table). See the Span datatype for more.
    substThe act of substituting the generic parameters inside of a type, constant expression, etc. with concrete generic arguments by supplying substs. Nowadays referred to as instantiating in the compiler.
    substsThe substitutions for a given generic item (e.g. the i32, u32 in HashMap<i32, u32>). Nowadays referred to as the list of generic arguments in the compiler (but note that strictly speaking these two concepts differ, see the literature).
    sysrootThe directory for build artifacts that are loaded by the compiler at runtime. (see more)
    tagThe "tag" of an enum/generator encodes the discriminant of the active variant/state. Tags can either be "direct" (simply storing the discriminant in a field) or use a "niche".
    TAITA type-alias impl Trait. Introduced in RFC 2515.
    tcxStandard variable name for the "typing context" (TyCtxt), main data structure of the compiler. (see more)
    'tcxThe lifetime of the allocation arenas used by TyCtxt. Most data interned during a compilation session will use this lifetime with the exception of HIR data which uses the 'hir lifetime. (see more)
    tokenThe smallest unit of parsing. Tokens are produced after lexing (see more).
    TLSThread-local storage. Variables may be defined so that each thread has its own copy (rather than all threads sharing the variable). This has some interactions with LLVM. Not all platforms support TLS.
    trait reference, trait ref The name of a trait along with a suitable list of generic arguments. (see more)
    transShort for translation, the code to translate MIR into LLVM IR. Renamed to codegen.
    TyThe internal representation of a type. (see more)
    TyCtxtThe data structure often referred to as tcx in code which provides access to session data and the query system.
    UFCSShort for universal function call syntax, this is an unambiguous syntax for calling a method. Term no longer in use! Prefer fully-qualified path/syntax. (see more, see the reference)
    uninhabited typeA type which has no values. This is not the same as a ZST, which has exactly 1 value. An example of an uninhabited type is enum Foo {}, which has no variants, and so, can never be created. The compiler can treat code that deals with uninhabited types as dead code, since there is no such value to be manipulated. ! (the never type) is an uninhabited type. Uninhabited types are also called empty types.
    upvarA variable captured by a closure from outside the closure.
    varianceDetermines how changes to a generic parameter affect subtyping; for example, if T is a subtype of U, then Vec<T> is a subtype Vec<U> because Vec is covariant in its generic parameter. See the background chapter for a more general explanation. See the variance chapter for an explanation of how type checking handles variance.
    variant indexIn an enum, identifies a variant by assigning them indices starting at 0. This is purely internal and not to be confused with the "discriminant" which can be overwritten by the user (e.g. enum Bool { True = 42, False = 0 }).
    well-formednessSemantically: An expression that evaluates to meaningful result. In type systems: A type related construct which follows rules of the type system.
    wide pointerA pointer with additional metadata. See fat pointer for more.
    ZSTZero-sized type. A type whose values have size 0 bytes. Since 2^0 = 1, such types can have exactly one value. For example, () (unit) is a ZST. struct Foo; is also a ZST. The compiler can do some nice optimizations around ZSTs.
    +

    Code Index

    +

    rustc has a lot of important data structures. This is an attempt to give some +guidance on where to learn more about some of the key data structures of the +compiler.

    +
    + + + + + + + + + + + + + + + + + + + + + + + +
    ItemKindShort descriptionChapterDeclaration
    BodyIdstructOne of four types of HIR node identifiersIdentifiers in the HIRcompiler/rustc_hir/src/hir.rs
    CompilerstructRepresents a compiler session and can be used to drive a compilation.The Rustc Driver and Interfacecompiler/rustc_interface/src/interface.rs
    ast::CratestructA syntax-level representation of a parsed crateThe parsercompiler/rustc_ast/src/ast.rs
    rustc_hir::CratestructA more abstract, compiler-friendly form of a crate's ASTThe Hircompiler/rustc_hir/src/hir.rs
    DefIdstructOne of four types of HIR node identifiersIdentifiers in the HIRcompiler/rustc_hir/src/def_id.rs
    DiagstructA struct for a compiler diagnostic, such as an error or lintEmitting Diagnosticscompiler/rustc_errors/src/diagnostic.rs
    DocContextstructA state container used by rustdoc when crawling through a crate to gather its documentationRustdocsrc/librustdoc/core.rs
    HirIdstructOne of four types of HIR node identifiersIdentifiers in the HIRcompiler/rustc_hir/src/hir_id.rs
    LexerstructThis is the lexer used during parsing. It consumes characters from the raw source code being compiled and produces a series of tokens for use by the rest of the parserThe parsercompiler/rustc_parse/src/lexer/mod.rs
    NodeIdstructOne of four types of HIR node identifiers. Being phased outIdentifiers in the HIRcompiler/rustc_ast/src/ast.rs
    PstructAn owned immutable smart pointer. By contrast, &T is not owned, and Box<T> is not immutable.Nonecompiler/rustc_ast/src/ptr.rs
    ParamEnvstructInformation about generic parameters or Self, useful for working with associated or generic itemsParameter Environmentcompiler/rustc_middle/src/ty/mod.rs
    ParseSessstructThis struct contains information about a parsing sessionThe parsercompiler/rustc_session/src/parse/parse.rs
    RibstructRepresents a single scope of namesName resolutioncompiler/rustc_resolve/src/lib.rs
    SessionstructThe data associated with a compilation sessionThe parser, The Rustc Driver and Interfacecompiler/rustc_session/src/session.rs
    SourceFilestructPart of the SourceMap. Maps AST nodes to their source code for a single source file. Was previously called FileMapThe parsercompiler/rustc_span/src/lib.rs
    SourceMapstructMaps AST nodes to their source code. It is composed of SourceFiles. Was previously called CodeMapThe parsercompiler/rustc_span/src/source_map.rs
    SpanstructA location in the user's source code, used for error reporting primarilyEmitting Diagnosticscompiler/rustc_span/src/span_encoding.rs
    rustc_ast::token_stream::TokenStreamstructAn abstract sequence of tokens, organized into TokenTreesThe parser, Macro expansioncompiler/rustc_ast/src/tokenstream.rs
    TraitDefstructThis struct contains a trait's definition with type informationThe ty modulescompiler/rustc_middle/src/ty/trait_def.rs
    TraitRefstructThe combination of a trait and its input types (e.g. P0: Trait<P1...Pn>)Trait Solving: Goals and Clausescompiler/rustc_middle/src/ty/sty.rs
    Ty<'tcx>structThis is the internal representation of a type used for type checkingType checkingcompiler/rustc_middle/src/ty/mod.rs
    TyCtxt<'tcx>structThe "typing context". This is the central data structure in the compiler. It is the context that you use to perform all manner of queriesThe ty modulescompiler/rustc_middle/src/ty/context.rs
    +

    Compiler Lecture Series

    +

    These are videos where various experts explain different parts of the compiler:

    +

    General

    + +

    Rust Analyzer

    + +

    Type System

    + +

    Closures

    + +

    Chalk

    + +

    Polonius

    + +

    Miri

    + +

    Async

    + +

    Code Generation

    + +

    Rust Bibliography

    +

    This is a reading list of material relevant to Rust. It includes prior +research that has - at one time or another - influenced the design of +Rust, as well as publications about Rust.

    +

    Type system

    + +

    Concurrency

    + +

    Others

    + +

    Papers about Rust

    + +

    Humor in Rust

    +

    What's a project without a sense of humor? And frankly some of these are +enlightening?

    + + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + + +
    + + diff --git a/profile-guided-optimization.html b/profile-guided-optimization.html new file mode 100644 index 000000000..edc5a1e3e --- /dev/null +++ b/profile-guided-optimization.html @@ -0,0 +1,331 @@ + + + + + + Profile-guided optimization - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    Profile-guided optimization

    + +

    rustc supports doing profile-guided optimization (PGO). +This chapter describes what PGO is and how the support for it is +implemented in rustc.

    +

    What is profiled-guided optimization?

    +

    The basic concept of PGO is to collect data about the typical execution of +a program (e.g. which branches it is likely to take) and then use this data +to inform optimizations such as inlining, machine-code layout, +register allocation, etc.

    +

    There are different ways of collecting data about a program's execution. +One is to run the program inside a profiler (such as perf) and another +is to create an instrumented binary, that is, a binary that has data +collection built into it, and run that. +The latter usually provides more accurate data.

    +

    How is PGO implemented in rustc?

    +

    rustc current PGO implementation relies entirely on LLVM. +LLVM actually supports multiple forms of PGO:

    +
      +
    • Sampling-based PGO where an external profiling tool like perf is used +to collect data about a program's execution.
    • +
    • GCOV-based profiling, where code coverage infrastructure is used to collect +profiling information.
    • +
    • Front-end based instrumentation, where the compiler front-end (e.g. Clang) +inserts instrumentation intrinsics into the LLVM IR it generates (but see the +1"Note").
    • +
    • IR-level instrumentation, where LLVM inserts the instrumentation intrinsics +itself during optimization passes.
    • +
    +

    rustc supports only the last approach, IR-level instrumentation, mainly +because it is almost exclusively implemented in LLVM and needs little +maintenance on the Rust side. Fortunately, it is also the most modern approach, +yielding the best results.

    +

    So, we are dealing with an instrumentation-based approach, i.e. profiling data +is generated by a specially instrumented version of the program that's being +optimized. Instrumentation-based PGO has two components: a compile-time +component and run-time component, and one needs to understand the overall +workflow to see how they interact.

    +

    Overall workflow

    +

    Generating a PGO-optimized program involves the following four steps:

    +
      +
    1. Compile the program with instrumentation enabled (e.g. rustc -C profile-generate main.rs)
    2. +
    3. Run the instrumented program (e.g. ./main) which generates a default-<id>.profraw file
    4. +
    5. Convert the .profraw file into a .profdata file using LLVM's llvm-profdata tool.
    6. +
    7. Compile the program again, this time making use of the profiling data +(e.g. rustc -C profile-use=merged.profdata main.rs)
    8. +
    +

    Compile-time aspects

    +

    Depending on which step in the above workflow we are in, two different things +can happen at compile time:

    +

    Create binaries with instrumentation

    +

    As mentioned above, the profiling instrumentation is added by LLVM. +rustc instructs LLVM to do so by setting the appropriate +flags when creating LLVM PassManagers:

    +
    	// `PMBR` is an `LLVMPassManagerBuilderRef`
    +    unwrap(PMBR)->EnablePGOInstrGen = true;
    +    // Instrumented binaries have a default output path for the `.profraw` file
    +    // hard-coded into them:
    +    unwrap(PMBR)->PGOInstrGen = PGOGenPath;
    +
    +

    rustc also has to make sure that some of the symbols from LLVM's profiling +runtime are not removed by marking the with the right export level.

    +

    Compile binaries where optimizations make use of profiling data

    +

    In the final step of the workflow described above, the program is compiled +again, with the compiler using the gathered profiling data in order to drive +optimization decisions. rustc again leaves most of the work to LLVM here, +basically just telling the LLVM PassManagerBuilder +where the profiling data can be found:

    +
    	unwrap(PMBR)->PGOInstrUse = PGOUsePath;
    +
    +

    LLVM does the rest (e.g. setting branch weights, marking functions with +cold or inlinehint, etc).

    +

    Runtime aspects

    +

    Instrumentation-based approaches always also have a runtime component, i.e. +once we have an instrumented program, that program needs to be run in order +to generate profiling data, and collecting and persisting this profiling +data needs some infrastructure in place.

    +

    In the case of LLVM, these runtime components are implemented in +compiler-rt and statically linked into any instrumented +binaries. +The rustc version of this can be found in library/profiler_builtins which +basically packs the C code from compiler-rt into a Rust crate.

    +

    In order for profiler_builtins to be built, profiler = true must be set +in rustc's bootstrap.toml.

    +

    Testing PGO

    +

    Since the PGO workflow spans multiple compiler invocations most testing happens +in run-make tests (the relevant tests have pgo in their name). +There is also a codegen test that checks that some expected +instrumentation artifacts show up in LLVM IR.

    +

    Additional information

    +

    Clang's documentation contains a good overview on PGO in LLVM.

    +
    +
    1. +

      Note: rustc now supports front-end-based coverage +instrumentation, via the experimental option +-C instrument-coverage, but using these +coverage results for PGO has not been attempted at this time.

      +
    2. +
    +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + + diff --git a/profiling.html b/profiling.html new file mode 100644 index 000000000..004edc500 --- /dev/null +++ b/profiling.html @@ -0,0 +1,329 @@ + + + + + + Profiling the compiler - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    Profiling the compiler

    +

    This section talks about how to profile the compiler and find out where it spends its time.

    +

    Depending on what you're trying to measure, there are several different approaches:

    +
      +
    • +

      If you want to see if a PR improves or regresses compiler performance, +see the rustc-perf chapter for requesting a benchmarking run.

      +
    • +
    • +

      If you want a medium-to-high level overview of where rustc is spending its time:

      +
        +
      • The -Z self-profile flag and measureme tools offer a query-based approach to profiling. +See their docs for more information.
      • +
      +
    • +
    • +

      If you want function level performance data or even just more details than the above approaches:

      +
        +
      • Consider using a native code profiler such as perf
      • +
      • or tracy for a nanosecond-precision, +full-featured graphical interface.
      • +
      +
    • +
    • +

      If you want a nice visual representation of the compile times of your crate graph, +you can use cargo's --timings flag, +e.g. cargo build --timings. +You can use this flag on the compiler itself with CARGOFLAGS="--timings" ./x build

      +
    • +
    • +

      If you want to profile memory usage, you can use various tools depending on what operating system +you are using.

      + +
    • +
    +

    Optimizing rustc's bootstrap times with cargo-llvm-lines

    +

    Using cargo-llvm-lines you can count the +number of lines of LLVM IR across all instantiations of a generic function. +Since most of the time compiling rustc is spent in LLVM, the idea is that by +reducing the amount of code passed to LLVM, compiling rustc gets faster.

    +

    To use cargo-llvm-lines together with somewhat custom rustc build process, you can use +-C save-temps to obtain required LLVM IR. The option preserves temporary work products +created during compilation. Among those is LLVM IR that represents an input to the +optimization pipeline; ideal for our purposes. It is stored in files with *.no-opt.bc +extension in LLVM bitcode format.

    +

    Example usage:

    +
    cargo install cargo-llvm-lines
    +# On a normal crate you could now run `cargo llvm-lines`, but `x` isn't normal :P
    +
    +# Do a clean before every run, to not mix in the results from previous runs.
    +./x clean
    +env RUSTFLAGS=-Csave-temps ./x build --stage 0 compiler/rustc
    +
    +# Single crate, e.g., rustc_middle. (Relies on the glob support of your shell.)
    +# Convert unoptimized LLVM bitcode into a human readable LLVM assembly accepted by cargo-llvm-lines.
    +for f in build/x86_64-unknown-linux-gnu/stage0-rustc/x86_64-unknown-linux-gnu/release/deps/rustc_middle-*.no-opt.bc; do
    +  ./build/x86_64-unknown-linux-gnu/llvm/bin/llvm-dis "$f"
    +done
    +cargo llvm-lines --files ./build/x86_64-unknown-linux-gnu/stage0-rustc/x86_64-unknown-linux-gnu/release/deps/rustc_middle-*.ll > llvm-lines-middle.txt
    +
    +# Specify all crates of the compiler.
    +for f in build/x86_64-unknown-linux-gnu/stage0-rustc/x86_64-unknown-linux-gnu/release/deps/*.no-opt.bc; do
    +  ./build/x86_64-unknown-linux-gnu/llvm/bin/llvm-dis "$f"
    +done
    +cargo llvm-lines --files ./build/x86_64-unknown-linux-gnu/stage0-rustc/x86_64-unknown-linux-gnu/release/deps/*.ll > llvm-lines.txt
    +
    +

    Example output for the compiler:

    +
      Lines            Copies          Function name
    +  -----            ------          -------------
    +  45207720 (100%)  1583774 (100%)  (TOTAL)
    +   2102350 (4.7%)   146650 (9.3%)  core::ptr::drop_in_place
    +    615080 (1.4%)     8392 (0.5%)  std::thread::local::LocalKey<T>::try_with
    +    594296 (1.3%)     1780 (0.1%)  hashbrown::raw::RawTable<T>::rehash_in_place
    +    592071 (1.3%)     9691 (0.6%)  core::option::Option<T>::map
    +    528172 (1.2%)     5741 (0.4%)  core::alloc::layout::Layout::array
    +    466854 (1.0%)     8863 (0.6%)  core::ptr::swap_nonoverlapping_one
    +    412736 (0.9%)     1780 (0.1%)  hashbrown::raw::RawTable<T>::resize
    +    367776 (0.8%)     2554 (0.2%)  alloc::raw_vec::RawVec<T,A>::grow_amortized
    +    367507 (0.8%)      643 (0.0%)  rustc_query_system::dep_graph::graph::DepGraph<K>::with_task_impl
    +    355882 (0.8%)     6332 (0.4%)  alloc::alloc::box_free
    +    354556 (0.8%)    14213 (0.9%)  core::ptr::write
    +    354361 (0.8%)     3590 (0.2%)  core::iter::traits::iterator::Iterator::fold
    +    347761 (0.8%)     3873 (0.2%)  rustc_middle::ty::context::tls::set_tlv
    +    337534 (0.7%)     2377 (0.2%)  alloc::raw_vec::RawVec<T,A>::allocate_in
    +    331690 (0.7%)     3192 (0.2%)  hashbrown::raw::RawTable<T>::find
    +    328756 (0.7%)     3978 (0.3%)  rustc_middle::ty::context::tls::with_context_opt
    +    326903 (0.7%)      642 (0.0%)  rustc_query_system::query::plumbing::try_execute_query
    +
    +

    Since this doesn't seem to work with incremental compilation or ./x check, +you will be compiling rustc a lot. +I recommend changing a few settings in bootstrap.toml to make it bearable:

    +
    [rust]
    +# A debug build takes _a third_ as long on my machine,
    +# but compiling more than stage0 rustc becomes unbearably slow.
    +optimize = false
    +
    +# We can't use incremental anyway, so we disable it for a little speed boost.
    +incremental = false
    +# We won't be running it, so no point in compiling debug checks.
    +debug = false
    +
    +# Using a single codegen unit gives less output, but is slower to compile.
    +codegen-units = 0  # num_cpus
    +
    +

    The llvm-lines output is affected by several options. +optimize = false increases it from 2.1GB to 3.5GB and codegen-units = 0 to 4.1GB.

    +

    MIR optimizations have little impact. Compared to the default RUSTFLAGS="-Z mir-opt-level=1", level 0 adds 0.3GB and level 2 removes 0.2GB. +As of July 2022, +inlining happens in LLVM and GCC codegen backends, +missing only in the Cranelift one.

    + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + + diff --git a/profiling/with_perf.html b/profiling/with_perf.html new file mode 100644 index 000000000..3cf5762da --- /dev/null +++ b/profiling/with_perf.html @@ -0,0 +1,461 @@ + + + + + + with the linux perf tool - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    Profiling with perf

    +

    This is a guide for how to profile rustc with perf.

    +

    Initial steps

    +
      +
    • Get a clean checkout of rust-lang/master, or whatever it is you want +to profile.
    • +
    • Set the following settings in your bootstrap.toml: +
        +
      • debuginfo-level = 1 - enables line debuginfo
      • +
      • jemalloc = false - lets you do memory use profiling with valgrind
      • +
      • leave everything else the defaults
      • +
      +
    • +
    • Run ./x build to get a full build
    • +
    • Make a rustup toolchain pointing to that result + +
    • +
    +

    Gathering a perf profile

    +

    perf is an excellent tool on linux that can be used to gather and +analyze all kinds of information. Mostly it is used to figure out +where a program spends its time. It can also be used for other sorts +of events, though, like cache misses and so forth.

    +

    The basics

    +

    The basic perf command is this:

    +
    perf record -F99 --call-graph dwarf XXX
    +
    +

    The -F99 tells perf to sample at 99 Hz, which avoids generating too +much data for longer runs (why 99 Hz you ask? It is often chosen +because it is unlikely to be in lockstep with other periodic +activity). The --call-graph dwarf tells perf to get call-graph +information from debuginfo, which is accurate. The XXX is the +command you want to profile. So, for example, you might do:

    +
    perf record -F99 --call-graph dwarf cargo +<toolchain> rustc
    +
    +

    to run cargo -- here <toolchain> should be the name of the toolchain +you made in the beginning. But there are some things to be aware of:

    +
      +
    • You probably don't want to profile the time spend building +dependencies. So something like cargo build; cargo clean -p $C may +be helpful (where $C is the crate name) +
        +
      • Though usually I just do touch src/lib.rs and rebuild instead. =)
      • +
      +
    • +
    • You probably don't want incremental messing about with your +profile. So something like CARGO_INCREMENTAL=0 can be helpful.
    • +
    +

    In case to avoid the issue of addr2line xxx/elf: could not read first record when reading +collected data from cargo, you may need use the latest version of addr2line:

    +
    cargo install addr2line --features="bin"
    +
    +

    Gathering a perf profile from a perf.rust-lang.org test

    +

    Often we want to analyze a specific test from perf.rust-lang.org. +The easiest way to do that is to use the rustc-perf +benchmarking suite, this approach is described here.

    +

    Instead of using the benchmark suite CLI, you can also profile the benchmarks manually. First, +you need to clone the rustc-perf repository:

    +
    $ git clone https://github.com/rust-lang/rustc-perf
    +
    +

    and then find the source code of the test that you want to profile. Sources for the tests +are found in the collector/compile-benchmarks directory +and the collector/runtime-benchmarks directory. So let's +go into the directory of a specific test; we'll use clap-rs as an example:

    +
    cd collector/compile-benchmarks/clap-3.1.6
    +
    +

    In this case, let's say we want to profile the cargo check +performance. In that case, I would first run some basic commands to +build the dependencies:

    +
    # Setup: first clean out any old results and build the dependencies:
    +cargo +<toolchain> clean
    +CARGO_INCREMENTAL=0 cargo +<toolchain> check
    +
    +

    (Again, <toolchain> should be replaced with the name of the +toolchain we made in the first step.)

    +

    Next: we want record the execution time for just the clap-rs crate, +running cargo check. I tend to use cargo rustc for this, since it +also allows me to add explicit flags, which we'll do later on.

    +
    touch src/lib.rs
    +CARGO_INCREMENTAL=0 perf record -F99 --call-graph dwarf cargo rustc --profile check --lib
    +
    +

    Note that final command: it's a doozy! It uses the cargo rustc +command, which executes rustc with (potentially) additional options; +the --profile check and --lib options specify that we are doing a +cargo check execution, and that this is a library (not a binary).

    +

    At this point, we can use perf tooling to analyze the results. For example:

    +
    perf report
    +
    +

    will open up an interactive TUI program. In simple cases, that can be +helpful. For more detailed examination, the perf-focus tool +can be helpful; it is covered below.

    +

    A note of caution. Each of the rustc-perf tests is its own special +snowflake. In particular, some of them are not libraries, in which +case you would want to do touch src/main.rs and avoid passing +--lib. I'm not sure how best to tell which test is which to be +honest.

    +

    Gathering NLL data

    +

    If you want to profile an NLL run, you can just pass extra options to +the cargo rustc command, like so:

    +
    touch src/lib.rs
    +CARGO_INCREMENTAL=0 perf record -F99 --call-graph dwarf cargo rustc --profile check --lib -- -Z borrowck=mir
    +
    +

    Analyzing a perf profile with perf focus

    +

    Once you've gathered a perf profile, we want to get some information +about it. For this, I personally use perf focus. It's a kind of +simple but useful tool that lets you answer queries like:

    +
      +
    • "how much time was spent in function F" (no matter where it was called from)
    • +
    • "how much time was spent in function F when it was called from G"
    • +
    • "how much time was spent in function F excluding time spent in G"
    • +
    • "what functions does F call and how much time does it spend in them"
    • +
    +

    To understand how it works, you have to know just a bit about +perf. Basically, perf works by sampling your process on a regular +basis (or whenever some event occurs). For each sample, perf gathers a +backtrace. perf focus lets you write a regular expression that tests +which functions appear in that backtrace, and then tells you which +percentage of samples had a backtrace that met the regular +expression. It's probably easiest to explain by walking through how I +would analyze NLL performance.

    +

    Installing perf-focus

    +

    You can install perf-focus using cargo install:

    +
    cargo install perf-focus
    +
    +

    Example: How much time is spent in MIR borrowck?

    +

    Let's say we've gathered the NLL data for a test. We'd like to know +how much time it is spending in the MIR borrow-checker. The "main" +function of the MIR borrowck is called do_mir_borrowck, so we can do +this command:

    +
    $ perf focus '{do_mir_borrowck}'
    +Matcher    : {do_mir_borrowck}
    +Matches    : 228
    +Not Matches: 542
    +Percentage : 29%
    +
    +

    The '{do_mir_borrowck}' argument is called the matcher. It +specifies the test to be applied on the backtrace. In this case, the +{X} indicates that there must be some function on the backtrace +that meets the regular expression X. In this case, that regex is +just the name of the function we want (in fact, it's a subset of the name; +the full name includes a bunch of other stuff, like the module +path). In this mode, perf-focus just prints out the percentage of +samples where do_mir_borrowck was on the stack: in this case, 29%.

    +

    A note about c++filt. To get the data from perf, perf focus +currently executes perf script (perhaps there is a better +way...). I've sometimes found that perf script outputs C++ mangled +names. This is annoying. You can tell by running perf script | head yourself — if you see names like 5rustc6middle instead of +rustc::middle, then you have the same problem. You can solve this +by doing:

    +
    perf script | c++filt | perf focus --from-stdin ...
    +
    +

    This will pipe the output from perf script through c++filt and +should mostly convert those names into a more friendly format. The +--from-stdin flag to perf focus tells it to get its data from +stdin, rather than executing perf focus. We should make this more +convenient (at worst, maybe add a c++filt option to perf focus, or +just always use it — it's pretty harmless).

    +

    Example: How much time does MIR borrowck spend solving traits?

    +

    Perhaps we'd like to know how much time MIR borrowck spends in the +trait checker. We can ask this using a more complex regex:

    +
    $ perf focus '{do_mir_borrowck}..{^rustc::traits}'
    +Matcher    : {do_mir_borrowck},..{^rustc::traits}
    +Matches    : 12
    +Not Matches: 1311
    +Percentage : 0%
    +
    +

    Here we used the .. operator to ask "how often do we have +do_mir_borrowck on the stack and then, later, some function whose +name begins with rustc::traits?" (basically, code in that module). It +turns out the answer is "almost never" — only 12 samples fit that +description (if you ever see no samples, that often indicates your +query is messed up).

    +

    If you're curious, you can find out exactly which samples by using the +--print-match option. This will print out the full backtrace for +each sample. The | at the front of the line indicates the part that +the regular expression matched.

    +

    Example: Where does MIR borrowck spend its time?

    +

    Often we want to do more "explorational" queries. Like, we know that +MIR borrowck is 29% of the time, but where does that time get spent? +For that, the --tree-callees option is often the best tool. You +usually also want to give --tree-min-percent or +--tree-max-depth. The result looks like this:

    +
    $ perf focus '{do_mir_borrowck}' --tree-callees --tree-min-percent 3
    +Matcher    : {do_mir_borrowck}
    +Matches    : 577
    +Not Matches: 746
    +Percentage : 43%
    +
    +Tree
    +| matched `{do_mir_borrowck}` (43% total, 0% self)
    +: | rustc_borrowck::nll::compute_regions (20% total, 0% self)
    +: : | rustc_borrowck::nll::type_check::type_check_internal (13% total, 0% self)
    +: : : | core::ops::function::FnOnce::call_once (5% total, 0% self)
    +: : : : | rustc_borrowck::nll::type_check::liveness::generate (5% total, 3% self)
    +: : : | <rustc_borrowck::nll::type_check::TypeVerifier<'a, 'b, 'tcx> as rustc::mir::visit::Visitor<'tcx>>::visit_mir (3% total, 0% self)
    +: | rustc::mir::visit::Visitor::visit_mir (8% total, 6% self)
    +: | <rustc_borrowck::MirBorrowckCtxt<'cx, 'tcx> as rustc_mir_dataflow::DataflowResultsConsumer<'cx, 'tcx>>::visit_statement_entry (5% total, 0% self)
    +: | rustc_mir_dataflow::do_dataflow (3% total, 0% self)
    +
    +

    What happens with --tree-callees is that

    +
      +
    • we find each sample matching the regular expression
    • +
    • we look at the code that occurs after the regex match and try +to build up a call tree
    • +
    +

    The --tree-min-percent 3 option says "only show me things that take +more than 3% of the time". Without this, the tree often gets really +noisy and includes random stuff like the innards of +malloc. --tree-max-depth can be useful too, it just limits how many +levels we print.

    +

    For each line, we display the percent of time in that function +altogether ("total") and the percent of time spent in just that +function and not some callee of that function (self). Usually +"total" is the more interesting number, but not always.

    +

    Relative percentages

    +

    By default, all in perf-focus are relative to the total program +execution. This is useful to help you keep perspective — often as +we drill down to find hot spots, we can lose sight of the fact that, +in terms of overall program execution, this "hot spot" is actually not +important. It also ensures that percentages between different queries +are easily compared against one another.

    +

    That said, sometimes it's useful to get relative percentages, so perf focus offers a --relative option. In this case, the percentages are +listed only for samples that match (vs all samples). So for example we +could get our percentages relative to the borrowck itself +like so:

    +
    $ perf focus '{do_mir_borrowck}' --tree-callees --relative --tree-max-depth 1 --tree-min-percent 5
    +Matcher    : {do_mir_borrowck}
    +Matches    : 577
    +Not Matches: 746
    +Percentage : 100%
    +
    +Tree
    +| matched `{do_mir_borrowck}` (100% total, 0% self)
    +: | rustc_borrowck::nll::compute_regions (47% total, 0% self) [...]
    +: | rustc::mir::visit::Visitor::visit_mir (19% total, 15% self) [...]
    +: | <rustc_borrowck::MirBorrowckCtxt<'cx, 'tcx> as rustc_mir_dataflow::DataflowResultsConsumer<'cx, 'tcx>>::visit_statement_entry (13% total, 0% self) [...]
    +: | rustc_mir_dataflow::do_dataflow (8% total, 1% self) [...]
    +
    +

    Here you see that compute_regions came up as "47% total" — that +means that 47% of do_mir_borrowck is spent in that function. Before, +we saw 20% — that's because do_mir_borrowck itself is only 43% of +the total time (and .47 * .43 = .20).

    + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + + diff --git a/profiling/with_rustc_perf.html b/profiling/with_rustc_perf.html new file mode 100644 index 000000000..3a660d864 --- /dev/null +++ b/profiling/with_rustc_perf.html @@ -0,0 +1,244 @@ + + + + + + with the Rust benchmark suite - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    Profiling with rustc-perf

    +

    The Rust benchmark suite provides a comprehensive way of profiling and benchmarking +the Rust compiler. You can find instructions on how to use the suite in its manual.

    +

    However, using the suite manually can be a bit cumbersome. To make this easier for rustc contributors, +the compiler build system (bootstrap) also provides built-in integration with the benchmarking suite, +which will download and build the suite for you, build a local compiler toolchain and let you profile it using a simplified command-line interface.

    +

    You can use the ./x perf <command> [options] command to use this integration.

    +

    You can use normal bootstrap flags for this command, such as --stage 1 or --stage 2, for example to modify the stage of the created sysroot. It might also be useful to configure bootstrap.toml to better support profiling, e.g. set rust.debuginfo-level = 1 to add source line information to the built compiler.

    +

    x perf currently supports the following commands:

    +
      +
    • benchmark <id>: Benchmark the compiler and store the results under the passed id.
    • +
    • compare <baseline> <modified>: Compare the benchmark results of two compilers with the two passed ids.
    • +
    • eprintln: Just run the compiler and capture its stderr output. Note that the compiler normally does not print +anything to stderr, you might want to add some eprintln! calls to get any output.
    • +
    • samply: Profile the compiler using the samply sampling profiler.
    • +
    • cachegrind: Use Cachegrind to generate a detailed simulated trace of the compiler's execution.
    • +
    +
    +

    You can find a more detailed description of the profilers in the rustc-perf manual.

    +
    +

    You can use the following options for the x perf command, which mirror the corresponding options of the +profile_local and bench_local commands that you can use in the suite:

    +
      +
    • --include: Select benchmarks which should be profiled/benchmarked.
    • +
    • --profiles: Select profiles (Check, Debug, Opt, Doc) which should be profiled/benchmarked.
    • +
    • --scenarios: Select scenarios (Full, IncrFull, IncrPatched, IncrUnchanged) which should be profiled/benchmarked.
    • +
    + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + + diff --git a/profiling/wpa_profiling.html b/profiling/wpa_profiling.html new file mode 100644 index 000000000..2ddcd0092 --- /dev/null +++ b/profiling/wpa_profiling.html @@ -0,0 +1,318 @@ + + + + + + with Windows Performance Analyzer - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    Profiling on Windows

    +

    Introducing WPR and WPA

    +

    High-level performance analysis (including memory usage) can be performed with the Windows +Performance Recorder (WPR) and Windows Performance Analyzer (WPA). As the names suggest, WPR is for +recording system statistics (in the form of event trace log a.k.a. ETL files), while WPA is for +analyzing these ETL files.

    +

    WPR collects system wide statistics, so it won't just record things relevant to rustc but also +everything else that's running on the machine. During analysis, we can filter to just the things we +find interesting.

    +

    These tools are quite powerful but also require a bit of learning +before we can successfully profile the Rust compiler.

    +

    Here we will explore how to use WPR and WPA for analyzing the Rust compiler as well as provide +links to useful "profiles" (i.e., settings files that tweak the defaults for WPR and WPA) that are +specifically designed to make analyzing rustc easier.

    +

    Installing WPR and WPA

    +

    You can install WPR and WPA as part of the Windows Performance Toolkit which itself is an option as +part of downloading the Windows Assessment and Deployment Kit (ADK). You can download the ADK +installer here. Make sure to select the Windows +Performance Toolkit (you don't need to select anything else).

    +

    Recording

    +

    In order to perform system analysis, you'll first need to record your system with WPR. Open WPR and +at the bottom of the window select the "profiles" of the things you want to record. For looking +into memory usage of the rustc bootstrap process, we'll want to select the following items:

    +
      +
    • CPU usage
    • +
    • VirtualAlloc usage
    • +
    +

    You might be tempted to record "Heap usage" as well, but this records every single heap allocation +and can be very, very expensive. For high-level analysis, it might be best to leave that turned +off.

    +

    Now we need to get our setup ready to record. For memory usage analysis, it is best to record the +stage 2 compiler build with a stage 1 compiler build with debug symbols. Having symbols in the +compiler we're using to build rustc will aid our analysis greatly by allowing WPA to resolve Rust +symbols correctly. Unfortunately, the stage 0 compiler does not have symbols turned on which is why +we'll need to build a stage 1 compiler and then a stage 2 compiler ourselves.

    +

    To do this, make sure you have set debuginfo-level = 1 in your bootstrap.toml file. This tells +rustc to generate debug information which includes stack frames when bootstrapping.

    +

    Now you can build the stage 1 compiler: x build --stage 1 -i library or however +else you want to build the stage 1 compiler.

    +

    Now that the stage 1 compiler is built, we can record the stage 2 build. Go back to WPR, click the +"start" button and build the stage 2 compiler (e.g., x build --stage=2 -i library). +When this process finishes, stop the recording.

    +

    Click the Save button and once that process is complete, click the "Open in WPA" button which +appears.

    +
    +

    Note: The trace file is fairly large so it can take WPA some time to finish opening the file.

    +
    +

    Analysis

    +

    Now that our ETL file is open in WPA, we can analyze the results. First, we'll want to apply the +pre-made "profile" which will put WPA into a state conducive to analyzing rustc bootstrap. Download +the profile here. +Select the "Profiles" menu at the top, then "apply" and then choose the downloaded profile.

    +

    You should see something resembling the following:

    +

    WPA with profile applied

    +

    Next, we will need to tell WPA to load and process debug symbols so that it can properly demangle +the Rust stack traces. To do this, click "Trace" and then choose "Load Symbols". This step can take +a while.

    +

    Once WPA has loaded symbols for rustc, we can expand the rustc.exe node and begin drilling down +into the stack with the largest allocations.

    +

    To do that, we'll expand the [Root] node in the "Commit Stack" column and continue expanding +until we find interesting stack frames.

    +
    +

    Tip: After selecting the node you want to expand, press the right arrow key. This will expand the +node and put the selection on the next largest node in the expanded set. You can continue pressing +the right arrow key until you reach an interesting frame.

    +
    +

    WPA with expanded stack

    +

    In this sample, you can see calls through codegen are allocating ~30gb of memory in total +throughout this profile.

    +

    Other Analysis Tabs

    +

    The profile also includes a few other tabs which can be helpful:

    +
      +
    • System Configuration +
        +
      • General information about the system the capture was recorded on.
      • +
      +
    • +
    • rustc Build Processes +
        +
      • A flat list of relevant processes such as rustc.exe, cargo.exe, link.exe etc.
      • +
      • Each process lists its command line arguments.
      • +
      • Useful for figuring out what a specific rustc process was working on.
      • +
      +
    • +
    • rustc Build Process Tree +
        +
      • Timeline showing when processes started and exited.
      • +
      +
    • +
    • rustc CPU Analysis +
        +
      • Contains charts preconfigured to show hotspots in rustc.
      • +
      • These charts are designed to support analyzing where rustc is spending its time.
      • +
      +
    • +
    • rustc Memory Analysis +
        +
      • Contains charts preconfigured to show where rustc is allocating memory.
      • +
      +
    • +
    + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + + diff --git a/queries/example-0.counts.txt b/queries/example-0.counts.txt new file mode 100644 index 000000000..e5b9c3f3d --- /dev/null +++ b/queries/example-0.counts.txt @@ -0,0 +1,104 @@ +translation,1,0.891 +symbol_name,2658,0.733 +def_symbol_name,2556,0.268 +item_attrs,5566,0.162 +type_of,6922,0.117 +generics_of,8020,0.084 +serialize dep graph,1,0.079 +relevant_trait_impls_for,50,0.063 +def_span,24875,0.061 +expansion,1,0.059 +const checking,1,0.055 +adt_def,1141,0.048 +trait_impls_of,32,0.045 +is_copy_raw,47,0.045 +is_foreign_item,2638,0.042 +fn_sig,2172,0.033 +adt_dtorck_constraint,2,0.023 +impl_trait_ref,2434,0.023 +typeck_tables_of,29,0.022 +item-bodies checking,1,0.017 +typeck_item_bodies,1,0.017 +is_default_impl,2320,0.017 +borrow checking,1,0.014 +borrowck,4,0.014 +mir_validated,4,0.013 +adt_destructor,10,0.012 +layout_raw,258,0.010 +load_dep_graph,1,0.007 +item-types checking,1,0.005 +mir_const,2,0.005 +name resolution,1,0.004 +is_object_safe,35,0.003 +is_sized_raw,89,0.003 +parsing,1,0.003 +is_freeze_raw,11,0.001 +privacy checking,1,0.001 +privacy_access_levels,5,0.001 +resolving dependency formats,1,0.001 +adt_sized_constraint,9,0.001 +wf checking,1,0.001 +liveness checking,1,0.001 +compute_incremental_hashes_map,1,0.001 +match checking,1,0.001 +type collecting,1,0.001 +param_env,31,0.000 +effect checking,1,0.000 +trait_def,140,0.000 +lowering ast -> hir,1,0.000 +predicates_of,70,0.000 +extern_crate,319,0.000 +lifetime resolution,1,0.000 +is_const_fn,6,0.000 +intrinsic checking,1,0.000 +translation item collection,1,0.000 +impl_polarity,15,0.000 +creating allocators,1,0.000 +language item collection,1,0.000 +crate injection,1,0.000 +early lint checks,1,0.000 +indexing hir,1,0.000 +maybe creating a macro crate,1,0.000 +coherence checking,1,0.000 +optimized_mir,6,0.000 +is_panic_runtime,33,0.000 +associated_item_def_ids,7,0.000 +needs_drop_raw,10,0.000 +lint checking,1,0.000 +complete gated feature checking,1,0.000 +stability index,1,0.000 +region_maps,11,0.000 +super_predicates_of,8,0.000 +coherent_trait,2,0.000 +AST validation,1,0.000 +loop checking,1,0.000 +static item recursion checking,1,0.000 +variances_of,11,0.000 +associated_item,5,0.000 +plugin loading,1,0.000 +looking for plugin registrar,1,0.000 +stability checking,1,0.000 +describe_def,15,0.000 +variance testing,1,0.000 +codegen unit partitioning,1,0.000 +looking for entry point,1,0.000 +checking for inline asm in case the target doesn't support it,1,0.000 +inherent_impls,1,0.000 +crate_inherent_impls,1,0.000 +trait_of_item,7,0.000 +crate_inherent_impls_overlap_check,1,0.000 +attribute checking,1,0.000 +internalize symbols,1,0.000 +impl wf inference,1,0.000 +death checking,1,0.000 +reachability checking,1,0.000 +reachable_set,1,0.000 +is_exported_symbol,3,0.000 +is_mir_available,2,0.000 +unused lib feature checking,1,0.000 +maybe building test harness,1,0.000 +recursion limit,1,0.000 +write allocator module,1,0.000 +assert dep graph,1,0.000 +plugin registration,1,0.000 +write metadata,1,0.000 diff --git a/queries/example-0.html b/queries/example-0.html new file mode 100644 index 000000000..b196aaa83 --- /dev/null +++ b/queries/example-0.html @@ -0,0 +1,313330 @@ + + + + + + +
    +
    parsing
    +
    0.003
    +
    0.2%
    +
    +
    +
    recursion limit
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    crate injection
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    plugin loading
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    plugin registration
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    expansion
    +
    0.059
    +
    5.2%
    +
    +
    +
    maybe building test harness
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    maybe creating a macro crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    creating allocators
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    checking for inline asm in case the target doesn't support it
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    early lint checks
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    AST validation
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    name resolution
    +
    0.004
    +
    0.3%
    +
    +
    +
    complete gated feature checking
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    lowering ast -> hir
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    indexing hir
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    attribute checking
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    language item collection
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    lifetime resolution
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    looking for entry point
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    looking for plugin registrar
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    loop checking
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    static item recursion checking
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    compute_incremental_hashes_map
    +
    0.001
    +
    < 0.1%
    +
    +
    +
    load_dep_graph
    +
    0.007
    +
    0.6%
    +
    +
    +
    stability index
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    stability checking
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type collecting
    +
    0.001
    +
    < 0.1%
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    predicates_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    predicates_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    impl wf inference
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    coherence checking
    +
    0.000
    +
    < 0.1%
    +
    +
    crate_inherent_impls
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    crate_inherent_impls_overlap_check
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    variance testing
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    wf checking
    +
    0.001
    +
    < 0.1%
    +
    +
    param_env
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    predicates_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    predicates_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    region_maps
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    param_env
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    predicates_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    region_maps
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item-types checking
    +
    0.005
    +
    0.4%
    +
    +
    typeck_tables_of
    +
    0.005
    +
    0.4%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    param_env
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    relevant_trait_impls_for
    +
    0.003
    +
    0.3%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_impls_of
    +
    0.003
    +
    0.2%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_object_safe
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    super_predicates_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    associated_item_def_ids
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    predicates_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    super_predicates_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    super_predicates_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    predicates_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    associated_item_def_ids
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_polarity
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    predicates_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    relevant_trait_impls_for
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_impls_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_object_safe
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_polarity
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    predicates_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    region_maps
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item-bodies checking
    +
    0.017
    +
    1.5%
    +
    +
    typeck_item_bodies
    +
    0.017
    +
    1.5%
    +
    +
    typeck_tables_of
    +
    0.017
    +
    1.5%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    param_env
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    predicates_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    inherent_impls
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    associated_item_def_ids
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    associated_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    variances_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    predicates_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    associated_item
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    predicates_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    predicates_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    variances_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    variances_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    predicates_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    relevant_trait_impls_for
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_object_safe
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_polarity
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    predicates_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    relevant_trait_impls_for
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_object_safe
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_polarity
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    predicates_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    predicates_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    predicates_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    predicates_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    adt_sized_constraint
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    relevant_trait_impls_for
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_object_safe
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    variances_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    variances_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    relevant_trait_impls_for
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_object_safe
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_polarity
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    predicates_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    variances_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    variances_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    variances_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    variances_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    relevant_trait_impls_for
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_impls_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_object_safe
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    variances_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    predicates_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    relevant_trait_impls_for
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_impls_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_object_safe
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    region_maps
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_dtorck_constraint
    +
    0.012
    +
    1.1%
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    adt_dtorck_constraint
    +
    0.011
    +
    1.0%
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    adt_destructor
    +
    0.011
    +
    1.0%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    coherent_trait
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    relevant_trait_impls_for
    +
    0.011
    +
    1.0%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_impls_of
    +
    0.010
    +
    0.9%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_destructor
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    coherent_trait
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    relevant_trait_impls_for
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_impls_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    +
    typeck_tables_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    typeck_tables_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    typeck_tables_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    const checking
    +
    0.055
    +
    4.8%
    +
    +
    typeck_tables_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    param_env
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    region_maps
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_copy_raw
    +
    0.030
    +
    2.6%
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    relevant_trait_impls_for
    +
    0.030
    +
    2.6%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_impls_of
    +
    0.028
    +
    2.5%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    is_copy_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_copy_raw
    +
    0.008
    +
    0.7%
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    relevant_trait_impls_for
    +
    0.008
    +
    0.7%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_impls_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_copy_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    relevant_trait_impls_for
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_impls_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_polarity
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    predicates_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_copy_raw
    +
    0.001
    +
    < 0.1%
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    relevant_trait_impls_for
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_impls_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    is_copy_raw
    +
    0.002
    +
    0.2%
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    relevant_trait_impls_for
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_impls_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    is_copy_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    relevant_trait_impls_for
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_copy_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    relevant_trait_impls_for
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_copy_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    relevant_trait_impls_for
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_copy_raw
    +
    0.003
    +
    0.3%
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    relevant_trait_impls_for
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    relevant_trait_impls_for
    +
    0.003
    +
    0.3%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_impls_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_polarity
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    predicates_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    is_freeze_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    relevant_trait_impls_for
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_impls_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_object_safe
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    super_predicates_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    associated_item_def_ids
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    predicates_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    super_predicates_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    predicates_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    associated_item_def_ids
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    predicates_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    needs_drop_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    is_copy_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_const_fn
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    adt_destructor
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    associated_item
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_freeze_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    relevant_trait_impls_for
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_impls_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_object_safe
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    predicates_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    relevant_trait_impls_for
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_impls_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_object_safe
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_polarity
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    predicates_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    relevant_trait_impls_for
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_impls_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_object_safe
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    predicates_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    relevant_trait_impls_for
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_object_safe
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_polarity
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    predicates_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    relevant_trait_impls_for
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_object_safe
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_polarity
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    predicates_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    needs_drop_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_copy_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_const_fn
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    typeck_tables_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    param_env
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    region_maps
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_copy_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    relevant_trait_impls_for
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_copy_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    relevant_trait_impls_for
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_copy_raw
    +
    0.001
    +
    0.1%
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    relevant_trait_impls_for
    +
    0.001
    +
    0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_impls_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    privacy checking
    +
    0.001
    +
    0.1%
    +
    +
    privacy_access_levels
    +
    0.001
    +
    0.1%
    +
    +
    typeck_tables_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    typeck_tables_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    predicates_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    typeck_tables_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    describe_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    predicates_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    typeck_tables_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    describe_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    describe_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    describe_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    describe_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    describe_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    describe_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    describe_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    describe_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    describe_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    associated_item
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    describe_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    describe_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    associated_item
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    describe_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    describe_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    describe_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    predicates_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    predicates_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    intrinsic checking
    +
    0.000
    +
    < 0.1%
    +
    +
    param_env
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    typeck_tables_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    param_env
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    typeck_tables_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    effect checking
    +
    0.000
    +
    < 0.1%
    +
    +
    typeck_tables_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    typeck_tables_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    match checking
    +
    0.001
    +
    < 0.1%
    +
    +
    typeck_tables_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    region_maps
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    param_env
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    liveness checking
    +
    0.001
    +
    < 0.1%
    +
    +
    typeck_tables_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    borrow checking
    +
    0.014
    +
    1.2%
    +
    +
    borrowck
    +
    0.006
    +
    0.6%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    typeck_tables_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    region_maps
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    mir_validated
    +
    0.005
    +
    0.4%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    mir_const
    +
    0.004
    +
    0.4%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    param_env
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    region_maps
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    typeck_tables_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    needs_drop_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    needs_drop_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    needs_drop_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_copy_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    needs_drop_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    needs_drop_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    needs_drop_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    needs_drop_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    param_env
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    adt_sized_constraint
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    variances_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_const_fn
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    param_env
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_const_fn
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_const_fn
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    typeck_tables_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    param_env
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_copy_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_copy_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_copy_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_copy_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_copy_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_copy_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_copy_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_copy_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_copy_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_copy_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    param_env
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_copy_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_copy_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_copy_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_copy_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_copy_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_copy_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_copy_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_copy_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_copy_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_copy_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    borrowck
    +
    0.008
    +
    0.7%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    typeck_tables_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    region_maps
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    mir_validated
    +
    0.008
    +
    0.7%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    mir_const
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    param_env
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    region_maps
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    typeck_tables_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    param_env
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    param_env
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    relevant_trait_impls_for
    +
    0.004
    +
    0.4%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_impls_of
    +
    0.004
    +
    0.4%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.003
    +
    0.2%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.003
    +
    0.2%
    +
    +
    def_span
    +
    0.003
    +
    0.2%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_object_safe
    +
    0.003
    +
    0.2%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    super_predicates_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    associated_item_def_ids
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    predicates_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    super_predicates_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    predicates_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    associated_item_def_ids
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    predicates_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    relevant_trait_impls_for
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_object_safe
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    predicates_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    relevant_trait_impls_for
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_impls_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_object_safe
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    predicates_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    relevant_trait_impls_for
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_object_safe
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    predicates_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    typeck_tables_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    param_env
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_copy_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_copy_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_copy_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    param_env
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_copy_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_copy_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_copy_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    reachability checking
    +
    0.000
    +
    < 0.1%
    +
    +
    reachable_set
    +
    0.000
    +
    < 0.1%
    +
    +
    privacy_access_levels
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    death checking
    +
    0.000
    +
    < 0.1%
    +
    +
    privacy_access_levels
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    typeck_tables_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    typeck_tables_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    unused lib feature checking
    +
    0.000
    +
    < 0.1%
    +
    +
    privacy_access_levels
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    lint checking
    +
    0.000
    +
    < 0.1%
    +
    +
    privacy_access_levels
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    param_env
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    predicates_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    param_env
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    predicates_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    param_env
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    typeck_tables_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    typeck_tables_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    typeck_tables_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    param_env
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    typeck_tables_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    resolving dependency formats
    +
    0.001
    +
    < 0.1%
    +
    +
    is_panic_runtime
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_panic_runtime
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_panic_runtime
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_panic_runtime
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_panic_runtime
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_panic_runtime
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_panic_runtime
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_panic_runtime
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_panic_runtime
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_panic_runtime
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_panic_runtime
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_panic_runtime
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_panic_runtime
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_panic_runtime
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_panic_runtime
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_panic_runtime
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_panic_runtime
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_panic_runtime
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_panic_runtime
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_panic_runtime
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_panic_runtime
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_panic_runtime
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    translation
    +
    0.891
    +
    78.1%
    +
    +
    write metadata
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    translation item collection
    +
    0.000
    +
    < 0.1%
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    predicates_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    predicates_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    optimized_mir
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    borrowck
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    mir_validated
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    param_env
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_copy_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_copy_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_copy_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_copy_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_copy_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_destructor
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_destructor
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_destructor
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_destructor
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_destructor
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_destructor
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_destructor
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_const_fn
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_of_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_exported_symbol
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_mir_available
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    trait_of_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_exported_symbol
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_exported_symbol
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_mir_available
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    optimized_mir
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_of_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    needs_drop_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    optimized_mir
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    borrowck
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    mir_validated
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    symbol_name
    +
    0.001
    +
    0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    codegen unit partitioning
    +
    0.000
    +
    < 0.1%
    +
    +
    trait_of_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    param_env
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    predicates_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_freeze_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    relevant_trait_impls_for
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_object_safe
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    predicates_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    relevant_trait_impls_for
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_impls_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_object_safe
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_polarity
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    predicates_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.001
    +
    < 0.1%
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.001
    +
    < 0.1%
    +
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_freeze_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    relevant_trait_impls_for
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_object_safe
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    predicates_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    relevant_trait_impls_for
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_impls_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_object_safe
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    predicates_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    relevant_trait_impls_for
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_impls_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_object_safe
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_polarity
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    predicates_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    relevant_trait_impls_for
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_impls_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_object_safe
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    predicates_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.001
    +
    < 0.1%
    +
    +
    param_env
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    predicates_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    adt_sized_constraint
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    adt_sized_constraint
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    param_env
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    predicates_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    adt_sized_constraint
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    param_env
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    predicates_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    adt_sized_constraint
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    param_env
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    predicates_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_freeze_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    relevant_trait_impls_for
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_object_safe
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    predicates_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    adt_sized_constraint
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_freeze_raw
    +
    0.001
    +
    < 0.1%
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    relevant_trait_impls_for
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_impls_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_object_safe
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    predicates_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    relevant_trait_impls_for
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_impls_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_object_safe
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    predicates_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    relevant_trait_impls_for
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_impls_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_object_safe
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    predicates_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    relevant_trait_impls_for
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_impls_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_object_safe
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    predicates_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    relevant_trait_impls_for
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_object_safe
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    predicates_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    relevant_trait_impls_for
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_impls_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_object_safe
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    predicates_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    relevant_trait_impls_for
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_impls_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_object_safe
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_polarity
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    predicates_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    relevant_trait_impls_for
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_impls_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_object_safe
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    predicates_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    relevant_trait_impls_for
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_impls_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_object_safe
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_polarity
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    predicates_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    relevant_trait_impls_for
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_impls_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_object_safe
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_polarity
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    predicates_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.002
    +
    0.2%
    +
    +
    param_env
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    predicates_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.002
    +
    0.2%
    +
    +
    param_env
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    predicates_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    super_predicates_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    adt_sized_constraint
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.002
    +
    0.2%
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    optimized_mir
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_freeze_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_freeze_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    adt_sized_constraint
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    predicates_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    optimized_mir
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_of_item
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_freeze_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_freeze_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_of_item
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    extern_crate
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_of_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    optimized_mir
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_freeze_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    layout_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_sized_raw
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_panic_runtime
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    is_panic_runtime
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_panic_runtime
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.001
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_panic_runtime
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.001
    +
    0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.002
    +
    0.2%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.017
    +
    1.5%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.001
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.001
    +
    0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.001
    +
    0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.004
    +
    0.4%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.004
    +
    0.4%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.003
    +
    0.2%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.001
    +
    0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.001
    +
    0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.001
    +
    0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.025
    +
    2.2%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.002
    +
    0.2%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.002
    +
    0.2%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.002
    +
    0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.003
    +
    0.3%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.003
    +
    0.3%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.003
    +
    0.3%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.003
    +
    0.3%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.002
    +
    0.2%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.002
    +
    0.2%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.002
    +
    0.2%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.003
    +
    0.3%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.003
    +
    0.3%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.004
    +
    0.3%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.004
    +
    0.3%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.004
    +
    0.4%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.004
    +
    0.4%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.004
    +
    0.4%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.004
    +
    0.4%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.004
    +
    0.4%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.004
    +
    0.3%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.004
    +
    0.3%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.002
    +
    0.2%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.001
    +
    0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.007
    +
    0.6%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.007
    +
    0.6%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.008
    +
    0.7%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.004
    +
    0.3%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.003
    +
    0.2%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.003
    +
    0.2%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.003
    +
    0.2%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.002
    +
    0.2%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.001
    +
    0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.001
    +
    0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.002
    +
    0.2%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.002
    +
    0.2%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.002
    +
    0.2%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.002
    +
    0.2%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.004
    +
    0.3%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.004
    +
    0.3%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.012
    +
    1.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.012
    +
    1.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.004
    +
    0.3%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.003
    +
    0.2%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.003
    +
    0.2%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.002
    +
    0.2%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.007
    +
    0.6%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.007
    +
    0.6%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.010
    +
    0.8%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.010
    +
    0.8%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.008
    +
    0.7%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.008
    +
    0.7%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.009
    +
    0.8%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.009
    +
    0.8%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.008
    +
    0.7%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_panic_runtime
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_panic_runtime
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.008
    +
    0.7%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.008
    +
    0.7%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.008
    +
    0.7%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_panic_runtime
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.009
    +
    0.8%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.009
    +
    0.8%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.009
    +
    0.8%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.008
    +
    0.7%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.008
    +
    0.7%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.008
    +
    0.7%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.008
    +
    0.7%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.020
    +
    1.8%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.008
    +
    0.7%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.008
    +
    0.7%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.006
    +
    0.5%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.006
    +
    0.5%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_panic_runtime
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.003
    +
    0.2%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.003
    +
    0.2%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.003
    +
    0.2%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.005
    +
    0.5%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.005
    +
    0.5%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.005
    +
    0.5%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.005
    +
    0.5%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.004
    +
    0.3%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.004
    +
    0.3%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.005
    +
    0.4%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.005
    +
    0.4%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.005
    +
    0.4%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.004
    +
    0.3%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.004
    +
    0.3%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.009
    +
    0.8%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.009
    +
    0.8%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.009
    +
    0.8%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.009
    +
    0.8%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.004
    +
    0.4%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.003
    +
    0.3%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.003
    +
    0.3%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.005
    +
    0.4%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.005
    +
    0.4%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.012
    +
    1.0%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.012
    +
    1.0%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.003
    +
    0.2%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.002
    +
    0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.002
    +
    0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.005
    +
    0.5%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.001
    +
    0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.001
    +
    0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.001
    +
    0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.001
    +
    0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.010
    +
    0.9%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.001
    +
    0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.006
    +
    0.5%
    +
    +
    def_span
    +
    0.006
    +
    0.5%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.011
    +
    0.9%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.011
    +
    0.9%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.002
    +
    0.2%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.002
    +
    0.2%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.002
    +
    0.2%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.002
    +
    0.2%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.002
    +
    0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.002
    +
    0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.003
    +
    0.3%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.005
    +
    0.5%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.005
    +
    0.5%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.006
    +
    0.5%
    +
    +
    def_span
    +
    0.006
    +
    0.5%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.002
    +
    0.2%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.002
    +
    0.2%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.004
    +
    0.4%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.004
    +
    0.4%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.002
    +
    0.2%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.002
    +
    0.2%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.002
    +
    0.2%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.002
    +
    0.2%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.002
    +
    0.2%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.006
    +
    0.5%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.005
    +
    0.5%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.003
    +
    0.3%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.003
    +
    0.2%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.002
    +
    0.2%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.002
    +
    0.2%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.002
    +
    0.2%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.002
    +
    0.2%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.003
    +
    0.3%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.003
    +
    0.3%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.003
    +
    0.3%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.003
    +
    0.3%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.001
    +
    0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.004
    +
    0.3%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.002
    +
    0.2%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.001
    +
    0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.003
    +
    0.3%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.002
    +
    0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.002
    +
    0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.002
    +
    0.2%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.004
    +
    0.3%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.004
    +
    0.4%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.002
    +
    0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.002
    +
    0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.002
    +
    0.2%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.002
    +
    0.2%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.006
    +
    0.5%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.006
    +
    0.5%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.003
    +
    0.2%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.003
    +
    0.2%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.003
    +
    0.2%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.004
    +
    0.3%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.004
    +
    0.3%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.002
    +
    0.2%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.002
    +
    0.2%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.002
    +
    0.2%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.002
    +
    0.2%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.002
    +
    0.2%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.003
    +
    0.3%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.003
    +
    0.3%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.004
    +
    0.4%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.004
    +
    0.4%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.010
    +
    0.9%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.010
    +
    0.9%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.001
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.002
    +
    0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.001
    +
    0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.005
    +
    0.5%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.003
    +
    0.3%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.002
    +
    0.2%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.007
    +
    0.6%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.003
    +
    0.3%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.003
    +
    0.2%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.003
    +
    0.2%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.002
    +
    0.2%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.002
    +
    0.2%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.008
    +
    0.7%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.008
    +
    0.7%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.002
    +
    0.2%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.002
    +
    0.2%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.002
    +
    0.2%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.003
    +
    0.3%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.003
    +
    0.3%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.003
    +
    0.3%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.001
    +
    0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.001
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.009
    +
    0.8%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.009
    +
    0.8%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.002
    +
    0.2%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.002
    +
    0.2%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.021
    +
    1.8%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.021
    +
    1.8%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.004
    +
    0.4%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.002
    +
    0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.002
    +
    0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.007
    +
    0.6%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.007
    +
    0.6%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.002
    +
    0.1%
    +
    +
    def_span
    +
    0.002
    +
    0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.003
    +
    0.2%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.003
    +
    0.2%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.002
    +
    0.2%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.004
    +
    0.3%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.004
    +
    0.3%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.004
    +
    0.3%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.001
    +
    0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.002
    +
    0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.005
    +
    0.5%
    +
    +
    def_span
    +
    0.005
    +
    0.5%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.001
    +
    0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.001
    +
    0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.001
    +
    0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.001
    +
    0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.007
    +
    0.6%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.007
    +
    0.6%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.007
    +
    0.6%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.008
    +
    0.7%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.008
    +
    0.7%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.008
    +
    0.7%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    trait_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_panic_runtime
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.008
    +
    0.7%
    +
    +
    def_span
    +
    0.008
    +
    0.7%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.005
    +
    0.4%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.024
    +
    2.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.024
    +
    2.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.006
    +
    0.5%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    is_panic_runtime
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_panic_runtime
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.001
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.006
    +
    0.5%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.006
    +
    0.5%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.002
    +
    0.2%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.002
    +
    0.2%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.002
    +
    0.2%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.002
    +
    0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    adt_def
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    is_foreign_item
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    fn_sig
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    def_symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    is_default_impl
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    type_of
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    impl_trait_ref
    +
    0.000
    +
    < 0.1%
    +
    +
    def_span
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    internalize symbols
    +
    0.000
    +
    < 0.1%
    +
    +
    generics_of
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    symbol_name
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    item_attrs
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    write allocator module
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    +
    assert dep graph
    +
    0.000
    +
    < 0.1%
    +
    +
    +
    serialize dep graph
    +
    0.079
    +
    6.9%
    +
    + + diff --git a/queries/example-0.png b/queries/example-0.png new file mode 100644 index 0000000000000000000000000000000000000000..14b46c44f7d05cec9458aa56205f4b2982c72ee1 GIT binary patch literal 106577 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

    HXvf-`OsnW@c$Oo_$|B*7TlP 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 Bng##> literal 0 HcmV?d00001 diff --git a/queries/incremental-compilation-in-detail.html b/queries/incremental-compilation-in-detail.html new file mode 100644 index 000000000..6b1787641 --- /dev/null +++ b/queries/incremental-compilation-in-detail.html @@ -0,0 +1,718 @@ + + + + + + Incremental compilation in detail - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    Incremental compilation in detail

    + +

    The incremental compilation scheme is, in essence, a surprisingly +simple extension to the overall query system. It relies on the fact that:

    +
      +
    1. queries are pure functions -- given the same inputs, a query will always +yield the same result, and
    2. +
    3. the query model structures compilation in an acyclic graph that makes +dependencies between individual computations explicit.
    4. +
    +

    This chapter will explain how we can use these properties for making things +incremental and then goes on to discuss version implementation issues.

    +

    A Basic Algorithm For Incremental Query Evaluation

    +

    As explained in the query evaluation model primer, query +invocations form a directed-acyclic graph. Here's the example from the +previous chapter again:

    +
      list_of_all_hir_items <----------------------------- type_check_crate()
    +                                                               |
    +                                                               |
    +  Hir(foo) <--- type_of(foo) <--- type_check_item(foo) <-------+
    +                                      |                        |
    +                    +-----------------+                        |
    +                    |                                          |
    +                    v                                          |
    +  Hir(bar) <--- type_of(bar) <--- type_check_item(bar) <-------+
    +
    +

    Since every access from one query to another has to go through the query +context, we can record these accesses and thus actually build this dependency +graph in memory. With dependency tracking enabled, when compilation is done, +we know which queries were invoked (the nodes of the graph) and for each +invocation, which other queries or input has gone into computing the query's +result (the edges of the graph).

    +

    Now suppose we change the source code of our program so that +HIR of bar looks different than before. Our goal is to only recompute +those queries that are actually affected by the change while re-using +the cached results of all the other queries. Given the dependency graph we can +do exactly that. For a given query invocation, the graph tells us exactly +what data has gone into computing its results, we just have to follow the +edges until we reach something that has changed. If we don't encounter +anything that has changed, we know that the query still would evaluate to +the same result we already have in our cache.

    +

    Taking the type_of(foo) invocation from above as an example, we can check +whether the cached result is still valid by following the edges to its +inputs. The only edge leads to Hir(foo), an input that has not been affected +by the change. So we know that the cached result for type_of(foo) is still +valid.

    +

    The story is a bit different for type_check_item(foo): We again walk the +edges and already know that type_of(foo) is fine. Then we get to +type_of(bar) which we have not checked yet, so we walk the edges of +type_of(bar) and encounter Hir(bar) which has changed. Consequently +the result of type_of(bar) might yield a different result than what we +have in the cache and, transitively, the result of type_check_item(foo) +might have changed too. We thus re-run type_check_item(foo), which in +turn will re-run type_of(bar), which will yield an up-to-date result +because it reads the up-to-date version of Hir(bar). Also, we re-run +type_check_item(bar) because result of type_of(bar) might have changed.

    +

    The problem with the basic algorithm: false positives

    +

    If you read the previous paragraph carefully you'll notice that it says that +type_of(bar) might have changed because one of its inputs has changed. +There's also the possibility that it might still yield exactly the same +result even though its input has changed. Consider an example with a +simple query that just computes the sign of an integer:

    +
      IntValue(x) <---- sign_of(x) <--- some_other_query(x)
    +
    +

    Let's say that IntValue(x) starts out as 1000 and then is set to 2000. +Even though IntValue(x) is different in the two cases, sign_of(x) yields +the result + in both cases.

    +

    If we follow the basic algorithm, however, some_other_query(x) would have to +(unnecessarily) be re-evaluated because it transitively depends on a changed +input. Change detection yields a "false positive" in this case because it has +to conservatively assume that some_other_query(x) might be affected by that +changed input.

    +

    Unfortunately it turns out that the actual queries in the compiler are full +of examples like this and small changes to the input often potentially affect +very large parts of the output binaries. As a consequence, we had to make the +change detection system smarter and more accurate.

    +

    Improving accuracy: the red-green algorithm

    +

    The "false positives" problem can be solved by interleaving change detection +and query re-evaluation. Instead of walking the graph all the way to the +inputs when trying to find out if some cached result is still valid, we can +check if a result has actually changed after we were forced to re-evaluate +it.

    +

    We call this algorithm the red-green algorithm because nodes +in the dependency graph are assigned the color green if we were able to prove +that its cached result is still valid and the color red if the result has +turned out to be different after re-evaluating it.

    +

    The meat of red-green change tracking is implemented in the try-mark-green +algorithm, that, you've guessed it, tries to mark a given node as green:

    +
    fn try_mark_green(tcx, current_node) -> bool {
    +
    +    // Fetch the inputs to `current_node`, i.e. get the nodes that the direct
    +    // edges from `node` lead to.
    +    let dependencies = tcx.dep_graph.get_dependencies_of(current_node);
    +
    +    // Now check all the inputs for changes
    +    for dependency in dependencies {
    +
    +        match tcx.dep_graph.get_node_color(dependency) {
    +            Green => {
    +                // This input has already been checked before and it has not
    +                // changed; so we can go on to check the next one
    +            }
    +            Red => {
    +                // We found an input that has changed. We cannot mark
    +                // `current_node` as green without re-running the
    +                // corresponding query.
    +                return false
    +            }
    +            Unknown => {
    +                // This is the first time we look at this node. Let's try
    +                // to mark it green by calling try_mark_green() recursively.
    +                if try_mark_green(tcx, dependency) {
    +                    // We successfully marked the input as green, on to the
    +                    // next.
    +                } else {
    +                    // We could *not* mark the input as green. This means we
    +                    // don't know if its value has changed. In order to find
    +                    // out, we re-run the corresponding query now!
    +                    tcx.run_query_for(dependency);
    +
    +                    // Fetch and check the node color again. Running the query
    +                    // has forced it to either red (if it yielded a different
    +                    // result than we have in the cache) or green (if it
    +                    // yielded the same result).
    +                    match tcx.dep_graph.get_node_color(dependency) {
    +                        Red => {
    +                            // The input turned out to be red, so we cannot
    +                            // mark `current_node` as green.
    +                            return false
    +                        }
    +                        Green => {
    +                            // Re-running the query paid off! The result is the
    +                            // same as before, so this particular input does
    +                            // not invalidate `current_node`.
    +                        }
    +                        Unknown => {
    +                            // There is no way a node has no color after
    +                            // re-running the query.
    +                            panic!("unreachable")
    +                        }
    +                    }
    +                }
    +            }
    +        }
    +    }
    +
    +    // If we have gotten through the entire loop, it means that all inputs
    +    // have turned out to be green. If all inputs are unchanged, it means
    +    // that the query result corresponding to `current_node` cannot have
    +    // changed either.
    +    tcx.dep_graph.mark_green(current_node);
    +
    +    true
    +}
    +
    +

    NOTE: +The actual implementation can be found in +compiler/rustc_query_system/src/dep_graph/graph.rs

    +
    +

    By using red-green marking we can avoid the devastating cumulative effect of +having false positives during change detection. Whenever a query is executed +in incremental mode, we first check if its already green. If not, we run +try_mark_green() on it. If it still isn't green after that, then we actually +invoke the query provider to re-compute the result. Re-computing the query might +then itself involve recursively invoking more queries, which can mean we come back +to the try_mark_green() algorithm for the dependencies recursively.

    +

    The real world: how persistence makes everything complicated

    +

    The sections above described the underlying algorithm for incremental +compilation but because the compiler process exits after being finished and +takes the query context with its result cache with it into oblivion, we have to +persist data to disk, so the next compilation session can make use of it. +This comes with a whole new set of implementation challenges:

    +
      +
    • The query result cache is stored to disk, so they are not readily available +for change comparison.
    • +
    • A subsequent compilation session will start off with new version of the code +that has arbitrary changes applied to it. All kinds of IDs and indices that +are generated from a global, sequential counter (e.g. NodeId, DefId, etc) +might have shifted, making the persisted results on disk not immediately +usable anymore because the same numeric IDs and indices might refer to +completely new things in the new compilation session.
    • +
    • Persisting things to disk comes at a cost, so not every tiny piece of +information should be actually cached in between compilation sessions. +Fixed-sized, plain-old-data is preferred to complex things that need to run +through an expensive (de-)serialization step.
    • +
    +

    The following sections describe how the compiler solves these issues.

    +

    A Question Of Stability: Bridging The Gap Between Compilation Sessions

    +

    As noted before, various IDs (like DefId) are generated by the compiler in a +way that depends on the contents of the source code being compiled. ID assignment +is usually deterministic, that is, if the exact same code is compiled twice, +the same things will end up with the same IDs. However, if something +changes, e.g. a function is added in the middle of a file, there is no +guarantee that anything will have the same ID as it had before.

    +

    As a consequence we cannot represent the data in our on-disk cache the same +way it is represented in memory. For example, if we just stored a piece +of type information like TyKind::FnDef(DefId, &'tcx Substs<'tcx>) (as we do +in memory) and then the contained DefId points to a different function in +a new compilation session we'd be in trouble.

    +

    The solution to this problem is to find "stable" forms for IDs which remain +valid in between compilation sessions. For the most important case, DefIds, +these are the so-called DefPaths. Each DefId has a +corresponding DefPath but in place of a numeric ID, a DefPath is based on +the path to the identified item, e.g. std::collections::HashMap. The +advantage of an ID like this is that it is not affected by unrelated changes. +For example, one can add a new function to std::collections but +std::collections::HashMap would still be std::collections::HashMap. A +DefPath is "stable" across changes made to the source code while a DefId +isn't.

    +

    There is also the DefPathHash which is just a 128-bit hash value of the +DefPath. The two contain the same information and we mostly use the +DefPathHash because it simpler to handle, being Copy and self-contained.

    +

    This principle of stable identifiers is used to make the data in the on-disk +cache resilient to source code changes. Instead of storing a DefId, we store +the DefPathHash and when we deserialize something from the cache, we map the +DefPathHash to the corresponding DefId in the current compilation session +(which is just a simple hash table lookup).

    +

    The HirId, used for identifying HIR components that don't have their own +DefId, is another such stable ID. It is (conceptually) a pair of a DefPath +and a LocalId, where the LocalId identifies something (e.g. a hir::Expr) +locally within its "owner" (e.g. a hir::Item). If the owner is moved around, +the LocalIds within it are still the same.

    +

    Checking query results for changes: HashStable and Fingerprints

    +

    In order to do red-green-marking we often need to check if the result of a +query has changed compared to the result it had during the previous +compilation session. There are two performance problems with this though:

    +
      +
    • We'd like to avoid having to load the previous result from disk just for +doing the comparison. We already computed the new result and will use that. +Also loading a result from disk will "pollute" the interners with data that +is unlikely to ever be used.
    • +
    • We don't want to store each and every result in the on-disk cache. For +example, it would be wasted effort to persist things to disk that are +already available in upstream crates.
    • +
    +

    The compiler avoids these problems by using so-called Fingerprints. Each time +a new query result is computed, the query engine will compute a 128 bit hash +value of the result. We call this hash value "the Fingerprint of the query +result". The hashing is (and has to be) done "in a stable way". This means +that whenever something is hashed that might change in between compilation +sessions (e.g. a DefId), we instead hash its stable equivalent +(e.g. the corresponding DefPath). That's what the whole HashStable +infrastructure is for. This way Fingerprints computed in two +different compilation sessions are still comparable.

    +

    The next step is to store these fingerprints along with the dependency graph. +This is cheap since fingerprints are just bytes to be copied. It's also cheap to +load the entire set of fingerprints together with the dependency graph.

    +

    Now, when red-green-marking reaches the point where it needs to check if a +result has changed, it can just compare the (already loaded) previous +fingerprint to the fingerprint of the new result.

    +

    This approach works rather well but it's not without flaws:

    +
      +
    • +

      There is a small possibility of hash collisions. That is, two different +results could have the same fingerprint and the system would erroneously +assume that the result hasn't changed, leading to a missed update.

      +

      We mitigate this risk by using a high-quality hash function and a 128 bit +wide hash value. Due to these measures the practical risk of a hash +collision is negligible.

      +
    • +
    • +

      Computing fingerprints is quite costly. It is the main reason why incremental +compilation can be slower than non-incremental compilation. We are forced to +use a good and thus expensive hash function, and we have to map things to +their stable equivalents while doing the hashing.

      +
    • +
    +

    A tale of two DepGraphs: the old and the new

    +

    The initial description of dependency tracking glosses over a few details +that quickly become a head scratcher when actually trying to implement things. +In particular it's easy to overlook that we are actually dealing with two +dependency graphs: The one we built during the previous compilation session and +the one that we are building for the current compilation session.

    +

    When a compilation session starts, the compiler loads the previous dependency +graph into memory as an immutable piece of data. Then, when a query is invoked, +it will first try to mark the corresponding node in the graph as green. This +means really that we are trying to mark the node in the previous dep-graph +as green that corresponds to the query key in the current session. How do we +do this mapping between current query key and previous DepNode? The answer +is again Fingerprints: Nodes in the dependency graph are identified by a +fingerprint of the query key. Since fingerprints are stable across compilation +sessions, computing one in the current session allows us to find a node +in the dependency graph from the previous session. If we don't find a node with +the given fingerprint, it means that the query key refers to something that +did not yet exist in the previous session.

    +

    So, having found the dep-node in the previous dependency graph, we can look +up its dependencies (i.e. also dep-nodes in the previous graph) and continue with +the rest of the try-mark-green algorithm. The next interesting thing happens +when we successfully marked the node as green. At that point we copy the node +and the edges to its dependencies from the old graph into the new graph. We +have to do this because the new dep-graph cannot acquire the +node and edges via the regular dependency tracking. The tracking system can +only record edges while actually running a query -- but running the query, +although we have the result already cached, is exactly what we want to avoid.

    +

    Once the compilation session has finished, all the unchanged parts have been +copied over from the old into the new dependency graph, while the changed parts +have been added to the new graph by the tracking system. At this point, the +new graph is serialized out to disk, alongside the query result cache, and can +act as the previous dep-graph in a subsequent compilation session.

    +

    Didn't you forget something?: cache promotion

    +

    The system described so far has a somewhat subtle property: If all inputs of a +dep-node are green then the dep-node itself can be marked as green without +computing or loading the corresponding query result. Applying this property +transitively often leads to the situation that some intermediate results are +never actually loaded from disk, as in the following example:

    +
       input(A) <-- intermediate_query(B) <-- leaf_query(C)
    +
    +

    The compiler might need the value of leaf_query(C) in order to generate some +output artifact. If it can mark leaf_query(C) as green, it will load the +result from the on-disk cache. The result of intermediate_query(B) is never +loaded though. As a consequence, when the compiler persists the new result +cache by writing all in-memory query results to disk, intermediate_query(B) +will not be in memory and thus will be missing from the new result cache.

    +

    If there subsequently is another compilation session that actually needs the +result of intermediate_query(B) it will have to be re-computed even though we +had a perfectly valid result for it in the cache just before.

    +

    In order to prevent this from happening, the compiler does something called +"cache promotion": Before emitting the new result cache it will walk all green +dep-nodes and make sure that their query result is loaded into memory. That way +the result cache doesn't unnecessarily shrink again.

    +

    Incremental compilation and the compiler backend

    +

    The compiler backend, the part involving LLVM, is using the query system but +it is not implemented in terms of queries itself. As a consequence it does not +automatically partake in dependency tracking. However, the manual integration +with the tracking system is pretty straight-forward. The compiler simply tracks +what queries get invoked when generating the initial LLVM version of each +codegen unit (CGU), which results in a dep-node for each CGU. In subsequent +compilation sessions it then tries to mark the dep-node for a CGU as green. If +it succeeds, it knows that the corresponding object and bitcode files on disk +are still valid. If it doesn't succeed, the entire CGU has to be recompiled.

    +

    This is the same approach that is used for regular queries. The main differences +are:

    +
      +
    • +

      that we cannot easily compute a fingerprint for LLVM modules (because +they are opaque C++ objects),

      +
    • +
    • +

      that the logic for dealing with cached values is rather different from +regular queries because here we have bitcode and object files instead of +serialized Rust values in the common result cache file, and

      +
    • +
    • +

      the operations around LLVM are so expensive in terms of computation time and +memory consumption that we need to have tight control over what is +executed when and what stays in memory for how long.

      +
    • +
    +

    The query system could probably be extended with general purpose mechanisms to +deal with all of the above but so far that seemed like more trouble than it +would save.

    +

    Query modifiers

    +

    The query system allows for applying modifiers to queries. These +modifiers affect certain aspects of how the system treats the query with +respect to incremental compilation:

    +
      +
    • +

      eval_always - A query with the eval_always attribute is re-executed +unconditionally during incremental compilation. I.e. the system will not +even try to mark the query's dep-node as green. This attribute has two use +cases:

      +
        +
      • +

        eval_always queries can read inputs (from files, global state, etc). +They can also produce side effects like writing to files and changing global state.

        +
      • +
      • +

        Some queries are very likely to be re-evaluated because their result +depends on the entire source code. In this case eval_always can be used +as an optimization because the system can skip recording dependencies in +the first place.

        +
      • +
      +
    • +
    • +

      no_hash - Applying no_hash to a query tells the system to not compute +the fingerprint of the query's result. This has two consequences:

      +
        +
      • +

        Not computing the fingerprint can save quite a bit of time because +fingerprinting is expensive, especially for large, complex values.

        +
      • +
      • +

        Without the fingerprint, the system has to unconditionally assume that +the result of the query has changed. As a consequence anything depending +on a no_hash query will always be re-executed.

        +
      • +
      +

      Using no_hash for a query can make sense in two circumstances:

      +
        +
      • +

        If the result of the query is very likely to change whenever one of its +inputs changes, e.g. a function like |a, b, c| -> (a * b * c). In such +a case recomputing the query will always yield a red node if one of the +inputs is red so we can spare us the trouble and default to red immediately. +A counter example would be a function like |a| -> (a == 42) where the +result does not change for most changes of a.

        +
      • +
      • +

        If the result of a query is a big, monolithic collection (e.g. index_hir) +and there are "projection queries" reading from that collection +(e.g. hir_owner). In such a case the big collection will likely fulfill the +condition above (any changed input means recomputing the whole collection) +and the results of the projection queries will be hashed anyway. If we also +hashed the collection query it would mean that we effectively hash the same +data twice: once when hashing the collection and another time when hashing all +the projection query results. no_hash allows us to avoid that redundancy +and the projection queries act as a "firewall", shielding their dependents +from the unconditionally red no_hash node.

        +
      • +
      +
    • +
    • +

      cache_on_disk_if - This attribute is what determines which query results +are persisted in the incremental compilation query result cache. The +attribute takes an expression that allows per query invocation +decisions. For example, it makes no sense to store values from upstream +crates in the cache because they are already available in the upstream +crate's metadata.

      +
    • +
    • +

      anon - This attribute makes the system use "anonymous" dep-nodes for the +given query. An anonymous dep-node is not identified by the corresponding +query key, instead its ID is computed from the IDs of its dependencies. This +allows the red-green system to do its change detection even if there is no +query key available for a given dep-node -- something which is needed for +handling trait selection because it is not based on queries.

      +
    • +
    +

    The projection query pattern

    +

    It's interesting to note that eval_always and no_hash can be used together +in the so-called "projection query" pattern. It is often the case that there is +one query that depends on the entirety of the compiler's input (e.g. the indexed HIR) +and another query that projects individual values out of this monolithic value +(e.g. a HIR item with a certain DefId). These projection queries allow for +building change propagation "firewalls" because even if the result of the +monolithic query changes (which it is very likely to do) the small projections +can still mostly be marked as green.

    +
      +------------+
    +  |            |           +---------------+           +--------+
    +  |            | <---------| projection(x) | <---------| foo(a) |
    +  |            |           +---------------+           +--------+
    +  |            |
    +  | monolithic |           +---------------+           +--------+
    +  |   query    | <---------| projection(y) | <---------| bar(b) |
    +  |            |           +---------------+           +--------+
    +  |            |
    +  |            |           +---------------+           +--------+
    +  |            | <---------| projection(z) | <---------| baz(c) |
    +  |            |           +---------------+           +--------+
    +  +------------+
    +
    +

    Let's assume that the result monolithic_query changes so that also the result +of projection(x) has changed, i.e. both their dep-nodes are being marked as +red. As a consequence foo(a) needs to be re-executed; but bar(b) and +baz(c) can be marked as green. However, if foo, bar, and baz would have +directly depended on monolithic_query then all of them would have had to be +re-evaluated.

    +

    This pattern works even without eval_always and no_hash but the two +modifiers can be used to avoid unnecessary overhead. If the monolithic query +is likely to change at any minor modification of the compiler's input it makes +sense to mark it as eval_always, thus getting rid of its dependency tracking +cost. And it always makes sense to mark the monolithic query as no_hash +because we have the projections to take care of keeping things green as much +as possible.

    +

    Shortcomings of the current system

    +

    There are many things that still can be improved.

    +

    Incrementality of on-disk data structures

    +

    The current system is not able to update on-disk caches and the dependency graph +in-place. Instead it has to rewrite each file entirely in each compilation +session. The overhead of doing so is a few percent of total compilation time.

    +

    Unnecessary data dependencies

    +

    Data structures used as query results could be factored in a way that removes +edges from the dependency graph. Especially "span" information is very volatile, +so including it in query result will increase the chance that the result won't +be reusable. See https://github.com/rust-lang/rust/issues/47389 for more +information.

    + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + + diff --git a/queries/incremental-compilation.html b/queries/incremental-compilation.html new file mode 100644 index 000000000..6ef219def --- /dev/null +++ b/queries/incremental-compilation.html @@ -0,0 +1,385 @@ + + + + + + Incremental compilation - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    Incremental compilation

    + +

    The incremental compilation scheme is, in essence, a surprisingly +simple extension to the overall query system. We'll start by describing +a slightly simplified variant of the real thing – the "basic algorithm" – +and then describe some possible improvements.

    +

    The basic algorithm

    +

    The basic algorithm is +called the red-green algorithm1. The high-level idea is +that, after each run of the compiler, we will save the results of all +the queries that we do, as well as the query DAG. The +query DAG is a DAG that indexes which queries executed which +other queries. So, for example, there would be an edge from a query Q1 +to another query Q2 if computing Q1 required computing Q2 (note that +because queries cannot depend on themselves, this results in a DAG and +not a general graph).

    +
    +

    NOTE: You might think of a query as simply the definition of a query. +A thing that you can invoke, a bit like a function, +and which either returns a cached result or actually executes the code.

    +

    If that's the way you think about queries, +it's good to know that in the following text, queries will be said to have colours. +Keep in mind though, that here the word query also refers to a certain invocation of +the query for a certain input. As you will read later, queries are fingerprinted based +on their arguments. The result of a query might change when we give it one argument +and be coloured red, while it stays the same for another argument and is thus green.

    +

    In short, the word query is here not just used to mean the definition of a query, +but also for a specific instance of that query with given arguments.

    +
    +

    On the next run of the compiler, then, we can sometimes reuse these +query results to avoid re-executing a query. We do this by assigning +every query a color:

    +
      +
    • If a query is colored red, that means that its result during +this compilation has changed from the previous compilation.
    • +
    • If a query is colored green, that means that its result is +the same as the previous compilation.
    • +
    +

    There are two key insights here:

    +
      +
    • First, if all the inputs to query Q are colored green, then the +query Q must result in the same value as last time and hence +need not be re-executed (or else the compiler is not deterministic).
    • +
    • Second, even if some inputs to a query changes, it may be that it +still produces the same result as the previous compilation. In +particular, the query may only use part of its input. +
        +
      • Therefore, after executing a query, we always check whether it +produced the same result as the previous time. If it did, we +can still mark the query as green, and hence avoid re-executing +dependent queries.
      • +
      +
    • +
    +

    The try-mark-green algorithm

    +

    At the core of incremental compilation is an algorithm called +"try-mark-green". It has the job of determining the color of a given +query Q (which must not have yet been executed). In cases where Q has +red inputs, determining Q's color may involve re-executing Q so that +we can compare its output, but if all of Q's inputs are green, then we +can conclude that Q must be green without re-executing it or inspecting +its value at all. In the compiler, this allows us to avoid +deserializing the result from disk when we don't need it, and in fact +enables us to sometimes skip serializing the result as well +(see the refinements section below).

    +

    Try-mark-green works as follows:

    +
      +
    • First check if the query Q was executed during the previous compilation. +
        +
      • If not, we can just re-execute the query as normal, and assign it the +color of red.
      • +
      +
    • +
    • If yes, then load the 'dependent queries' of Q.
    • +
    • If there is a saved result, then we load the reads(Q) vector from the +query DAG. The "reads" is the set of queries that Q executed during +its execution. +
        +
      • For each query R in reads(Q), we recursively demand the color +of R using try-mark-green. +
          +
        • Note: it is important that we visit each node in reads(Q) in same order +as they occurred in the original compilation. See the section on the +query DAG below.
        • +
        • If any of the nodes in reads(Q) wind up colored red, then Q is +dirty. +
            +
          • We re-execute Q and compare the hash of its result to the hash of the +result from the previous compilation.
          • +
          • If the hash has not changed, we can mark Q as green and return.
          • +
          +
        • +
        • Otherwise, all of the nodes in reads(Q) must be green. In that +case, we can color Q as green and return.
        • +
        +
      • +
      +
    • +
    +

    +

    The query DAG

    +

    The query DAG code is stored in +compiler/rustc_middle/src/dep_graph. Construction of the DAG is done +by instrumenting the query execution.

    +

    One key point is that the query DAG also tracks ordering; that is, for +each query Q, we not only track the queries that Q reads, we track the +order in which they were read. This allows try-mark-green to walk +those queries back in the same order. This is important because once a +subquery comes back as red, we can no longer be sure that Q will continue +along the same path as before. That is, imagine a query like this:

    +
    fn main_query(tcx) {
    +    if tcx.subquery1() {
    +        tcx.subquery2()
    +    } else {
    +        tcx.subquery3()
    +    }
    +}
    +

    Now imagine that in the first compilation, main_query starts by +executing subquery1, and this returns true. In that case, the next +query main_query executes will be subquery2, and subquery3 will +not be executed at all.

    +

    But now imagine that in the next compilation, the input has +changed such that subquery1 returns false. In this case, subquery2 +would never execute. If try-mark-green were to visit reads(main_query) out +of order, however, it might visit subquery2 before subquery1, and hence +execute it. +This can lead to ICEs and other problems in the compiler.

    +

    Improvements to the basic algorithm

    +

    In the description of the basic algorithm, we said that at the end of +compilation we would save the results of all the queries that were +performed. In practice, this can be quite wasteful – many of those +results are very cheap to recompute, and serializing and deserializing +them is not a particular win. In practice, what we would do is to save +the hashes of all the subqueries that we performed. Then, in select cases, +we also save the results.

    +

    This is why the incremental algorithm separates computing the +color of a node, which often does not require its value, from +computing the result of a node. Computing the result is done via a simple +algorithm like so:

    +
      +
    • Check if a saved result for Q is available. If so, compute the color of Q. +If Q is green, deserialize and return the saved result.
    • +
    • Otherwise, execute Q. +
        +
      • We can then compare the hash of the result and color Q as green if +it did not change.
      • +
      +
    • +
    +

    Resources

    +

    The initial design document can be found here, which expands +on the memoization details, provides more high-level overview and motivation +for this system.

    +

    Footnotes

    +
    +
    1. +

      I have long wanted to rename it to the Salsa algorithm, but it never caught on. -@nikomatsakis

      +
    2. +
    +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + + diff --git a/queries/query-evaluation-model-in-detail.html b/queries/query-evaluation-model-in-detail.html new file mode 100644 index 000000000..9df95c2af --- /dev/null +++ b/queries/query-evaluation-model-in-detail.html @@ -0,0 +1,387 @@ + + + + + + The Query Evaluation Model in detail - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    The Query Evaluation Model in detail

    + +

    This chapter provides a deeper dive into the abstract model queries are built on. +It does not go into implementation details but tries to explain +the underlying logic. The examples here, therefore, have been stripped down and +simplified and don't directly reflect the compilers internal APIs.

    +

    What is a query?

    +

    Abstractly we view the compiler's knowledge about a given crate as a "database" +and queries are the way of asking the compiler questions about it, i.e. +we "query" the compiler's "database" for facts.

    +

    However, there's something special to this compiler database: It starts out empty +and is filled on-demand when queries are executed. Consequently, a query must +know how to compute its result if the database does not contain it yet. For +doing so, it can access other queries and certain input values that the database +is pre-filled with on creation.

    +

    A query thus consists of the following things:

    +
      +
    • A name that identifies the query
    • +
    • A "key" that specifies what we want to look up
    • +
    • A result type that specifies what kind of result it yields
    • +
    • A "provider" which is a function that specifies how the result is to be +computed if it isn't already present in the database.
    • +
    +

    As an example, the name of the type_of query is type_of, its query key is a +DefId identifying the item we want to know the type of, the result type is +Ty<'tcx>, and the provider is a function that, given the query key and access +to the rest of the database, can compute the type of the item identified by the +key.

    +

    So in some sense a query is just a function that maps the query key to the +corresponding result. However, we have to apply some restrictions in order for +this to be sound:

    +
      +
    • The key and result must be immutable values.
    • +
    • The provider function must be a pure function in the sense that for the same +key it must always yield the same result.
    • +
    • The only parameters a provider function takes are the key and a reference to +the "query context" (which provides access to the rest of the "database").
    • +
    +

    The database is built up lazily by invoking queries. The query providers will +invoke other queries, for which the result is either already cached or computed +by calling another query provider. These query provider invocations +conceptually form a directed acyclic graph (DAG) at the leaves of which are +input values that are already known when the query context is created.

    +

    Caching/Memoization

    +

    Results of query invocations are "memoized" which means that the query context +will cache the result in an internal table and, when the query is invoked with +the same query key again, will return the result from the cache instead of +running the provider again.

    +

    This caching is crucial for making the query engine efficient. Without +memoization the system would still be sound (that is, it would yield the same +results) but the same computations would be done over and over again.

    +

    Memoization is one of the main reasons why query providers have to be pure +functions. If calling a provider function could yield different results for +each invocation (because it accesses some global mutable state) then we could +not memoize the result.

    +

    Input data

    +

    When the query context is created, it is still empty: No queries have been +executed, no results are cached. But the context already provides access to +"input" data, i.e. pieces of immutable data that were computed before the +context was created and that queries can access to do their computations.

    +

    As of January 2021, this input data consists mainly of +the HIR map, upstream crate metadata, and the command-line options the compiler +was invoked with; but in the future inputs will just consist of command-line +options and a list of source files -- the HIR map will itself be provided by a +query which processes these source files.

    +

    Without inputs, queries would live in a void without anything to compute their +result from (remember, query providers only have access to other queries and +the context but not any other outside state or information).

    +

    For a query provider, input data and results of other queries look exactly the +same: It just tells the context "give me the value of X". Because input data +is immutable, the provider can rely on it being the same across +different query invocations, just as is the case for query results.

    +

    An example execution trace of some queries

    +

    How does this DAG of query invocations come into existence? At some point +the compiler driver will create the, as yet empty, query context. It will then, +from outside of the query system, invoke the queries it needs to perform its +task. This looks something like the following:

    +
    fn compile_crate() {
    +    let cli_options = ...;
    +    let hir_map = ...;
    +
    +    // Create the query context `tcx`
    +    let tcx = TyCtxt::new(cli_options, hir_map);
    +
    +    // Do type checking by invoking the type check query
    +    tcx.type_check_crate();
    +}
    +

    The type_check_crate query provider would look something like the following:

    +
    fn type_check_crate_provider(tcx, _key: ()) {
    +    let list_of_hir_items = tcx.hir_map.list_of_items();
    +
    +    for item_def_id in list_of_hir_items {
    +        tcx.type_check_item(item_def_id);
    +    }
    +}
    +

    We see that the type_check_crate query accesses input data +(tcx.hir_map.list_of_items()) and invokes other queries +(type_check_item). The type_check_item +invocations will themselves access input data and/or invoke other queries, +so that in the end the DAG of query invocations will be built up backwards +from the node that was initially executed:

    +
             (2)                                                 (1)
    +  list_of_all_hir_items <----------------------------- type_check_crate()
    +                                                               |
    +    (5)             (4)                  (3)                   |
    +  Hir(foo) <--- type_of(foo) <--- type_check_item(foo) <-------+
    +                                      |                        |
    +                    +-----------------+                        |
    +                    |                                          |
    +    (7)             v  (6)                  (8)                |
    +  Hir(bar) <--- type_of(bar) <--- type_check_item(bar) <-------+
    +
    +// (x) denotes invocation order
    +
    +

    We also see that often a query result can be read from the cache: +type_of(bar) was computed for type_check_item(foo) so when +type_check_item(bar) needs it, it is already in the cache.

    +

    Query results stay cached in the query context as long as the context lives. +So if the compiler driver invoked another query later on, the above graph +would still exist and already executed queries would not have to be re-done.

    +

    Cycles

    +

    Earlier we stated that query invocations form a DAG. However, it would be easy +to form a cyclic graph by, for example, having a query provider like the +following:

    +
    fn cyclic_query_provider(tcx, key) -> u32 {
    +  // Invoke the same query with the same key again
    +  tcx.cyclic_query(key)
    +}
    +

    Since query providers are regular functions, this would behave much as expected: +Evaluation would get stuck in an infinite recursion. A query like this would not +be very useful either. However, sometimes certain kinds of invalid user input +can result in queries being called in a cyclic way. The query engine includes +a check for cyclic invocations of queries with the same input arguments. +And, because cycles are an irrecoverable error, will abort execution with a +"cycle error" message that tries to be human readable.

    +

    At some point the compiler had a notion of "cycle recovery", that is, one could +"try" to execute a query and if it ended up causing a cycle, proceed in some +other fashion. However, this was later removed because it is not entirely +clear what the theoretical consequences of this are, especially regarding +incremental compilation.

    +

    "Steal" Queries

    +

    Some queries have their result wrapped in a Steal<T> struct. These queries +behave exactly the same as regular with one exception: Their result is expected +to be "stolen" out of the cache at some point, meaning some other part of the +program is taking ownership of it and the result cannot be accessed anymore.

    +

    This stealing mechanism exists purely as a performance optimization because some +result values are too costly to clone (e.g. the MIR of a function). It seems +like result stealing would violate the condition that query results must be +immutable (after all we are moving the result value out of the cache) but it is +OK as long as the mutation is not observable. This is achieved by two things:

    +
      +
    • Before a result is stolen, we make sure to eagerly run all queries that +might ever need to read that result. This has to be done manually by calling +those queries.
    • +
    • Whenever a query tries to access a stolen result, we make an ICE +(Internal Compiler Error) so that such a condition cannot go unnoticed.
    • +
    +

    This is not an ideal setup because of the manual intervention needed, so it +should be used sparingly and only when it is well known which queries might +access a given result. In practice, however, stealing has not turned out to be +much of a maintenance burden.

    +

    To summarize: "Steal queries" break some of the rules in a controlled way. +There are checks in place that make sure that nothing can go silently wrong.

    + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + + diff --git a/queries/salsa.html b/queries/salsa.html new file mode 100644 index 000000000..7a4a928c3 --- /dev/null +++ b/queries/salsa.html @@ -0,0 +1,398 @@ + + + + + + Salsa - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    How Salsa works

    + +

    This chapter is based on the explanation given by Niko Matsakis in this +video about +Salsa. To find out more you may +want to watch Salsa In More +Depth, also by Niko +Matsakis.

    +
    +

    As of November 2022, although Salsa is inspired by (among +other things) rustc's query system, it is not used directly in rustc. It +is used in chalk, an implementation of Rust's trait system, and +extensively in rust-analyzer, the official implementation of the language +server protocol for Rust, but there are no medium or long-term concrete +plans to integrate it into the compiler.

    +
    +

    What is Salsa?

    +

    Salsa is a library for incremental recomputation. This means it allows reusing +computations that were already done in the past to increase the efficiency +of future computations.

    +

    The objectives of Salsa are:

    +
      +
    • Provide that functionality in an automatic way, so reusing old computations +is done automatically by the library.
    • +
    • Doing so in a "sound", or "correct", way, therefore leading to the same +results as if it had been done from scratch.
    • +
    +

    Salsa's actual model is much richer, allowing many kinds of inputs and many different outputs. +For example, integrating Salsa with an IDE could mean that +the inputs could be manifests (Cargo.toml, rust-toolchain.toml), entire +source files (foo.rs), snippets and so on. The outputs of such an integration +could range from a binary executable, to lints, types (for example, if a user +selects a certain variable and wishes to see its type), completions, etc.

    +

    How does it work?

    +

    The first thing that Salsa has to do is identify the "base inputs" that +are not something computed but given as input.

    +

    Then Salsa has to also identify intermediate, "derived" values, which are +something that the library produces, but, for each derived value there's a +"pure" function that computes the derived value.

    +

    For example, there might be a function ast(x: Path) -> AST. The produced +Abstract Syntax Tree (AST) isn't a final value, it's an intermediate value +that the library would use for the computation.

    +

    This means that when you try to compute with the library, Salsa is going to +compute various derived values, and eventually read the input and produce the +result for the asked computation.

    +

    In the course of computing, Salsa tracks which inputs were accessed and which +values are derived. This information is used to determine what's going to +happen when the inputs change: are the derived values still valid?

    +

    This doesn't necessarily mean that each computation downstream from the input +is going to be checked, which could be costly. Salsa only needs to check each +downstream computation until it finds one that isn't changed. At that point, it +won't check other derived computations since they wouldn't need to change.

    +

    It's helpful to think about this as a graph with nodes. Each derived value +has a dependency on other values, which could themselves be either base or +derived. Base values don't have a dependency.

    +
    I <- A <- C ...
    +          |
    +J <- B <--+
    +
    +

    When an input I changes, the derived value A could change. The derived +value B, which does not depend on I, A, or any value derived from A or +I, is not subject to change. Therefore, Salsa can reuse the computation done +for B in the past, without having to compute it again.

    +

    The computation could also terminate early. Keeping the same graph as before, +say that input I has changed in some way (and input J hasn't), but when +computing A again, it's found that A hasn't changed from the previous +computation. This leads to an "early termination", because there's no need to +check if C needs to change, since both C direct inputs, A and B, +haven't changed.

    +

    Key Salsa concepts

    +

    Query

    +

    A query is some value that Salsa can access in the course of computation. Each +query can have a number of keys (from 0 to many), and all queries have a +result, akin to functions. 0-key queries are called "input" queries.

    +

    Database

    +

    The database is basically the context for the entire computation, it's meant to +store Salsa's internal state, all intermediate values for each query, and +anything else that the computation might need. The database must know all the +queries the library is going to do before it can be built, but they don't need +to be specified in the same place.

    +

    After the database is formed, it can be accessed with queries that are very +similar to functions. Since each query's result is stored in the database, when +a query is invoked N-times, it will return N-cloned results, without having +to recompute the query (unless the input has changed in such a way that it +warrants recomputation).

    +

    For each input query (0-key), a "set" method is generated, allowing the user to +change the output of such query, and trigger previous memoized values to be +potentially invalidated.

    +

    Query Groups

    +

    A query group is a set of queries which have been defined together as a unit. +The database is formed by combining query groups. Query groups are akin to +"Salsa modules".

    +

    A set of queries in a query group are just a set of methods in a trait.

    +

    To create a query group a trait annotated with a specific attribute +(#[salsa::query_group(...)]) has to be created.

    +

    An argument must also be provided to said attribute as it will be used by Salsa +to create a struct to be used later when the database is created.

    +

    Example input query group:

    +
    /// This attribute will process this tree, produce this tree as output, and produce
    +/// a bunch of intermediate stuff that Salsa also uses. One of these things is a
    +/// "StorageStruct", whose name we have specified in the attribute.
    +///
    +/// This query group is a bunch of **input** queries, that do not rely on any
    +/// derived input.
    +#[salsa::query_group(InputsStorage)]
    +pub trait Inputs {
    +    /// This attribute (`#[salsa::input]`) indicates that this query is a base
    +    /// input, therefore `set_manifest` is going to be auto-generated
    +    #[salsa::input]
    +    fn manifest(&self) -> Manifest;
    +
    +    #[salsa::input]
    +    fn source_text(&self, name: String) -> String;
    +}
    +

    To create a derived query group, one must specify which other query groups +this one depends on by specifying them as supertraits, as seen in the following +example:

    +
    /// This query group is going to contain queries that depend on derived values.
    +/// A query group can access another query group's queries by specifying the
    +/// dependency as a supertrait. Query groups can be stacked as much as needed using
    +/// that pattern.
    +#[salsa::query_group(ParserStorage)]
    +pub trait Parser: Inputs {
    +    /// This query `ast` is not an input query, it's a derived query this means
    +    /// that a definition is necessary.
    +    fn ast(&self, name: String) -> String;
    +}
    +

    When creating a derived query the implementation of said query must be defined +outside the trait. The definition must take a database parameter as an impl Trait (or dyn Trait), where trait is the query group that the definition +belongs to, in addition to the other keys.

    +
    /// This is going to be the definition of the `ast` query in the `Parser` trait.
    +/// So, when the query `ast` is invoked, and it needs to be recomputed, Salsa is
    +/// going to call this function and it's going to give it the database as `impl
    +/// Parser`. The function doesn't need to be aware of all the queries of all the
    +/// query groups
    +fn ast(db: &impl Parser, name: String) -> String {
    +    //! Note, `impl Parser` is used here but `dyn Parser` works just as well
    +    /* code */
    +    ///By passing an `impl Parser`, this is allowed
    +    let source_text = db.input_file(name);
    +    /* do the actual parsing */
    +    return ast;
    +}
    +

    Eventually, after all the query groups have been defined, the database can be +created by declaring a struct.

    +

    To specify which query groups are going to be part of the database an attribute +(#[salsa::database(...)]) must be added. The argument of said attribute is a +list of identifiers, specifying the query groups storages.

    +
    ///This attribute specifies which query groups are going to be in the database
    +#[salsa::database(InputsStorage, ParserStorage)]
    +#[derive(Default)] //optional!
    +struct MyDatabase {
    +    ///You also need this one field
    +    runtime : salsa::Runtime<MyDatabase>,
    +}
    +///And this trait has to be implemented
    +impl salsa::Database for MyDatabase {
    +    fn salsa_runtime(&self) -> &salsa::Runtime<MyDatabase> {
    +        &self.runtime
    +    }
    +}
    +

    Example usage:

    +
    fn main() {
    +    let db = MyDatabase::default();
    +    db.set_manifest(...);
    +    db.set_source_text(...);
    +    loop {
    +        db.ast(...); //will reuse results
    +        db.set_source_text(...);
    +    }
    +}
    + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + + diff --git a/query.html b/query.html new file mode 100644 index 000000000..cfc64578d --- /dev/null +++ b/query.html @@ -0,0 +1,430 @@ + + + + + + Queries: demand-driven compilation - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    Queries: demand-driven compilation

    + +

    As described in Overview of the compiler, the Rust compiler +is still (as of July 2021) transitioning from a +traditional "pass-based" setup to a "demand-driven" system. The compiler query +system is the key to rustc's demand-driven organization. +The idea is pretty simple. Instead of entirely independent passes +(parsing, type-checking, etc.), a set of function-like queries +compute information about the input source. For example, +there is a query called type_of that, given the DefId of +some item, will compute the type of that item and return it to you.

    +

    Query execution is memoized. The first time you invoke a +query, it will go do the computation, but the next time, the result is +returned from a hashtable. Moreover, query execution fits nicely into +incremental computation; the idea is roughly that, when you invoke a +query, the result may be returned to you by loading stored data +from disk.1

    +

    Eventually, we want the entire compiler +control-flow to be query driven. There will effectively be one +top-level query (compile) that will run compilation on a crate; this +will in turn demand information about that crate, starting from the +end. For example:

    +
      +
    • The compile query might demand to get a list of codegen-units +(i.e. modules that need to be compiled by LLVM).
    • +
    • But computing the list of codegen-units would invoke some subquery +that returns the list of all modules defined in the Rust source.
    • +
    • That query in turn would invoke something asking for the HIR.
    • +
    • This keeps going further and further back until we wind up doing the +actual parsing.
    • +
    +

    Although this vision is not fully realized, large sections of the +compiler (for example, generating MIR) currently work exactly like this.

    +

    Invoking queries

    +

    Invoking a query is simple. The TyCtxt ("type context") struct offers a method +for each defined query. For example, to invoke the type_of +query, you would just do this:

    +
    let ty = tcx.type_of(some_def_id);
    +

    How the compiler executes a query

    +

    So you may be wondering what happens when you invoke a query +method. The answer is that, for each query, the compiler maintains a +cache – if your query has already been executed, then, the answer is +simple: we clone the return value out of the cache and return it +(therefore, you should try to ensure that the return types of queries +are cheaply cloneable; insert an Rc if necessary).

    +

    Providers

    +

    If, however, the query is not in the cache, then the compiler will +call the corresponding provider function. A provider is a function +implemented in a specific module and manually registered into the +Providers struct during compiler initialization. +The macro system generates the Providers struct, +which acts as a function table for all query implementations, where each +field is a function pointer to the actual provider.

    +

    Note: The Providers struct is generated by macros and acts as a function table for all query implementations. +It is not a Rust trait, but a plain struct with function pointer fields.

    +

    Providers are defined per-crate. The compiler maintains, +internally, a table of providers for every crate, at least +conceptually. Right now, there are really two sets: the providers for +queries about the local crate (that is, the one being compiled) +and providers for queries about external crates (that is, +dependencies of the local crate). Note that what determines the crate +that a query is targeting is not the kind of query, but the key. +For example, when you invoke tcx.type_of(def_id), that could be a +local query or an external query, depending on what crate the def_id +is referring to (see the self::keys::Key trait for more +information on how that works).

    +

    Providers always have the same signature:

    +
    fn provider<'tcx>(
    +    tcx: TyCtxt<'tcx>,
    +    key: QUERY_KEY,
    +) -> QUERY_RESULT {
    +    ...
    +}
    +

    Providers take two arguments: the tcx and the query key. +They return the result of the query.

    +

    N.B. Most of the rustc_* crates only provide local +providers. Almost all extern providers wind up going through the +rustc_metadata crate, which loads the information +from the crate metadata. But in some cases there are crates that +provide queries for both local and external crates, in which case +they define both a provide and a provide_extern function, through +wasm_import_module_map, that rustc_driver can invoke.

    +

    How providers are set up

    +

    When the tcx is created, it is given the providers by its creator using +the Providers struct. This struct is generated by +the macros here, but it is basically a big list of function pointers:

    +
    struct Providers {
    +    type_of: for<'tcx> fn(TyCtxt<'tcx>, DefId) -> Ty<'tcx>,
    +    // ... one field for each query
    +}
    +

    How are providers registered?

    +

    The Providers struct is filled in during compiler initialization, mainly by the rustc_driver crate.
    +But the actual provider functions are implemented in various rustc_* crates (like rustc_middle, rustc_hir_analysis, etc).

    +

    To register providers, each crate exposes a provide function that looks like this:

    +
    pub fn provide(providers: &mut Providers) {
    +    *providers = Providers {
    +        type_of,
    +        // ... add more providers here
    +        ..*providers
    +    };
    +}
    +
      +
    • This function takes a mutable reference to the Providers struct and sets the fields to point to the correct provider functions.
    • +
    • You can also assign fields individually, e.g. providers.type_of = type_of;.
    • +
    +

    Adding a new provider

    +

    Suppose you want to add a new query called fubar. You would:

    +
      +
    1. Implement the provider function: +
      fn fubar<'tcx>(tcx: TyCtxt<'tcx>, key: DefId) -> Fubar<'tcx> { ... }
      +
    2. +
    3. Register it in the provide function: +
      pub fn provide(providers: &mut Providers) {
      +    *providers = Providers {
      +        fubar,
      +        ..*providers
      +    };
      +}
      +
    4. +
    +
    +

    Adding a new query

    +

    How do you add a new query? +Defining a query takes place in two steps:

    +
      +
    1. Declare the query name, its arguments and description.
    2. +
    3. Supply query providers where needed.
    4. +
    +

    To declare the query name and arguments, you simply add an entry to +the big macro invocation in compiler/rustc_middle/src/query/mod.rs. +Then you need to add a documentation comment to it with some internal description. +Then, provide the desc attribute which contains a user-facing description of the query. +The desc attribute is shown to the user in query cycles.

    +

    This looks something like:

    +
    rustc_queries! {
    +    /// Records the type of every item.
    +    query type_of(key: DefId) -> Ty<'tcx> {
    +        cache_on_disk_if { key.is_local() }
    +        desc { |tcx| "computing the type of `{}`", tcx.def_path_str(key) }
    +    }
    +    ...
    +}
    +

    A query definition has the following form:

    +
    query type_of(key: DefId) -> Ty<'tcx> { ... }
    +^^^^^ ^^^^^^^      ^^^^^     ^^^^^^^^   ^^^
    +|     |            |         |          |
    +|     |            |         |          query modifiers
    +|     |            |         result type
    +|     |            query key type
    +|     name of query
    +query keyword
    +

    Let's go over these elements one by one:

    +
      +
    • Query keyword: indicates a start of a query definition.
    • +
    • Name of query: the name of the query method +(tcx.type_of(..)). Also used as the name of a struct +(ty::queries::type_of) that will be generated to represent +this query.
    • +
    • Query key type: the type of the argument to this query. +This type must implement the ty::query::keys::Key trait, which +defines (for example) how to map it to a crate, and so forth.
    • +
    • Result type of query: the type produced by this query. This type +should (a) not use RefCell or other interior mutability and (b) be +cheaply cloneable. Interning or using Rc or Arc is recommended for +non-trivial data types.2
    • +
    • Query modifiers: various flags and options that customize how the +query is processed (mostly with respect to incremental compilation).
    • +
    +

    So, to add a query:

    +
      +
    • Add an entry to rustc_queries! using the format above.
    • +
    • Link the provider by modifying the appropriate provide method; +or add a new one if needed and ensure that rustc_driver is invoking it.
    • +
    + +

    Related design ideas, and tracking issues:

    + +

    More discussion and issues:

    + +
    +
    1. +

      The Incremental compilation in detail chapter gives a more +in-depth description of what queries are and how they work. +If you intend to write a query of your own, this is a good read.

      +
    2. +
    3. +

      The one exception to those rules is the ty::steal::Steal type, +which is used to cheaply modify MIR in place. See the definition +of Steal for more details. New uses of Steal should not be +added without alerting @rust-lang/compiler.

      +
    4. +
    +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + + diff --git a/return-position-impl-trait-in-trait.html b/return-position-impl-trait-in-trait.html new file mode 100644 index 000000000..b05de7582 --- /dev/null +++ b/return-position-impl-trait-in-trait.html @@ -0,0 +1,583 @@ + + + + + + Return Position Impl Trait In Trait - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    Return Position Impl Trait In Trait

    +

    Return-position impl trait in trait (RPITIT) is conceptually (and as of +#112988, literally) sugar that turns RPITs in trait methods into +generic associated types (GATs) without the user having to define that +GAT either on the trait side or impl side.

    +

    RPITIT was originally implemented in #101224, which added support for +async fn in trait (AFIT), since the implementation for RPITIT came for +free as a part of implementing AFIT which had been RFC'd previously. It +was then RFC'd independently in RFC 3425, which was recently approved +by T-lang.

    +

    How does it work?

    +

    This doc is ordered mostly via the compilation pipeline:

    +
      +
    1. AST lowering (AST -> HIR)
    2. +
    3. HIR ty lowering (HIR -> rustc_middle::ty data types)
    4. +
    5. typeck
    6. +
    +

    AST lowering

    +

    AST lowering for RPITITs is almost the same as lowering RPITs. We +still lower them as +hir::ItemKind::OpaqueTy. +The two differences are that:

    +

    We record in_trait for the opaque. This will signify that the opaque +is an RPITIT for HIR ty lowering, diagnostics that deal with HIR, etc.

    +

    We record lifetime_mappings for the opaque type, described below.

    +

    Aside: Opaque lifetime duplication

    +

    All opaques (not just RPITITs) end up duplicating their captured +lifetimes into new lifetime parameters local to the opaque. The main +reason we do this is because RPITs need to be able to "reify"1 any +captured late-bound arguments, or make them into early-bound ones. This +is so they can be used as generic args for the opaque, and later to +instantiate hidden types. Since we don't know which lifetimes are early- +or late-bound during AST lowering, we just do this for all lifetimes.

    +

    The main addition for RPITITs is that during lowering we track the +relationship between the captured lifetimes and the corresponding +duplicated lifetimes in an additional field, +OpaqueTy::lifetime_mapping. +We use this lifetime mapping later on in predicates_of to install +bounds that enforce equality between these duplicated lifetimes and +their source lifetimes in order to properly typecheck these GATs, which +will be discussed below.

    +
    Note
    +

    It may be better if we were able to lower without duplicates and for +that I think we would need to stop distinguishing between early and late +bound lifetimes. So we would need a solution like Account for +late-bound lifetimes in generics +#103448 and then also a +PR similar to Inherit function lifetimes for impl-trait +#103449.

    +

    HIR ty lowering

    +

    The main change to HIR ty lowering is that we lower hir::TyKind::OpaqueDef +for an RPITIT to a projection instead of an opaque, using a newly +synthesized def-id for a new associated type in the trait. We'll +describe how exactly we get this def-id in the next section.

    +

    This means that any time we call lower_ty on the RPITIT, we end up +getting a projection back instead of an opaque. This projection can then +be normalized to the right value -- either the original opaque if we're +in the trait, or the inferred type of the RPITIT if we're in an impl.

    +

    Lowering to synthetic associated types

    +

    Using query feeding, we synthesize new associated types on both the +trait side and impl side for RPITITs that show up in methods.

    +
    Lowering RPITITs in traits
    +

    When tcx.associated_item_def_ids(trait_def_id) is called on a trait to +gather all of the trait's associated types, the query previously just +returned the def-ids of the HIR items that are children of the trait. +After #112988, additionally, for each method in the trait, we add the +def-ids returned by +tcx.associated_types_for_impl_traits_in_associated_fn(trait_method_def_id), +which walks through each trait method, gathers any RPITITs that show up +in the signature, and then calls +associated_type_for_impl_trait_in_trait for each RPITIT, which +synthesizes a new associated type.

    +
    Lowering RPITITs in impls
    +

    Similarly, along with the impl's HIR items, for each impl method, we +additionally add all of the +associated_types_for_impl_traits_in_associated_fn for the impl method. +This calls associated_type_for_impl_trait_in_impl, which will +synthesize an associated type definition for each RPITIT that comes from +the corresponding trait method.

    +

    Synthesizing new associated types

    +

    We use query feeding +(TyCtxtAt::create_def) +to synthesize a new def-id for the synthetic GATs for each RPITIT.

    +

    Locally, most of rustc's queries match on the HIR of an item to compute +their values. Since the RPITIT doesn't really have HIR associated with +it, or at least not HIR that corresponds to an associated type, we must +compute many queries eagerly and +feed them, like +opt_def_kind, associated_item, visibility, anddefaultness.

    +

    The values for most of these queries is obvious, since the RPITIT +conceptually inherits most of its information from the parent function +(e.g. visibility), or because it's trivially knowable because it's an +associated type (opt_def_kind).

    +

    Some other queries are more involved, or cannot be fed, and we +document the interesting ones of those below:

    +
    generics_of for the trait
    +

    The GAT for an RPITIT conceptually inherits the same generics as the +RPIT it comes from. However, instead of having the method as the +generics' parent, the trait is the parent.

    +

    Currently we get away with taking the RPIT's generics and method +generics and flattening them both into a new generics list, preserving +the def-id of each of the parameters. (This may cause issues with +def-ids having the wrong parents, but in the worst case this will cause +diagnostics issues. If this ends up being an issue, we can synthesize +new def-ids for generic params whose parent is the GAT.)

    +
    + An illustrated example +
    #![allow(unused)]
    +fn main() {
    +trait Foo {
    +    fn method<'early: 'early, 'late, T>() -> impl Sized + Captures<'early, 'late>;
    +}
    +}
    +

    Would desugar to...

    +
    #![allow(unused)]
    +fn main() {
    +trait Foo {
    +    //       vvvvvvvvv method's generics
    +    //                  vvvvvvvvvvvvvvvvvvvvvvvv opaque's generics
    +    type Gat<'early, T, 'early_duplicated, 'late>: Sized + Captures<'early_duplicated, 'late>;
    +
    +    fn method<'early: 'early, 'late, T>() -> Self::Gat<'early, T, 'early, 'late>;
    +}
    +}
    +
    +
    generics_of for the impl
    +

    The generics for an impl's GAT are a bit more interesting. They are +composed of RPITIT's own generics (from the trait definition), appended +onto the impl's methods generics. This has the same issue as above, +where the generics for the GAT have parameters whose def-ids have the +wrong parent, but this should only cause issues in diagnostics.

    +

    We could fix this similarly if we were to synthesize new generics +def-ids, but this can be done later in a forwards-compatible way, +perhaps by a interested new contributor.

    +
    opt_rpitit_info
    +

    Some queries rely on computing information that would result in cycles +if we were to feed them eagerly, like explicit_predicates_of. +Therefore we defer to the predicates_of provider to return the right +value for our RPITIT's GAT. We do this by detecting early on in the +query if the associated type is synthetic by using +opt_rpitit_info, +which returns Some if the associated type is synthetic.

    +

    Then, during a query like explicit_predicates_of, we can detect if an +associated type is synthetic like:

    +
    #![allow(unused)]
    +fn main() {
    +fn explicit_predicates_of(tcx: TyCtxt<'_>, def_id: LocalDefId) -> ... {
    +    if let Some(rpitit_info) = tcx.opt_rpitit_info(def_id) {
    +        // Do something special for RPITITs...
    +        return ...;
    +    }
    +
    +    // The regular computation which relies on access to the HIR of `def_id`.
    +}
    +}
    +
    explicit_predicates_of
    +

    RPITITs begin by copying the predicates of the method that defined it, +both on the trait and impl side.

    +

    Additionally, we install "bidirectional outlives" predicates. +Specifically, we add region-outlives predicates in both directions for +each captured early-bound lifetime that constrains it to be equal to the +duplicated early-bound lifetime that results from lowering. This is best +illustrated in an example:

    +
    #![allow(unused)]
    +fn main() {
    +trait Foo<'a> {
    +    fn bar() -> impl Sized + 'a;
    +}
    +
    +// Desugars into...
    +
    +trait Foo<'a> {
    +    type Gat<'a_duplicated>: Sized + 'a
    +    where
    +        'a: 'a_duplicated,
    +        'a_duplicated: 'a;
    +    //~^ Specifically, we should be able to assume that the
    +    // duplicated `'a_duplicated` lifetime always stays in
    +    // sync with the `'a` lifetime.
    +
    +    fn bar() -> Self::Gat<'a>;
    +}
    +}
    +
    assumed_wf_types
    +

    The GATs in both the trait and impl inherit the assumed_wf_types of +the trait method that defines the RPITIT. This is to make sure that the +following code is well formed when lowered.

    +
    #![allow(unused)]
    +fn main() {
    +trait Foo {
    +    fn iter<'a, T>(x: &'a [T]) -> impl Iterator<Item = &'a T>;
    +}
    +
    +// which is lowered to...
    +
    +trait FooDesugared {
    +    type Iter<'a, T>: Iterator<Item = &'a T>;
    +    //~^ assumed wf: `&'a [T]`
    +    // Without assumed wf types, the GAT would not be well-formed on its own.
    +
    +    fn iter<'a, T>(x: &'a [T]) -> Self::Iter<'a, T>;
    +}
    +}
    +

    Because assumed_wf_types is only defined for local def ids, in order +to properly implement assumed_wf_types for impls of foreign traits +with RPITs, we need to encode the assumed wf types of RPITITs in an +extern query +assumed_wf_types_for_rpitit.

    +

    Typechecking

    +

    The RPITIT inference algorithm

    +

    The RPITIT inference algorithm is implemented in +collect_return_position_impl_trait_in_trait_tys.

    +

    High-level: Given a impl method and a trait method, we take the +trait method and instantiate each RPITIT in the signature with an infer +var. We then equate this trait method signature with the impl method +signature, and process all obligations that fall out in order to infer +the type of all of the RPITITs in the method.

    +

    The method is also responsible for making sure that the hidden types for +each RPITIT actually satisfy the bounds of the impl Trait, i.e. that +if we infer impl Trait = Foo, that Foo: Trait holds.

    +
    + An example... +
    #![allow(unused)]
    +#![feature(return_position_impl_trait_in_trait)]
    +
    +fn main() {
    +use std::ops::Deref;
    +
    +trait Foo {
    +    fn bar() -> impl Deref<Target = impl Sized>;
    +             // ^- RPITIT ?0        ^- RPITIT ?1
    +}
    +
    +impl Foo for () {
    +    fn bar() -> Box<String> { Box::new(String::new()) }
    +}
    +}
    +

    We end up with the trait signature that looks like fn() -> ?0, and +nested obligations ?0: Deref<Target = ?1>, ?1: Sized. The impl +signature is fn() -> Box<String>.

    +

    Equating these signatures gives us ?0 = Box<String>, which then after +processing the obligation Box<String>: Deref<Target = ?1> gives us ?1 = String, and the other obligation String: Sized evaluates to true.

    +

    By the end of the algorithm, we end up with a mapping between associated +type def-ids to concrete types inferred from the signature. We can then +use this mapping to implement type_of for the synthetic associated +types in the impl, since this mapping describes the type that should +come after the = in type Assoc = ... for each RPITIT.

    +
    +
    Implied bounds in RPITIT hidden type inference
    +

    Since collect_return_position_impl_trait_in_trait_tys does fulfillment and +region resolution, we must provide it assumed_wf_types so that we can prove +region obligations with the same expected implied bounds as +compare_method_predicate_entailment does.

    +

    Since the return type of a method is understood to be one of the assumed WF +types, and we eagerly fold the return type with inference variables to do +opaque type inference, after opaque type inference, the return type will +resolve to contain the hidden types of the RPITITs. this would mean that the +hidden types of the RPITITs would be assumed to be well-formed without having +independently proven that they are. This resulted in a +subtle unsoundness bug. In +order to prevent this cyclic reasoning, we instead replace the hidden types of +the RPITITs in the return type of the method with placeholders, which lead +to no implied well-formedness bounds.

    +

    Default trait body

    +

    Type-checking a default trait body, like:

    +
    #![allow(unused)]
    +fn main() {
    +trait Foo {
    +    fn bar() -> impl Sized {
    +        1i32
    +    }
    +}
    +}
    +

    requires one interesting hack. We need to install a projection predicate +into the param-env of Foo::bar allowing us to assume that the RPITIT's +GAT normalizes to the RPITIT's opaque type. This relies on the +observation that a trait method and RPITIT's GAT will always be "in +sync". That is, one will only ever be overridden if the other one is as +well.

    +

    Compare this to a similar desugaring of the code above, which would fail +because we cannot rely on this same assumption:

    +
    #![allow(unused)]
    +#![feature(impl_trait_in_assoc_type)]
    +#![feature(associated_type_defaults)]
    +
    +fn main() {
    +trait Foo {
    +    type RPITIT = impl Sized;
    +
    +    fn bar() -> Self::RPITIT {
    +        01i32
    +    }
    +}
    +}
    +

    Failing because a down-stream impl could theoretically provide an +implementation for RPITIT without providing an implementation of +bar:

    +
    error[E0308]: mismatched types
    +--> src/lib.rs:8:9
    + |
    +5 |     type RPITIT = impl Sized;
    + |     ------------------------- associated type defaults can't be assumed inside the trait defining them
    +6 |
    +7 |     fn bar() -> Self::RPITIT {
    + |                 ------------ expected `<Self as Foo>::RPITIT` because of return type
    +8 |         01i32
    + |         ^^^^^ expected associated type, found `i32`
    + |
    + = note: expected associated type `<Self as Foo>::RPITIT`
    +                       found type `i32`
    +
    +

    Well-formedness checking

    +

    We check well-formedness of RPITITs just like regular associated types.

    +

    Since we added lifetime bounds in predicates_of that link the +duplicated early-bound lifetimes to their original lifetimes, and we +implemented assumed_wf_types which inherits the WF types of the method +from which the RPITIT originates (#113704), we have no issues +WF-checking the GAT as if it were a regular GAT.

    +

    What's broken, what's weird, etc.

    +
    Specialization is super busted
    +

    The "default trait methods" described above does not interact well with +specialization, because we only install those projection bounds in trait +default methods, and not in impl methods. Given that specialization is +already pretty busted, I won't go into detail, but it's currently a bug +tracked in: +* tests/ui/impl-trait/in-trait/specialization-broken.rs

    +
    Projections don't have variances
    +

    This code fails because projections don't have variances:

    +
    #![allow(unused)]
    +#![feature(return_position_impl_trait_in_trait)]
    +
    +fn main() {
    +trait Foo {
    +    // Note that the RPITIT below does *not* capture `'lt`.
    +    fn bar<'lt: 'lt>() -> impl Eq;
    +}
    +
    +fn test<'a, 'b, T: Foo>() -> bool {
    +    <T as Foo>::bar::<'a>() == <T as Foo>::bar::<'b>()
    +    //~^ ERROR
    +    // (requires that `'a == 'b`)
    +}
    +}
    +

    This is because we can't relate <T as Foo>::Rpitit<'a> and <T as Foo>::Rpitit<'b>, even if they don't capture their lifetime. If we were +using regular opaque types, this would work, because they would be +bivariant in that lifetime parameter:

    +
    #![allow(unused)]
    +#![feature(return_position_impl_trait_in_trait)]
    +
    +fn main() {
    +fn bar<'lt: 'lt>() -> impl Eq {
    +    ()
    +}
    +
    +fn test<'a, 'b>() -> bool {
    +    bar::<'a>() == bar::<'b>()
    +}
    +}
    +

    This is probably okay though, since RPITITs will likely have their +captures behavior changed to capture all in-scope lifetimes anyways. +This could also be relaxed later in a forwards-compatible way if we were +to consider variances of RPITITs when relating projections.

    +
    +
    1. +

      This is compiler-errors terminology, I'm not claiming it's accurate :^)

      +
    2. +
    +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + + diff --git a/rustbot.html b/rustbot.html new file mode 100644 index 000000000..ece21bc6f --- /dev/null +++ b/rustbot.html @@ -0,0 +1,263 @@ + + + + + + Mastering @rustbot - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    Mastering @rustbot

    +

    @rustbot (also known as triagebot) is a utility robot that is mostly used to +allow any contributor to achieve certain tasks that would normally require GitHub +membership to the rust-lang organization. Its most interesting features for +contributors to rustc are issue claiming and relabeling.

    +

    Issue claiming

    +

    @rustbot exposes a command that allows anyone to assign an issue to themselves. +If you see an issue you want to work on, you can send the following message as a +comment on the issue at hand:

    +
    @rustbot claim
    +
    +

    This will tell @rustbot to assign the issue to you if it has no assignee yet. +Note that because of some GitHub restrictions, you may be assigned indirectly, +i.e. @rustbot will assign itself as a placeholder and edit the top comment to +reflect the fact that the issue is now assigned to you.

    +

    If you want to unassign from an issue, @rustbot has a different command:

    +
    @rustbot release-assignment
    +
    +

    Issue relabeling

    +

    Changing labels for an issue or PR is also normally reserved for members of the +organization. However, @rustbot allows you to relabel an issue yourself, only +with a few restrictions. This is mostly useful in two cases:

    +

    Helping with issue triage: Rust's issue tracker has more than 5,000 open +issues at the time of this writing, so labels are the most powerful tool that we +have to keep it as tidy as possible. You don't need to spend hours in the issue tracker +to triage issues, but if you open an issue, you should feel free to label it if +you are comfortable with doing it yourself.

    +

    Updating the status of a PR: We use "status labels" to reflect the status of +PRs. For example, if your PR has merge conflicts, it will automatically be assigned +the S-waiting-on-author, and reviewers might not review it until you rebase your +PR. Once you do rebase your branch, you should change the labels yourself to remove +the S-waiting-on-author label and add back S-waiting-on-review. In this case, +the @rustbot command will look like this:

    +
    @rustbot label -S-waiting-on-author +S-waiting-on-review
    +
    +

    The syntax for this command is pretty loose, so there are other variants of this +command invocation. There are also some shortcuts to update labels, +for instance @rustbot ready will do the same thing with above command. +For more details, see the docs page about labeling and shortcuts.

    +

    Other commands

    +

    If you are interested in seeing what @rustbot is capable of, check out its documentation, +which is meant as a reference for the bot and should be kept up to date every time the +bot gets an upgrade.

    +

    @rustbot is maintained by the Release team. If you have any feedback regarding +existing commands or suggestions for new commands, feel free to reach out +on Zulip or file an issue in the triagebot repository

    + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + + diff --git a/rustc-driver/getting-diagnostics.html b/rustc-driver/getting-diagnostics.html new file mode 100644 index 000000000..fce913546 --- /dev/null +++ b/rustc-driver/getting-diagnostics.html @@ -0,0 +1,326 @@ + + + + + + Example: Getting diagnostics - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    Example: Getting diagnostic through rustc_interface

    +

    The rustc_interface allows you to intercept diagnostics that would +otherwise be printed to stderr.

    +

    Getting diagnostics

    +

    To get diagnostics from the compiler, +configure rustc_interface::Config to output diagnostic to a buffer, +and run rustc_hir_typeck::typeck for each item.

    +
    // Tested with nightly-2025-03-28
    +
    +#![feature(rustc_private)]
    +
    +extern crate rustc_data_structures;
    +extern crate rustc_driver;
    +extern crate rustc_error_codes;
    +extern crate rustc_errors;
    +extern crate rustc_hash;
    +extern crate rustc_hir;
    +extern crate rustc_interface;
    +extern crate rustc_session;
    +extern crate rustc_span;
    +
    +use std::sync::{Arc, Mutex};
    +
    +use rustc_errors::emitter::Emitter;
    +use rustc_errors::registry::{self, Registry};
    +use rustc_errors::translation::Translate;
    +use rustc_errors::{DiagInner, FluentBundle};
    +use rustc_session::config;
    +use rustc_span::source_map::SourceMap;
    +
    +struct DebugEmitter {
    +    source_map: Arc<SourceMap>,
    +    diagnostics: Arc<Mutex<Vec<DiagInner>>>,
    +}
    +
    +impl Translate for DebugEmitter {
    +    fn fluent_bundle(&self) -> Option<&FluentBundle> {
    +        None
    +    }
    +
    +    fn fallback_fluent_bundle(&self) -> &FluentBundle {
    +        panic!("this emitter should not translate message")
    +    }
    +}
    +
    +impl Emitter for DebugEmitter {
    +    fn emit_diagnostic(&mut self, diag: DiagInner, _: &Registry) {
    +        self.diagnostics.lock().unwrap().push(diag);
    +    }
    +
    +    fn source_map(&self) -> Option<&SourceMap> {
    +        Some(&self.source_map)
    +    }
    +}
    +
    +fn main() {
    +    let buffer: Arc<Mutex<Vec<DiagInner>>> = Arc::default();
    +    let diagnostics = buffer.clone();
    +    let config = rustc_interface::Config {
    +        opts: config::Options::default(),
    +        // This program contains a type error.
    +        input: config::Input::Str {
    +            name: rustc_span::FileName::Custom("main.rs".into()),
    +            input: "
    +fn main() {
    +    let x: &str = 1;
    +}
    +"
    +            .into(),
    +        },
    +        crate_cfg: Vec::new(),
    +        crate_check_cfg: Vec::new(),
    +        output_dir: None,
    +        output_file: None,
    +        file_loader: None,
    +        locale_resources: rustc_driver::DEFAULT_LOCALE_RESOURCES.to_owned(),
    +        lint_caps: rustc_hash::FxHashMap::default(),
    +        psess_created: Some(Box::new(|parse_sess| {
    +            parse_sess.dcx().set_emitter(Box::new(DebugEmitter {
    +                source_map: parse_sess.clone_source_map(),
    +                diagnostics,
    +            }));
    +        })),
    +        register_lints: None,
    +        override_queries: None,
    +        registry: registry::Registry::new(rustc_errors::codes::DIAGNOSTICS),
    +        make_codegen_backend: None,
    +        expanded_args: Vec::new(),
    +        ice_file: None,
    +        hash_untracked_state: None,
    +        using_internal_features: &rustc_driver::USING_INTERNAL_FEATURES,
    +    };
    +    rustc_interface::run_compiler(config, |compiler| {
    +        let krate = rustc_interface::passes::parse(&compiler.sess);
    +        rustc_interface::create_and_enter_global_ctxt(&compiler, krate, |tcx| {
    +            // Iterate all the items defined and perform type checking.
    +            tcx.par_hir_body_owners(|item_def_id| {
    +                tcx.ensure_ok().typeck(item_def_id);
    +            });
    +        });
    +        // If the compiler has encountered errors when this closure returns, it will abort (!) the program.
    +        // We avoid this by resetting the error count before returning
    +        compiler.sess.dcx().reset_err_count();
    +    });
    +    // Read buffered diagnostics.
    +    buffer.lock().unwrap().iter().for_each(|diagnostic| {
    +        println!("{diagnostic:#?}");
    +    });
    +}
    + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + + diff --git a/rustc-driver/interacting-with-the-ast.html b/rustc-driver/interacting-with-the-ast.html new file mode 100644 index 000000000..4a1ad754c --- /dev/null +++ b/rustc-driver/interacting-with-the-ast.html @@ -0,0 +1,327 @@ + + + + + + Example: Type checking - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    Example: Type checking through rustc_driver

    +

    rustc_driver allows you to interact with Rust code at various stages of compilation.

    +

    Getting the type of an expression

    +

    To get the type of an expression, use the after_analysis callback to get a TyCtxt.

    +
    // Tested with nightly-2025-03-28
    +
    +#![feature(rustc_private)]
    +
    +extern crate rustc_ast;
    +extern crate rustc_ast_pretty;
    +extern crate rustc_data_structures;
    +extern crate rustc_driver;
    +extern crate rustc_error_codes;
    +extern crate rustc_errors;
    +extern crate rustc_hash;
    +extern crate rustc_hir;
    +extern crate rustc_interface;
    +extern crate rustc_middle;
    +extern crate rustc_session;
    +extern crate rustc_span;
    +
    +use std::io;
    +use std::path::Path;
    +use std::sync::Arc;
    +
    +use rustc_ast_pretty::pprust::item_to_string;
    +use rustc_driver::{Compilation, run_compiler};
    +use rustc_interface::interface::{Compiler, Config};
    +use rustc_middle::ty::TyCtxt;
    +
    +struct MyFileLoader;
    +
    +impl rustc_span::source_map::FileLoader for MyFileLoader {
    +    fn file_exists(&self, path: &Path) -> bool {
    +        path == Path::new("main.rs")
    +    }
    +
    +    fn read_file(&self, path: &Path) -> io::Result<String> {
    +        if path == Path::new("main.rs") {
    +            Ok(r#"
    +fn main() {
    +    let message = "Hello, World!";
    +    println!("{message}");
    +}
    +"#
    +            .to_string())
    +        } else {
    +            Err(io::Error::other("oops"))
    +        }
    +    }
    +
    +    fn read_binary_file(&self, _path: &Path) -> io::Result<Arc<[u8]>> {
    +        Err(io::Error::other("oops"))
    +    }
    +}
    +
    +struct MyCallbacks;
    +
    +impl rustc_driver::Callbacks for MyCallbacks {
    +    fn config(&mut self, config: &mut Config) {
    +        config.file_loader = Some(Box::new(MyFileLoader));
    +    }
    +
    +    fn after_crate_root_parsing(
    +        &mut self,
    +        _compiler: &Compiler,
    +        krate: &mut rustc_ast::Crate,
    +    ) -> Compilation {
    +        for item in &krate.items {
    +            println!("{}", item_to_string(&item));
    +        }
    +
    +        Compilation::Continue
    +    }
    +
    +    fn after_analysis(&mut self, _compiler: &Compiler, tcx: TyCtxt<'_>) -> Compilation {
    +        // Iterate over the top-level items in the crate, looking for the main function.
    +        for id in tcx.hir_free_items() {
    +            let item = &tcx.hir_item(id);
    +            // Use pattern-matching to find a specific node inside the main function.
    +            if let rustc_hir::ItemKind::Fn { body, .. } = item.kind {
    +                let expr = &tcx.hir_body(body).value;
    +                if let rustc_hir::ExprKind::Block(block, _) = expr.kind {
    +                    if let rustc_hir::StmtKind::Let(let_stmt) = block.stmts[0].kind {
    +                        if let Some(expr) = let_stmt.init {
    +                            let hir_id = expr.hir_id; // hir_id identifies the string "Hello, world!"
    +                            let def_id = item.hir_id().owner.def_id; // def_id identifies the main function
    +                            let ty = tcx.typeck(def_id).node_type(hir_id);
    +                            println!("{expr:#?}: {ty:?}");
    +                        }
    +                    }
    +                }
    +            }
    +        }
    +
    +        Compilation::Stop
    +    }
    +}
    +
    +fn main() {
    +    run_compiler(
    +        &[
    +            // The first argument, which in practice contains the name of the binary being executed
    +            // (i.e. "rustc") is ignored by rustc.
    +            "ignored".to_string(),
    +            "main.rs".to_string(),
    +        ],
    +        &mut MyCallbacks,
    +    );
    +}
    + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + + diff --git a/rustc-driver/intro.html b/rustc-driver/intro.html new file mode 100644 index 000000000..8047fc816 --- /dev/null +++ b/rustc-driver/intro.html @@ -0,0 +1,241 @@ + + + + + + rustc_driver and rustc_interface - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    rustc_driver and rustc_interface

    +

    rustc_driver

    +

    The rustc_driver is essentially rustc's main function. +It acts as the glue for running the various phases of the compiler in the correct order, +using the interface defined in the rustc_interface crate. Where possible, using rustc_driver rather than rustc_interface is recommended.

    +

    The main entry point of rustc_driver is rustc_driver::run_compiler. +This builder accepts the same command-line args as rustc as well as an implementation of Callbacks and a couple of other optional options. +Callbacks is a trait that allows for custom compiler configuration, +as well as allowing custom code to run after different phases of the compilation.

    +

    rustc_interface

    +

    The rustc_interface crate provides a low level API to external users for manually driving the compilation process, +allowing third parties to effectively use rustc's internals as a library for analyzing a crate or for ad hoc emulating of the compiler for cases where rustc_driver is not flexible enough (i.e. rustdoc compiling code and serving output).

    +

    The main entry point of rustc_interface (rustc_interface::run_compiler) takes a configuration variable for the compiler +and a closure taking a yet unresolved Compiler. +run_compiler creates a Compiler from the configuration and passes it to the closure. +Inside the closure you can use the Compiler to call various functions to compile a crate and get the results. +You can see a minimal example of how to use rustc_interface here.

    +

    You can see an example of how to use the various functions using rustc_interface needs by looking at the rustc_driver implementation, +specifically rustc_driver_impl::run_compiler +(not to be confused with rustc_interface::run_compiler).

    +
    +

    Warning: By its very nature, the internal compiler APIs are always going +to be unstable. That said, we do try not to break things unnecessarily.

    +
    + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + + diff --git a/rustc-driver/remarks-on-perma-unstable-features.html b/rustc-driver/remarks-on-perma-unstable-features.html new file mode 100644 index 000000000..07b633795 --- /dev/null +++ b/rustc-driver/remarks-on-perma-unstable-features.html @@ -0,0 +1,257 @@ + + + + + + Remarks on perma-unstable features - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    Remarks on perma unstable features

    +

    rustc_private

    +

    Overview

    +

    The rustc_private feature allows external crates to use compiler internals.

    +

    Using rustc-private with Official Toolchains

    +

    When using the rustc_private feature with official Rust toolchains distributed via rustup, you need to install two additional components:

    +
      +
    1. rustc-dev: Provides compiler libraries
    2. +
    3. llvm-tools: Provides LLVM libraries required for linking
    4. +
    +

    Installation Steps

    +

    Install both components using rustup:

    +
    rustup component add rustc-dev llvm-tools
    +
    +

    Common Error

    +

    Without the llvm-tools component, you'll encounter linking errors like:

    +
    error: linking with `cc` failed: exit status: 1
    +  |
    +  = note: rust-lld: error: unable to find library -lLLVM-{version}
    +
    +

    Using rustc-private with Custom Toolchains

    +

    For custom-built toolchains or environments not using rustup, additional configuration is typically required:

    +

    Requirements

    +
      +
    • LLVM libraries must be available in your system's library search paths
    • +
    • The LLVM version must match the one used to build your Rust toolchain
    • +
    +

    Troubleshooting Steps

    +
      +
    1. Check LLVM installation: Verify LLVM is installed and accessible
    2. +
    3. Configure library paths: You may need to set environment variables: +
      export LD_LIBRARY_PATH=/path/to/llvm/lib:$LD_LIBRARY_PATH
      +
      +
    4. +
    5. Check version compatibility: Ensure your LLVM version is compatible with your Rust toolchain
    6. +
    +

    Additional Resources

    +
      +
    • GitHub Issue #137421: Explains that rustc_private linker failures often occur because llvm-tools is not installed
    • +
    + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + + diff --git a/rustdoc-internals.html b/rustdoc-internals.html new file mode 100644 index 000000000..37e100ab9 --- /dev/null +++ b/rustdoc-internals.html @@ -0,0 +1,463 @@ + + + + + + Rustdoc internals - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    Rustdoc Internals

    + +

    This page describes rustdoc's passes and modes. For an overview of rustdoc, +see the "Rustdoc overview" chapter.

    +

    From Crate to Clean

    +

    In core.rs are two central items: the rustdoc::core::DocContext +struct, and the rustdoc::core::run_global_ctxt function. The latter is +where rustdoc calls out to rustc to compile a crate to the point where +rustdoc can take over. The former is a state container used when crawling +through a crate to gather its documentation.

    +

    The main process of crate crawling is done in clean/mod.rs through several +functions with names that start with clean_. Each function accepts an hir +or ty data structure, and outputs a clean structure used by rustdoc. For +example, this function for converting lifetimes:

    +
    fn clean_lifetime<'tcx>(lifetime: &hir::Lifetime, cx: &mut DocContext<'tcx>) -> Lifetime {
    +    if let Some(
    +        rbv::ResolvedArg::EarlyBound(did)
    +        | rbv::ResolvedArg::LateBound(_, _, did)
    +        | rbv::ResolvedArg::Free(_, did),
    +    ) = cx.tcx.named_bound_var(lifetime.hir_id)
    +        && let Some(lt) = cx.args.get(&did).and_then(|arg| arg.as_lt())
    +    {
    +        return lt.clone();
    +    }
    +    Lifetime(lifetime.ident.name)
    +}
    +

    Also, clean/mod.rs defines the types for the "cleaned" Abstract Syntax Tree +(AST) used later to render documentation pages. Each usually accompanies a +clean_* function that takes some AST or High-Level Intermediate +Representation (HIR) type from rustc and converts it into the +appropriate "cleaned" type. "Big" items like modules or associated items may +have some extra processing in its clean function, but for the most part these +impls are straightforward conversions. The "entry point" to this module is +clean::utils::krate, which is called by run_global_ctxt.

    +

    The first step in clean::utils::krate is to invoke +visit_ast::RustdocVisitor to process the module tree into an intermediate +visit_ast::Module. This is the step that actually crawls the +rustc_hir::Crate, normalizing various aspects of name resolution, such as:

    +
      +
    • handling #[doc(inline)] and #[doc(no_inline)]
    • +
    • handling import globs and cycles, so there are no duplicates or infinite +directory trees
    • +
    • inlining public use exports of private items, or showing a "Reexport" +line in the module page
    • +
    • inlining items with #[doc(hidden)] if the base item is hidden but the
    • +
    • showing #[macro_export]-ed macros at the crate root, regardless of whether +they're defined as a reexport or not
    • +
    +

    After this step, clean::krate invokes clean_doc_module, which actually +converts the HIR items to the cleaned AST. This is also the step where cross- +crate inlining is performed, which requires converting rustc_middle data +structures into the cleaned AST.

    +

    The other major thing that happens in clean/mod.rs is the collection of doc +comments and #[doc=""] attributes into a separate field of the Attributes +struct, present on anything that gets hand-written documentation. This makes it +easier to collect this documentation later in the process.

    +

    The primary output of this process is a clean::types::Crate with a tree of Items +which describe the publicly-documentable items in the target crate.

    +

    Passes Anything But a Gas Station (or: Hot Potato)

    +

    Before moving on to the next major step, a few important "passes" occur over +the cleaned AST. Several of these passes are lints and reports, but some of +them mutate or generate new items.

    +

    These are all implemented in the librustdoc/passes directory, one file per pass. +By default, all of these passes are run on a crate, but the ones +regarding dropping private/hidden items can be bypassed by passing +--document-private-items to rustdoc. Note that unlike the previous set of AST +transformations, the passes are run on the cleaned crate.

    +

    Here is the list of passes as of March 2023:

    +
      +
    • +

      calculate-doc-coverage calculates information used for the --show-coverage +flag.

      +
    • +
    • +

      check-doc-test-visibility runs doctest visibility–related lints. This pass +runs before strip-private, which is why it needs to be separate from +run-lints.

      +
    • +
    • +

      collect-intra-doc-links resolves intra-doc links.

      +
    • +
    • +

      collect-trait-impls collects trait impls for each item in the crate. For +example, if we define a struct that implements a trait, this pass will note +that the struct implements that trait.

      +
    • +
    • +

      propagate-doc-cfg propagates #[doc(cfg(...))] to child items.

      +
    • +
    • +

      run-lints runs some of rustdoc's lints, defined in passes/lint. This is +the last pass to run.

      +
        +
      • +

        bare_urls detects links that are not linkified, e.g., in Markdown such as +Go to https://example.com/. It suggests wrapping the link with angle brackets: +Go to <https://example.com/>. to linkify it. This is the code behind the rustdoc::bare_urls lint.

        +
      • +
      • +

        check_code_block_syntax validates syntax inside Rust code blocks +(```rust)

        +
      • +
      • +

        html_tags detects invalid HTML (like an unclosed <span>) +in doc comments.

        +
      • +
      +
    • +
    • +

      strip-hidden and strip-private strip all doc(hidden) and private items +from the output. strip-private implies strip-priv-imports. Basically, the +goal is to remove items that are not relevant for public documentation. This +pass is skipped when --document-hidden-items is passed.

      +
    • +
    • +

      strip-priv-imports strips all private import statements (use, extern crate) from a crate. This is necessary because rustdoc will handle public +imports by either inlining the item's documentation to the module or creating +a "Reexports" section with the import in it. The pass ensures that all of +these imports are actually relevant to documentation. It is technically +only run when --document-private-items is passed, but strip-private +accomplishes the same thing.

      +
    • +
    • +

      strip-private strips all private items from a crate which cannot be seen +externally. This pass is skipped when --document-private-items is passed.

      +
    • +
    +

    There is also a stripper module in librustdoc/passes, but it is a +collection of utility functions for the strip-* passes and is not a pass +itself.

    +

    From Clean To HTML

    +

    This is where the "second phase" in rustdoc begins. This phase primarily lives +in the librustdoc/formats and librustdoc/html folders, and it all starts with +formats::renderer::run_format. This code is responsible for setting up a type that +impl FormatRenderer, which for HTML is Context.

    +

    This structure contains methods that get called by run_format to drive the +doc rendering, which includes:

    +
      +
    • init generates static.files, as well as search index and src/
    • +
    • item generates the item HTML files themselves
    • +
    • after_krate generates other global resources like all.html
    • +
    +

    In item, the "page rendering" occurs, via a mixture of Askama templates +and manual write!() calls, starting in html/layout.rs. The parts that have +not been converted to templates occur within a series of std::fmt::Display +implementations and functions that pass around a &mut std::fmt::Formatter.

    +

    The parts that actually generate HTML from the items and documentation start +with print_item defined in html/render/print_item.rs, which switches out +to one of several item_* functions based on kind of Item being rendered.

    +

    Depending on what kind of rendering code you're looking for, you'll probably +find it either in html/render/mod.rs for major items like "what sections +should I print for a struct page" or html/format.rs for smaller component +pieces like "how should I print a where clause as part of some other item".

    +

    Whenever rustdoc comes across an item that should print hand-written +documentation alongside, it calls out to html/markdown.rs which interfaces +with the Markdown parser. This is exposed as a series of types that wrap a +string of Markdown, and implement fmt::Display to emit HTML text. It takes +special care to enable certain features like footnotes and tables and add +syntax highlighting to Rust code blocks (via html/highlight.rs) before +running the Markdown parser. There's also a function find_codes which is +called by find_testable_codes that specifically scans for Rust code blocks so +the test-runner code can find all the doctests in the crate.

    +

    From Soup to Nuts (or: "An Unbroken Thread Stretches From Those First Cells To Us")

    +

    It's important to note that rustdoc can ask the compiler for type information +directly, even during HTML generation. This didn't used to be the case, and +a lot of rustdoc's architecture was designed around not doing that, but a +TyCtxt is now passed to formats::renderer::run_format, which is used to +run generation for both HTML and the +(unstable as of March 2023) JSON format.

    +

    This change has allowed other changes to remove data from the "clean" AST +that can be easily derived from TyCtxt queries, and we'll usually accept +PRs that remove fields from "clean" (it's been soft-deprecated), but this +is complicated from two other constraints that rustdoc runs under:

    +
      +
    • Docs can be generated for crates that don't actually pass type checking. +This is used for generating docs that cover mutually-exclusive platform +configurations, such as libstd having a single package of docs that +cover all supported operating systems. This means rustdoc has to be able +to generate docs from HIR.
    • +
    • Docs can inline across crates. Since crate metadata doesn't contain HIR, +it must be possible to generate inlined docs from the rustc_middle data.
    • +
    +

    The "clean" AST acts as a common output format for both input formats. There +is also some data in clean that doesn't correspond directly to HIR, such as +synthetic impls for auto traits and blanket impls generated by the +collect-trait-impls pass.

    +

    Some additional data is stored in +html::render::context::{Context, SharedContext}. These two types serve as +ways to segregate rustdoc's data for an eventual future with multithreaded doc +generation, as well as just keeping things organized:

    +
      +
    • Context stores data used for generating the current page, such as its +path, a list of HTML IDs that have been used (to avoid duplicate id=""), +and the pointer to SharedContext.
    • +
    • SharedContext stores data that does not vary by page, such as the tcx +pointer, and a list of all types.
    • +
    +

    Other Tricks Up Its Sleeve

    +

    All this describes the process for generating HTML documentation from a Rust +crate, but there are couple other major modes that rustdoc runs in. It can also +be run on a standalone Markdown file, or it can run doctests on Rust code or +standalone Markdown files. For the former, it shortcuts straight to +html/markdown.rs, optionally including a mode which inserts a Table of +Contents to the output HTML.

    +

    For the latter, rustdoc runs a similar partial-compilation to get relevant +documentation in test.rs, but instead of going through the full clean and +render process, it runs a much simpler crate walk to grab just the +hand-written documentation. Combined with the aforementioned +"find_testable_code" in html/markdown.rs, it builds up a collection of +tests to run before handing them off to the test runner. One notable location +in test.rs is the function make_test, which is where hand-written +doctests get transformed into something that can be executed.

    +

    Some extra reading about make_test can be found +here.

    +

    Testing Locally

    +

    Some features of the generated HTML documentation might require local +storage to be used across pages, which doesn't work well without an HTTP +server. To test these features locally, you can run a local HTTP server, like +this:

    +
    $ ./x doc library
    +# The documentation has been generated into `build/[YOUR ARCH]/doc`.
    +$ python3 -m http.server -d build/[YOUR ARCH]/doc
    +
    +

    Now you can browse your documentation just like you would if it was hosted +on the internet. For example, the url for std will be rust/std/.

    +

    See Also

    + + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + + diff --git a/rustdoc-internals/rustdoc-gui-test-suite.html b/rustdoc-internals/rustdoc-gui-test-suite.html new file mode 100644 index 000000000..4b20d1cee --- /dev/null +++ b/rustdoc-internals/rustdoc-gui-test-suite.html @@ -0,0 +1,224 @@ + + + + + + The rustdoc-gui test suite - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    The rustdoc-gui test suite

    +
    +

    FIXME: This section is a stub. Please help us flesh it out!

    +
    +

    This page is about the test suite named rustdoc-gui used to test the "GUI" of rustdoc (i.e., the HTML/JS/CSS as rendered in a browser). +For other rustdoc-specific test suites, see Rustdoc test suites.

    +

    These use a NodeJS-based tool called browser-UI-test that uses puppeteer to run tests in a headless browser and check rendering and interactivity. For information on how to write this form of test, see tests/rustdoc-gui/README.md as well as the description of the .goml format

    + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + + diff --git a/rustdoc-internals/rustdoc-json-test-suite.html b/rustdoc-internals/rustdoc-json-test-suite.html new file mode 100644 index 000000000..060ab7c24 --- /dev/null +++ b/rustdoc-internals/rustdoc-json-test-suite.html @@ -0,0 +1,221 @@ + + + + + + The rustdoc-json test suite - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    The rustdoc-json test suite

    +
    +

    FIXME: This section is a stub. It will be populated by PR #2422.

    +
    + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + + diff --git a/rustdoc-internals/rustdoc-test-suite.html b/rustdoc-internals/rustdoc-test-suite.html new file mode 100644 index 000000000..08fbb8560 --- /dev/null +++ b/rustdoc-internals/rustdoc-test-suite.html @@ -0,0 +1,361 @@ + + + + + + The rustdoc test suite - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    The rustdoc test suite

    +

    This page is about the test suite named rustdoc used to test the HTML output of rustdoc. +For other rustdoc-specific test suites, see Rustdoc test suites.

    +

    Each test file in this test suite is simply a Rust source file file.rs sprinkled with +so-called directives located inside normal Rust code comments. +These come in two flavors: Compiletest and HtmlDocCk.

    +

    To learn more about the former, read Compiletest directives. +For the latter, continue reading.

    +

    Internally, compiletest invokes the supplementary checker script htmldocck.py.

    +

    HtmlDocCk Directives

    +

    Directives to HtmlDocCk are assertions that place constraints on the generated HTML. +They look similar to those given to compiletest in that they take the form of //@ comments +but ultimately, they are completey distinct and processed by different programs.

    +

    XPath is used to query parts of the HTML document tree.

    +

    Introductory example:

    +
    //@ has file/type.Alias.html
    +//@ has - '//*[@class="rust item-decl"]//code' 'type Alias = Option<i32>;'
    +pub type Alias = Option<i32>;
    +

    Here, we check that documentation generated for crate file contains a page for the +public type alias Alias where the code block that is found at the top contains the +expected rendering of the item. The //*[@class="rust item-decl"]//code is an XPath +expression.

    +

    Conventionally, you place these directives directly above the thing they are meant to test. +Technically speaking however, they don't need to be as HtmlDocCk only looks for the directives.

    +

    All directives take a PATH argument. +To avoid repetition, - can be passed to it to re-use the previous PATH argument. +Since the path contains the name of the crate, it is conventional to add a +#![crate_name = "foo"] attribute to the crate root to shorten the resulting path.

    +

    All arguments take the form of shell-style (single or double) quoted strings, +with the exception of COUNT and the special - form of PATH.

    +

    All directives (except files) can be negated by putting a ! in front of their name. +Before you add negated directives, please read about their caveats.

    +

    Similar to shell commands, +directives can extend across multiple lines if their last char is \. +In this case, the start of the next line should be //, with no @.

    +

    Use the special string {{channel}} in XPaths, PATTERN arguments and snapshot files +if you'd like to refer to the URL https://doc.rust-lang.org/CHANNEL where CHANNEL refers to the +current release channel (e.g, stable or nightly).

    +

    Listed below are all possible directives:

    +

    has

    +
    +

    Usage 1: //@ has PATH

    +
    +

    Check that the file given by PATH exists.

    +
    +

    Usage 2: //@ has PATH XPATH PATTERN

    +
    +

    Checks that the text of each element / attribute / text selected by XPATH in the +whitespace-normalized1 file given by PATH matches the +(also whitespace-normalized) string PATTERN.

    +

    Tip: If you'd like to avoid whitespace normalization and/or if you'd like to match with a regex, +use matches instead.

    +

    hasraw

    +
    +

    Usage: //@ hasraw PATH PATTERN

    +
    +

    Checks that the contents of the whitespace-normalized1 file given by PATH +matches the (also whitespace-normalized) string PATTERN.

    +

    Tip: If you'd like to avoid whitespace normalization and / or if you'd like to match with a +regex, use matchesraw instead.

    +

    matches

    +
    +

    Usage: //@ matches PATH XPATH PATTERN

    +
    +

    Checks that the text of each element / attribute / text selected by XPATH in the +file given by PATH matches the Python-flavored2 regex PATTERN.

    +

    matchesraw

    +
    +

    Usage: //@ matchesraw PATH PATTERN

    +
    +

    Checks that the contents of the file given by PATH matches the +Python-flavored2 regex PATTERN.

    +

    count

    +
    +

    Usage: //@ count PATH XPATH COUNT

    +
    +

    Checks that there are exactly COUNT matches for XPATH within the file given by PATH.

    +

    snapshot

    +
    +

    Usage: //@ snapshot NAME PATH XPATH

    +
    +

    Checks that the element / text selected by XPATH in the file given by PATH matches the +pre-recorded subtree or text (the "snapshot") in file FILE_STEM.NAME.html where FILE_STEM +is the file stem of the test file.

    +

    Pass the --bless option to compiletest to accept the current subtree/text as expected. +This will overwrite the aforementioned file (or create it if it doesn't exist). It will +automatically normalize the channel-dependent URL https://doc.rust-lang.org/CHANNEL to +the special string {{channel}}.

    +

    has-dir

    +
    +

    Usage: //@ has-dir PATH

    +
    +

    Checks for the existence of the directory given by PATH.

    +

    files

    +
    +

    Usage: //@ files PATH ENTRIES

    +
    +

    Checks that the directory given by PATH contains exactly ENTRIES. +ENTRIES is a Python-like list of strings inside a quoted string.

    +

    Example: //@ files "foo/bar" '["index.html", "sidebar-items.js"]'

    +

    Compiletest Directives (Brief)

    +

    As mentioned in the introduction, you also have access to compiletest directives. +Most importantly, they allow you to register auxiliary crates and +to pass flags to the rustdoc binary under test. +It's strongly recommended to read that chapter if you don't know anything about them yet.

    +

    Here are some details that are relevant to this test suite specifically:

    +
      +
    • While you can use both //@ compile-flags and //@ doc-flags to pass flags to rustdoc, +prefer to user the latter to show intent. The former is meant for rustc.
    • +
    • Add //@ build-aux-docs to the test file that has auxiliary crates to not only compile the +auxiliaries with rustc but to also document them with rustdoc.
    • +
    +

    Caveats

    +

    Testing for the absence of an element or a piece of text is quite fragile and not very future proof.

    +

    It's not unusual that the shape of the generated HTML document tree changes from time to time. +This includes for example renamings of CSS classes.

    +

    Whenever that happens, positive checks will either continue to match the intended element / +attribute / text (if their XPath expression is general / loose enough) and +thus continue to test the correct thing or they won't in which case they would fail thereby +forcing the author of the change to look at them.

    +

    Compare that to negative checks (e.g., //@ !has PATH XPATH PATTERN) which won't fail if their +XPath expression "no longer" matches. The author who changed "the shape" thus won't get notified and +as a result someone else can unintentionally reintroduce PATTERN into the generated docs without +the original negative check failing.

    +

    Note: Please avoid the use of negated checks!

    +

    Tip: If you can't avoid it, please always pair it with an analogous positive check in the +immediate vicinity, so people changing "the shape" have a chance to notice and to update the +negated check!

    +

    Limitations

    +

    HtmlDocCk uses the XPath implementation from the Python standard library. +This leads to several limitations:

    +
      +
    • All XPATH arguments must start with // due to a flaw in the implementation.
    • +
    • Many XPath features (functions, axies, etc.) are not supported.
    • +
    • Only well-formed HTML can be parsed (hopefully rustdoc doesn't output mismatched tags).
    • +
    +

    Furthmore, compiletest revisions are not supported.

    +
    +
    1. +

      Whitespace normalization means that all spans of consecutive whitespace are replaced with a single space. ↩2

      +
    2. +
    3. +

      They are Unicode aware (flag UNICODE is set), match case-sensitively and in single-line mode. ↩2

      +
    4. +
    +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + + diff --git a/rustdoc-internals/search.html b/rustdoc-internals/search.html new file mode 100644 index 000000000..a4befbfb0 --- /dev/null +++ b/rustdoc-internals/search.html @@ -0,0 +1,670 @@ + + + + + + Search - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    Rustdoc search

    +

    Rustdoc Search is two programs: search_index.rs +and search.js. The first generates a nasty JSON +file with a full list of items and function signatures +in the crates in the doc bundle, and the second reads +it, turns it into some in-memory structures, and +scans them linearly to search.

    + +

    Search index format

    +

    search.js calls this Raw, because it turns it into +a more normal object tree after loading it. +For space savings, it's also written without newlines or spaces.

    +
    [
    +    [ "crate_name", {
    +        // name
    +        "n": ["function_name", "Data"],
    +        // type
    +        "t": "HF",
    +        // parent module
    +        "q": [[0, "crate_name"]],
    +        // parent type
    +        "i": [2, 0],
    +        // type dictionary
    +        "p": [[1, "i32"], [1, "str"], [5, "Data", 0]],
    +        // function signature
    +        "f": "{{gb}{d}}`", // [[3, 1], [2]]
    +        // impl disambiguator
    +        "b": [],
    +        // deprecated flag
    +        "c": "OjAAAAAAAAA=", // empty bitmap
    +        // empty description flag
    +        "e": "OjAAAAAAAAA=", // empty bitmap
    +        // aliases
    +        "a": [["get_name", 0]],
    +        // description shards
    +        "D": "g", // 3
    +        // inlined re-exports
    +        "r": [],
    +    }]
    +]
    +
    +

    src/librustdoc/html/static/js/rustdoc.d.ts +defines an actual schema in a TypeScript type.

    +
    + + + + + + + + + + + +
    KeyNameDescription
    nNamesItem names
    tItem TypeOne-char item type code
    qParent moduleMap<index, path>
    iParent typelist of indexes
    fFunction signatureencoded
    bImpl disambiguatorMap<index, string>
    cDeprecation flagroaring bitmap
    eDescription is emptyroaring bitmap
    pType dictionary[[item type, path]]
    aAliasMap<string, index>
    Ddescription shardsencoded
    +
    +

    The above index defines a crate called crate_name +with a free function called function_name and a struct called Data, +with the type signature Data, i32 -> str, +and an alias, get_name, that equivalently refers to function_name.

    +

    The search index needs to fit the needs of the rustdoc compiler, +the search.js frontend, +and also be compact and fast to decode. +It makes a lot of compromises:

    +
      +
    • The rustdoc compiler runs on one crate at a time, +so each crate has an essentially separate search index. +It merges them by having each crate on one line +and looking at the first quoted string.
    • +
    • Names in the search index are given +in their original case and with underscores. +When the search index is loaded, +search.js stores the original names for display, +but also folds them to lowercase and strips underscores for search. +You'll see them called normalized.
    • +
    • The f array stores types as offsets into the p array. +These types might actually be from another crate, +so search.js has to turn the numbers into names and then +back into numbers to deduplicate them if multiple crates in the +same index mention the same types.
    • +
    • It's a JSON file, but not designed to be human-readable. +Browsers already include an optimized JSON decoder, +so this saves on search.js code and performs better for small crates, +but instead of using objects like normal JSON formats do, +it tries to put data of the same type next to each other +so that the sliding window used by DEFLATE can find redundancies. +Where search.js does its own compression, +it's designed to save memory when the file is finally loaded, +not just size on disk or network transfer.
    • +
    +

    Parallel arrays and indexed maps

    +

    Abstractly, Rustdoc Search data is a table, stored in column-major form. +Most data in the index represents a set of parallel arrays +(the "columns") which refer to the same data if they're at the same position.

    +

    For example, +the above search index can be turned into this table:

    +
    + + + +
    ntdqifbc
    0crate_nameDDocumentationNULL0NULLNULL0
    1function_nameHThis function gets the name of an integer with Datacrate_name2{{gb}{d}}NULL0
    2DataFThe data structcrate_name0`NULL0
    +
    +

    The crate row is implied in most columns, since its type is known (it's a crate), +it can't have a parent (crates form the root of the module tree), +its name is specified as the map key, +and function-specific data like the impl disambiguator can't apply either. +However, it can still have a description and it can still be deprecated. +The crate, therefore, has a primary key of 0.

    +

    The above code doesn't use c, which holds deprecated indices, +or b, which maps indices to strings. +If crate_name::function_name used both, it might look like this.

    +
            "b": [[0, "impl-Foo-for-Bar"]],
    +        "c": "OjAAAAEAAAAAAAIAEAAAABUAbgZYCQ==",
    +
    +

    This attaches a disambiguator to index 1 and marks it deprecated.

    +

    The advantage of this layout is that these APIs often have implicit structure +that DEFLATE can take advantage of, +but that rustdoc can't assume. +Like how names are usually CamelCase or snake_case, +but descriptions aren't. +It also makes it easier to use a sparse data for things like boolean flags.

    +

    q is a Map from the first applicable ID to a parent module path. +This is a weird trick, but it makes more sense in pseudo-code:

    +
    #![allow(unused)]
    +fn main() {
    +let mut parent_module = "";
    +for (i, entry) in search_index.iter().enumerate() {
    +    if q.contains(i) {
    +        parent_module = q.get(i);
    +    }
    +    // ... do other stuff with `entry` ...
    +}
    +}
    +

    This is valid because everything has a parent module +(even if it's just the crate itself), +and is easy to assemble because the rustdoc generator sorts by path +before serializing. +Doing this allows rustdoc to not only make the search index smaller, +but reuse the same string representing the parent path across multiple in-memory items.

    +

    Representing sparse columns

    +

    VLQ Hex

    +

    This format is, as far as I know, used nowhere other than rustdoc. +It follows this grammar:

    +
    VLQHex = { VHItem | VHBackref }
    +VHItem = VHNumber | ( '{', {VHItem}, '}' )
    +VHNumber = { '@' | 'A' | 'B' | 'C' | 'D' | 'E' | 'F' | 'G' | 'H' | 'I' | 'J' | 'K' | 'L' | 'M' | 'N' | 'O' }, ( '`' | 'a' | 'b' | 'c' | 'd' | 'e' | 'f' | 'g' | 'h' | 'i' | 'j' | 'k ' | 'l' | 'm' | 'n' | 'o' )
    +VHBackref = ( '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' | ':' | ';' | '<' | '=' | '>' | '?' )
    +
    +

    A VHNumber is a variable-length, self-terminating base16 number +(terminated because the last hexit is lowercase while all others are uppercase). +The sign bit is represented using zig-zag encoding.

    +

    This alphabet is chosen because the characters can be turned into hexits by +masking off the last four bits of the ASCII encoding.

    +

    A major feature of this encoding, as with all of the "compression" done in rustdoc, +is that it can remain in its compressed format even in memory at runtime. +This is why HBackref is only used at the top level, +and why we don't just use Flate for everything: the decoder in search.js +will reuse the entire decoded object whenever a backref is seen, +saving decode work and memory.

    +

    Roaring Bitmaps

    +

    Flag-style data, such as deprecation and empty descriptions, +are stored using the standard Roaring Bitmap serialization format with runs. +The data is then base64 encoded when writing it.

    +

    As a brief overview: a roaring bitmap is a chunked array of bits, +described in this paper. +A chunk can either be a list of integers, a bitfield, or a list of runs. +In any case, the search engine has to base64 decode it, +and read the chunk index itself, +but the payload data stays as-is.

    +

    All roaring bitmaps in rustdoc currently store a flag for each item index. +The crate is item 0, all others start at 1.

    +

    How descriptions are stored

    +

    The largest amount of data, +and the main thing Rustdoc Search deals with that isn't +actually used for searching, is descriptions. +In a SERP table, this is what appears on the rightmost column.

    +
    +
    + +
    item typeitem pathdescription (this part)
    functionmy_crate::my_functionThis function gets the name of an integer with Data
    +
    +

    When someone runs a search in rustdoc for the first time, their browser will +work through a "sandwich workload" of three steps:

    +
      +
    1. Download the search-index.js and search.js files (a network bottleneck).
    2. +
    3. Perform the actual search (a CPU and memory bandwidth bottleneck).
    4. +
    5. Download the description data (another network bottleneck).
    6. +
    +

    Reducing the amount of data downloaded here will almost always increase latency, +by delaying the decision of what to download behind other work and/or adding +data dependencies where something can't be downloaded without first downloading +something else. In this case, we can't start downloading descriptions until +after the search is done, because that's what allows it to decide which +descriptions to download (it needs to sort the results then truncate to 200).

    +

    To do this, two columns are stored in the search index, building on both +Roaring Bitmaps and on VLQ Hex.

    +
      +
    • e is an index of empty descriptions. It's a roaring bitmap of +each item (the crate itself is item 0, the rest start at 1).
    • +
    • D is a shard list, stored in VLQ hex as flat list of integers. +Each integer gives you the number of descriptions in the shard. +As the decoder walks the index, it checks if the description is empty. +if it's not, then it's in the "current" shard. When all items are +exhausted, it goes on to the next shard.
    • +
    +

    Inside each shard is a newline-delimited list of descriptions, +wrapped in a JSONP-style function call.

    +

    i, f, and p

    +

    i and f both index into p, the array of parent items.

    +

    i is just a one-indexed number +(not zero-indexed because 0 is used for items that have no parent item). +It's different from q because q represents the parent module or crate, +which everything has, +while i/q are used for type and trait-associated items like methods.

    +

    f, the function signatures, use a VLQ hex tree. +A number is either a one-indexed reference into p, +a negative number representing a generic, +or zero for null.

    +

    (the internal object representation also uses negative numbers, +even after decoding, +to represent generics).

    +

    For example, {{gb}{d}} is equivalent to the json [[3, 1], [2]]. +Because of zigzag encoding, ` is +0, a is -0 (which is not used), +b is +1, and c is -1.

    +

    Searching by name

    +

    Searching by name works by looping through the search index +and running these functions on each:

    +
      +
    • editDistance is always used to determine a match +(unless quotes are specified, which would use simple equality instead). +It computes the number of swaps, inserts, and removes needed to turn +the query name into the entry name. +For example, foo has zero distance from itself, +but a distance of 1 from ofo (one swap) and foob (one insert). +It is checked against an heuristic threshold, and then, +if it is within that threshold, the distance is stored for ranking.
    • +
    • String.prototype.indexOf is always used to determine a match. +If it returns anything other than -1, the result is added, +even if editDistance exceeds its threshold, +and the index is stored for ranking.
    • +
    • checkPath is used if, and only if, a parent path is specified +in the query. For example, vec has no parent path, but vec::vec does. +Within checkPath, editDistance and indexOf are used, +and the path query has its own heuristic threshold, too. +If it's not within the threshold, the entry is rejected, +even if the first two pass. +If it's within the threshold, the path distance is stored +for ranking.
    • +
    • checkType is used only if there's a type filter, +like the struct in struct:vec. If it fails, +the entry is rejected.
    • +
    +

    If all four criteria pass +(plus the crate filter, which isn't technically part of the query), +the results are sorted by sortResults.

    +

    Searching by type

    +

    Searching by type can be divided into two phases, +and the second phase has two sub-phases.

    +
      +
    • Turn names in the query into numbers.
    • +
    • Loop over each entry in the search index: +
        +
      • Quick rejection using a bloom filter.
      • +
      • Slow rejection using a recursive type unification algorithm.
      • +
      +
    • +
    +

    In the names->numbers phase, if the query has only one name in it, +the editDistance function is used to find a near match if the exact match fails, +but if there's multiple items in the query, +non-matching items are treated as generics instead. +This means hahsmap will match hashmap on its own, but hahsmap, u32 +is going to match the same things T, u32 matches +(though rustdoc will detect this particular problem and warn about it).

    +

    Then, when actually looping over each item, +the bloom filter will probably reject entries that don't have every +type mentioned in the query. +For example, the bloom query allows a query of i32 -> u32 to match +a function with the type i32, u32 -> bool, +but unification will reject it later.

    +

    The unification filter ensures that:

    +
      +
    • Bag semantics are respected. If you query says i32, i32, +then the function has to mention two i32s, not just one.
    • +
    • Nesting semantics are respected. If your query says vec<option>, +then vec<option<i32>> is fine, but option<vec<i32>> is not a match.
    • +
    • The division between return type and parameter is respected. +i32 -> u32 and u32 -> i32 are completely different.
    • +
    +

    The bloom filter checks none of these things, +and, on top of that, can have false positives. +But it's fast and uses very little memory, so the bloom filter helps.

    +

    Re-exports

    +

    Re-export inlining allows the same item to be found by multiple names. +Search supports this by giving the same item multiple entries and tracking a canonical path +for any items where that differs from the given path.

    +

    For example, this sample index has a single struct exported from two paths:

    +
    [
    +    [ "crate_name", {
    +        "doc": "Documentation",
    +        "n": ["Data", "Data"],
    +        "t": "FF",
    +        "d": ["The data struct", "The data struct"],
    +        "q": [[0, "crate_name"], [1, "crate_name::submodule"]],
    +        "i": [0, 0],
    +        "p": [],
    +        "f": "``",
    +        "b": [],
    +        "c": [],
    +        "a": [],
    +        "r": [[0, 1]],
    +    }]
    +]
    +
    +

    The important part of this example is the r array, +which indicates that path entry 1 in the q array is +the canonical path for item 0. +That is, crate_name::Data has a canonical path of crate_name::submodule::Data.

    +

    This might sound like a strange design, since it has the duplicate data. +It's done that way because inlining can happen across crates, +which are compiled separately and might not all be present in the docs.

    +
    [
    +  [ "crate_name", ... ],
    +  [ "crate_name_2", { "q": [[0, "crate_name::submodule"], [5, "core::option"]], ... }]
    +]
    +
    +

    In the above example, a canonical path actually comes from a dependency, +and another one comes from an inlined standard library item: +the canonical path isn't even in the index! +The canonical path might also be private. +In either case, it's never shown to the user, and is only used for deduplication.

    +

    Associated types, like methods, store them differently. +These types are connected with an entry in p (their "parent") +and each one has an optional third tuple element:

    +
    "p": [[5, "Data", 0, 1]]
    +
    +

    That's:

    +
      +
    • 5: It's a struct
    • +
    • "Data": Its name
    • +
    • 0: Its display path, "crate_name"
    • +
    • 1: Its canonical path, "crate_name::submodule"
    • +
    +

    In both cases, the canonical path might not be public at all, +or it might be from another crate that isn't in the docs, +so it's never shown to the user, but is used for deduplication.

    +

    Testing the search engine

    +

    While the generated UI is tested using rustdoc-gui tests, the +primary way the search engine is tested is the rustdoc-js and +rustdoc-js-std tests. They run in NodeJS.

    +

    A rustdoc-js test has a .rs and .js file, with the same name. +The .rs file specifies the hypothetical library crate to run +the searches on (make sure you mark anything you need to find as pub). +The .js file specifies the actual searches. +The rustdoc-js-std tests are the same, but don't require an .rs +file, since they use the standard library.

    +

    The .js file is like a module (except the loader takes care of +exports for you). It uses these variables:

    +
    + + + +
    NameTypeDescription
    FILTER_CRATEstringOnly include results from the given crate. In the GUI, this is the "Results in crate" drop-down menu.
    EXPECTED[ResultsTable]|ResultsTableList of tests to run, specifying what the hypothetical user types into the search box and sees in the tabs
    PARSED[ParsedQuery]|ParsedQueryList of parser tests to run, without running an actual search
    +
    +

    FILTER_CRATE can be left out (equivalent to searching "all crates"), but you +have to specify EXPECTED or PARSED.

    +

    By default, the test fails if any of the results specified in the test case are +not found after running the search, or if the results found after running the +search don't appear in the same order that they do in the test. +The actual search results may, however, include results that aren't in the test. +To override this, specify any of the following magic comments. +Put them on their own line, without indenting.

    +
      +
    • // exact-check: If search results appear that aren't part of the test case, +then fail.
    • +
    • // ignore-order: Allow search results to appear in any order.
    • +
    • // should-fail: Used to write negative tests.
    • +
    +

    Standard library tests usually shouldn't specify // exact-check, since we +want the libs team to be able to add new items without causing unrelated +tests to fail, but standalone tests will use it more often.

    +

    The ResultsTable and ParsedQuery types are specified in +rustdoc.d.ts.

    +

    For example, imagine we needed to fix a bug where a function named +constructor couldn't be found. To do this, write two files:

    +
    #![allow(unused)]
    +fn main() {
    +// tests/rustdoc-js/constructor_search.rs
    +// The test case needs to find this result.
    +pub fn constructor(_input: &str) -> i32 { 1 }
    +}
    +
    // tests/rustdoc-js/constructor_search.js
    +// exact-check
    +// Since this test runs against its own crate,
    +// new items should not appear in the search results.
    +const EXPECTED = [
    +  // This first test targets name-based search.
    +  {
    +    query: "constructor",
    +    others: [
    +      { path: "constructor_search", name: "constructor" },
    +    ],
    +    in_args: [],
    +    returned: [],
    +  },
    +  // This test targets the second tab.
    +  {
    +    query: "str",
    +    others: [],
    +    in_args: [
    +      { path: "constructor_search", name: "constructor" },
    +    ],
    +    returned: [],
    +  },
    +  // This test targets the third tab.
    +  {
    +    query: "i32",
    +    others: [],
    +    in_args: [],
    +    returned: [
    +      { path: "constructor_search", name: "constructor" },
    +    ],
    +  },
    +  // This test targets advanced type-driven search.
    +  {
    +    query: "str -> i32",
    +    others: [
    +      { path: "constructor_search", name: "constructor" },
    +    ],
    +    in_args: [],
    +    returned: [],
    +  },
    +]
    +
    + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + + diff --git a/rustdoc.html b/rustdoc.html new file mode 100644 index 000000000..7739f6780 --- /dev/null +++ b/rustdoc.html @@ -0,0 +1,395 @@ + + + + + + Rustdoc overview - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    Rustdoc overview

    +

    rustdoc lives in-tree with the +compiler and standard library. This chapter is about how it works. +For information about Rustdoc's features and how to use them, see +the Rustdoc book. +For more details about how rustdoc works, see the +"Rustdoc internals" chapter.

    + +

    rustdoc uses rustc internals (and, of course, the standard library), so you +will have to build the compiler and std once before you can build rustdoc.

    +

    Rustdoc is implemented entirely within the crate librustdoc. It runs +the compiler up to the point where we have an internal representation of a +crate (HIR) and the ability to run some queries about the types of items. HIR +and queries are discussed in the linked chapters.

    +

    librustdoc performs two major steps after that to render a set of +documentation:

    +
      +
    • "Clean" the AST into a form that's more suited to creating documentation (and +slightly more resistant to churn in the compiler).
    • +
    • Use this cleaned AST to render a crate's documentation, one page at a time.
    • +
    +

    Naturally, there's more than just this, and those descriptions simplify out +lots of details, but that's the high-level overview.

    +

    (Side note: librustdoc is a library crate! The rustdoc binary is created +using the project in src/tools/rustdoc. Note that literally all that +does is call the main() that's in this crate's lib.rs, though.)

    +

    Cheat sheet

    +
      +
    • Run ./x setup tools before getting started. This will configure x +with nice settings for developing rustdoc and other tools, including +downloading a copy of rustc rather than building it.
    • +
    • Use ./x check rustdoc to quickly check for compile errors.
    • +
    • Use ./x build library rustdoc to make a usable +rustdoc you can run on other projects. +
        +
      • Add library/test to be able to use rustdoc --test.
      • +
      • Run rustup toolchain link stage2 build/host/stage2 to add a +custom toolchain called stage2 to your rustup environment. After +running that, cargo +stage2 doc in any directory will build with +your locally-compiled rustdoc.
      • +
      +
    • +
    • Use ./x doc library to use this rustdoc to generate the +standard library docs. +
        +
      • The completed docs will be available in build/host/doc (under core, alloc, and std).
      • +
      • If you want to copy those docs to a webserver, copy all of +build/host/doc, since that's where the CSS, JS, fonts, and landing +page are.
      • +
      • For frontend debugging, disable the rust.docs-minification option in bootstrap.toml.
      • +
      +
    • +
    • Use ./x test tests/rustdoc* to run the tests using a stage1 +rustdoc. + +
    • +
    +

    Code structure

    +

    All paths in this section are relative to src/librustdoc/ in the rust-lang/rust repository.

    +
      +
    • Most of the HTML printing code is in html/format.rs and html/render/mod.rs. +It's in a bunch of functions returning impl std::fmt::Display.
    • +
    • The data types that get rendered by the functions mentioned above are defined in clean/types.rs. +The functions responsible for creating them from the HIR and the rustc_middle::ty IR +live in clean/mod.rs.
    • +
    • The bits specific to using rustdoc as a test harness are in +doctest.rs.
    • +
    • The Markdown renderer is loaded up in html/markdown.rs, including functions +for extracting doctests from a given block of Markdown.
    • +
    • Frontend CSS and JavaScript are stored in html/static/. +
        +
      • Re. JavaScript, type annotations are written using TypeScript-flavored JSDoc +comments and an external .d.ts file. +This way, the code itself remains plain, valid JavaScript. +We only use tsc as a linter.
      • +
      +
    • +
    +

    Tests

    +

    rustdoc's integration tests are split across several test suites. +See Rustdoc tests suites for more details.

    +

    Constraints

    +

    We try to make rustdoc work reasonably well with JavaScript disabled, and when +browsing local files. We support +these browsers.

    +

    Supporting local files (file:/// URLs) brings some surprising restrictions. +Certain browser features that require secure origins, like localStorage and +Service Workers, don't work reliably. We can still use such features but we +should make sure pages are still usable without them.

    +

    Rustdoc does not type-check function bodies. +This works by overriding the built-in queries for typeck, +by silencing name resolution errors, and by not resolving opaque types. +This comes with several caveats: in particular, rustdoc cannot run any parts of the compiler that +require type-checking bodies; for example it cannot generate .rlib files or run most lints. +We want to move away from this model eventually, but we need some alternative for +the people using it; see various +previous zulip discussion. +For examples of code that breaks if this hack is removed, see +tests/rustdoc-ui/error-in-impl-trait.

    +

    Multiple runs, same output directory

    +

    Rustdoc can be run multiple times for varying inputs, with its output set to the +same directory. That's how cargo produces documentation for dependencies of the +current crate. It can also be done manually if a user wants a big +documentation bundle with all of the docs they care about.

    +

    HTML is generated independently for each crate, but there is some cross-crate +information that we update as we add crates to the output directory:

    +
      +
    • crates<SUFFIX>.js holds a list of all crates in the output directory.
    • +
    • search-index<SUFFIX>.js holds a list of all searchable items.
    • +
    • For each trait, there is a file under implementors/.../trait.TraitName.js +containing a list of implementors of that trait. The implementors may be in +different crates than the trait, and the JS file is updated as we discover +new ones.
    • +
    +

    Use cases

    +

    There are a few major use cases for rustdoc that you should keep in mind when +working on it:

    +

    Standard library docs

    +

    These are published at https://doc.rust-lang.org/std as part of the Rust release +process. Stable releases are also uploaded to specific versioned URLs like +https://doc.rust-lang.org/1.57.0/std/. Beta and nightly docs are published to +https://doc.rust-lang.org/beta/std/ and https://doc.rust-lang.org/nightly/std/. +The docs are uploaded with the promote-release +tool and served from S3 with +CloudFront.

    +

    The standard library docs contain five crates: alloc, core, proc_macro, std, and +test.

    +

    docs.rs

    +

    When crates are published to crates.io, docs.rs automatically builds +and publishes their documentation, for instance at +https://docs.rs/serde/latest/serde/. It always builds with the current nightly +rustdoc, so any changes you land in rustdoc are "insta-stable" in that they will +have an immediate public effect on docs.rs. Old documentation is not rebuilt, so +you will see some variation in UI when browsing old releases in docs.rs. Crate +authors can request rebuilds, which will be run with the latest rustdoc.

    +

    Docs.rs performs some transformations on rustdoc's output in order to save +storage and display a navigation bar at the top. In particular, certain static +files, like main.js and rustdoc.css, may be shared across multiple invocations +of the same version of rustdoc. Others, like crates.js and sidebar-items.js, are +different for different invocations. Still others, like fonts, will never +change. These categories are distinguished using the SharedResource enum in +src/librustdoc/html/render/write_shared.rs

    +

    Documentation on docs.rs is always generated for a single crate at a time, so +the search and sidebar functionality don't include dependencies of the current +crate.

    +

    Locally generated docs

    +

    Crate authors can run cargo doc --open in crates they have checked +out locally to see the docs. This is useful to check that the docs they +are writing are useful and display correctly. It can also be useful for +people to view documentation on crates they aren't authors of, but want to +use. In both cases, people may use --document-private-items Cargo flag to +see private methods, fields, and so on, which are normally not displayed.

    +

    By default cargo doc will generate documentation for a crate and all of its +dependencies. That can result in a very large documentation bundle, with a large +(and slow) search corpus. The Cargo flag --no-deps inhibits that behavior and +generates docs for just the crate.

    +

    Self-hosted project docs

    +

    Some projects like to host their own documentation. For example: +https://docs.serde.rs/. This is easy to do by locally generating docs, and +simply copying them to a web server. Rustdoc's HTML output can be extensively +customized by flags. Users can add a theme, set the default theme, and inject +arbitrary HTML. See rustdoc --help for details.

    + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + + diff --git a/sanitizers.html b/sanitizers.html new file mode 100644 index 000000000..80baf5d73 --- /dev/null +++ b/sanitizers.html @@ -0,0 +1,314 @@ + + + + + + Sanitizers support - Rust Compiler Development Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    Sanitizers support

    +

    The rustc compiler contains support for following sanitizers:

    +
      +
    • AddressSanitizer a faster memory error detector. Can +detect out-of-bounds access to heap, stack, and globals, use after free, use +after return, double free, invalid free, memory leaks.
    • +
    • ControlFlowIntegrity LLVM Control Flow Integrity (CFI) provides +forward-edge control flow protection.
    • +
    • Hardware-assisted AddressSanitizer a tool similar to +AddressSanitizer but based on partial hardware assistance.
    • +
    • KernelControlFlowIntegrity LLVM Kernel Control Flow Integrity +(KCFI) provides forward-edge control flow protection for operating systems +kernels.
    • +
    • LeakSanitizer a run-time memory leak detector.
    • +
    • MemorySanitizer a detector of uninitialized reads.
    • +
    • ThreadSanitizer a fast data race detector.
    • +
    +

    How to use the sanitizers?

    +

    To enable a sanitizer compile with -Z sanitizer=... option, where value is one +of address, cfi, hwaddress, kcfi, leak, memory or thread. For more +details on how to use sanitizers please refer to the sanitizer flag in the +unstable book.

    +

    How are sanitizers implemented in rustc?

    +

    The implementation of sanitizers (except CFI) relies almost entirely on LLVM. +The rustc is an integration point for LLVM compile time instrumentation passes +and runtime libraries. Highlight of the most important aspects of the +implementation:

    +
      +
    • +

      The sanitizer runtime libraries are part of the compiler-rt project, and +will be built on supported targets +when enabled in bootstrap.toml:

      +
      [build]
      +sanitizers = true
      +
      +

      The runtimes are placed into target libdir.

      +
    • +
    • +

      During LLVM code generation, the functions intended for instrumentation are +marked with appropriate LLVM attribute: +SanitizeAddress, SanitizeHWAddress, SanitizeMemory, or +SanitizeThread. By default all functions are instrumented, but this +behaviour can be changed with #[no_sanitize(...)].

      +
    • +
    • +

      The decision whether to perform instrumentation or not is possible only at a +function granularity. In the cases were those decision differ between +functions it might be necessary to inhibit inlining, both at MIR +level and LLVM level.

      +
    • +
    • +

      The LLVM IR generated by rustc is instrumented by dedicated LLVM +passes, different for each sanitizer. Instrumentation +passes are invoked after optimization passes.

      +
    • +
    • +

      When producing an executable, the sanitizer specific runtime library is +linked in. The libraries are searched for in the target +libdir. First relative to the overridden system root and subsequently +relative to the default system root. Fall-back to the default system root +ensures that sanitizer runtimes remain available when using sysroot overrides +constructed by cargo -Z build-std or xargo.

      +
    • +
    +

    Testing sanitizers

    +

    Sanitizers are validated by code generation tests in +tests/codegen/sanitize*.rs and end-to-end functional tests in +tests/ui/sanitizer/ directory.

    +

    Testing sanitizer functionality requires the sanitizer runtimes (built when +sanitizer = true in bootstrap.toml) and target providing support for particular +sanitizer. When sanitizer is unsupported on given target, sanitizers tests will +be ignored. This behaviour is controlled by compiletest needs-sanitizer-* +directives.

    +

    Enabling sanitizer on a new target

    +

    To enable a sanitizer on a new target which is already supported by LLVM:

    +
      +
    1. Include the sanitizer in the list of supported_sanitizers in the target +definition. rustc --target .. -Zsanitizer=.. should now +recognize sanitizer as supported.
    2. +
    3. Build the runtime for the target and include it in the libdir.
    4. +
    5. Teach compiletest that your target now supports the sanitizer. +Tests marked with needs-sanitizer-* should now run on the target.
    6. +
    7. Run tests ./x test --force-rerun tests/ui/sanitize/ to verify.
    8. +
    9. --enable-sanitizers in the CI configuration to build and +distribute the sanitizer runtime as part of the release process.
    10. +
    +

    Additional Information

    + + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + + diff --git a/searcher.js b/searcher.js new file mode 100644 index 000000000..7ee7bae40 --- /dev/null +++ b/searcher.js @@ -0,0 +1,526 @@ +'use strict'; + +/* global Mark, elasticlunr, path_to_root */ + +window.search = window.search || {}; +(function search(search) { + // Search functionality + // + // You can use !hasFocus() to prevent keyhandling in your key + // event handlers while the user is typing their search. + + if (!Mark || !elasticlunr) { + return; + } + + // eslint-disable-next-line max-len + // IE 11 Compatibility from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith + if (!String.prototype.startsWith) { + String.prototype.startsWith = function(search, pos) { + return this.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search; + }; + } + + const search_wrap = document.getElementById('search-wrapper'), + searchbar = document.getElementById('searchbar'), + searchresults = document.getElementById('searchresults'), + searchresults_outer = document.getElementById('searchresults-outer'), + searchresults_header = document.getElementById('searchresults-header'), + searchicon = document.getElementById('search-toggle'), + content = document.getElementById('content'), + + mark_exclude = [], + marker = new Mark(content), + URL_SEARCH_PARAM = 'search', + URL_MARK_PARAM = 'highlight', + + SEARCH_HOTKEY_KEYCODE = 83, + ESCAPE_KEYCODE = 27, + DOWN_KEYCODE = 40, + UP_KEYCODE = 38, + SELECT_KEYCODE = 13; + + let current_searchterm = '', + doc_urls = [], + search_options = { + bool: 'AND', + expand: true, + fields: { + title: {boost: 1}, + body: {boost: 1}, + breadcrumbs: {boost: 0}, + }, + }, + searchindex = null, + results_options = { + teaser_word_count: 30, + limit_results: 30, + }, + teaser_count = 0; + + function hasFocus() { + return searchbar === document.activeElement; + } + + function removeChildren(elem) { + while (elem.firstChild) { + elem.removeChild(elem.firstChild); + } + } + + // Helper to parse a url into its building blocks. + function parseURL(url) { + const a = document.createElement('a'); + a.href = url; + return { + source: url, + protocol: a.protocol.replace(':', ''), + host: a.hostname, + port: a.port, + params: (function() { + const ret = {}; + const seg = a.search.replace(/^\?/, '').split('&'); + for (const part of seg) { + if (!part) { + continue; + } + const s = part.split('='); + ret[s[0]] = s[1]; + } + return ret; + })(), + file: (a.pathname.match(/\/([^/?#]+)$/i) || ['', ''])[1], + hash: a.hash.replace('#', ''), + path: a.pathname.replace(/^([^/])/, '/$1'), + }; + } + + // Helper to recreate a url string from its building blocks. + function renderURL(urlobject) { + let url = urlobject.protocol + '://' + urlobject.host; + if (urlobject.port !== '') { + url += ':' + urlobject.port; + } + url += urlobject.path; + let joiner = '?'; + for (const prop in urlobject.params) { + if (Object.prototype.hasOwnProperty.call(urlobject.params, prop)) { + url += joiner + prop + '=' + urlobject.params[prop]; + joiner = '&'; + } + } + if (urlobject.hash !== '') { + url += '#' + urlobject.hash; + } + return url; + } + + // Helper to escape html special chars for displaying the teasers + const escapeHTML = (function() { + const MAP = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + '\'': ''', + }; + const repl = function(c) { + return MAP[c]; + }; + return function(s) { + return s.replace(/[&<>'"]/g, repl); + }; + })(); + + function formatSearchMetric(count, searchterm) { + if (count === 1) { + return count + ' search result for \'' + searchterm + '\':'; + } else if (count === 0) { + return 'No search results for \'' + searchterm + '\'.'; + } else { + return count + ' search results for \'' + searchterm + '\':'; + } + } + + function formatSearchResult(result, searchterms) { + const teaser = makeTeaser(escapeHTML(result.doc.body), searchterms); + teaser_count++; + + // The ?URL_MARK_PARAM= parameter belongs inbetween the page and the #heading-anchor + const url = doc_urls[result.ref].split('#'); + if (url.length === 1) { // no anchor found + url.push(''); + } + + // encodeURIComponent escapes all chars that could allow an XSS except + // for '. Due to that we also manually replace ' with its url-encoded + // representation (%27). + const encoded_search = encodeURIComponent(searchterms.join(' ')).replace(/'/g, '%27'); + + return '' + + result.doc.breadcrumbs + '' + '' + teaser + ''; + } + + function makeTeaser(body, searchterms) { + // The strategy is as follows: + // First, assign a value to each word in the document: + // Words that correspond to search terms (stemmer aware): 40 + // Normal words: 2 + // First word in a sentence: 8 + // Then use a sliding window with a constant number of words and count the + // sum of the values of the words within the window. Then use the window that got the + // maximum sum. If there are multiple maximas, then get the last one. + // Enclose the terms in . + const stemmed_searchterms = searchterms.map(function(w) { + return elasticlunr.stemmer(w.toLowerCase()); + }); + const searchterm_weight = 40; + const weighted = []; // contains elements of ["word", weight, index_in_document] + // split in sentences, then words + const sentences = body.toLowerCase().split('. '); + let index = 0; + let value = 0; + let searchterm_found = false; + for (const sentenceindex in sentences) { + const words = sentences[sentenceindex].split(' '); + value = 8; + for (const wordindex in words) { + const word = words[wordindex]; + if (word.length > 0) { + for (const searchtermindex in stemmed_searchterms) { + if (elasticlunr.stemmer(word).startsWith( + stemmed_searchterms[searchtermindex]) + ) { + value = searchterm_weight; + searchterm_found = true; + } + } + weighted.push([word, value, index]); + value = 2; + } + index += word.length; + index += 1; // ' ' or '.' if last word in sentence + } + index += 1; // because we split at a two-char boundary '. ' + } + + if (weighted.length === 0) { + return body; + } + + const window_weight = []; + const window_size = Math.min(weighted.length, results_options.teaser_word_count); + + let cur_sum = 0; + for (let wordindex = 0; wordindex < window_size; wordindex++) { + cur_sum += weighted[wordindex][1]; + } + window_weight.push(cur_sum); + for (let wordindex = 0; wordindex < weighted.length - window_size; wordindex++) { + cur_sum -= weighted[wordindex][1]; + cur_sum += weighted[wordindex + window_size][1]; + window_weight.push(cur_sum); + } + + let max_sum_window_index = 0; + if (searchterm_found) { + let max_sum = 0; + // backwards + for (let i = window_weight.length - 1; i >= 0; i--) { + if (window_weight[i] > max_sum) { + max_sum = window_weight[i]; + max_sum_window_index = i; + } + } + } else { + max_sum_window_index = 0; + } + + // add around searchterms + const teaser_split = []; + index = weighted[max_sum_window_index][2]; + for (let i = max_sum_window_index; i < max_sum_window_index + window_size; i++) { + const word = weighted[i]; + if (index < word[2]) { + // missing text from index to start of `word` + teaser_split.push(body.substring(index, word[2])); + index = word[2]; + } + if (word[1] === searchterm_weight) { + teaser_split.push(''); + } + index = word[2] + word[0].length; + teaser_split.push(body.substring(word[2], index)); + if (word[1] === searchterm_weight) { + teaser_split.push(''); + } + } + + return teaser_split.join(''); + } + + function init(config) { + results_options = config.results_options; + search_options = config.search_options; + doc_urls = config.doc_urls; + searchindex = elasticlunr.Index.load(config.index); + + // Set up events + searchicon.addEventListener('click', () => { + searchIconClickHandler(); + }, false); + searchbar.addEventListener('keyup', () => { + searchbarKeyUpHandler(); + }, false); + document.addEventListener('keydown', e => { + globalKeyHandler(e); + }, false); + // If the user uses the browser buttons, do the same as if a reload happened + window.onpopstate = () => { + doSearchOrMarkFromUrl(); + }; + // Suppress "submit" events so the page doesn't reload when the user presses Enter + document.addEventListener('submit', e => { + e.preventDefault(); + }, false); + + // If reloaded, do the search or mark again, depending on the current url parameters + doSearchOrMarkFromUrl(); + } + + function unfocusSearchbar() { + // hacky, but just focusing a div only works once + const tmp = document.createElement('input'); + tmp.setAttribute('style', 'position: absolute; opacity: 0;'); + searchicon.appendChild(tmp); + tmp.focus(); + tmp.remove(); + } + + // On reload or browser history backwards/forwards events, parse the url and do search or mark + function doSearchOrMarkFromUrl() { + // Check current URL for search request + const url = parseURL(window.location.href); + if (Object.prototype.hasOwnProperty.call(url.params, URL_SEARCH_PARAM) + && url.params[URL_SEARCH_PARAM] !== '') { + showSearch(true); + searchbar.value = decodeURIComponent( + (url.params[URL_SEARCH_PARAM] + '').replace(/\+/g, '%20')); + searchbarKeyUpHandler(); // -> doSearch() + } else { + showSearch(false); + } + + if (Object.prototype.hasOwnProperty.call(url.params, URL_MARK_PARAM)) { + const words = decodeURIComponent(url.params[URL_MARK_PARAM]).split(' '); + marker.mark(words, { + exclude: mark_exclude, + }); + + const markers = document.querySelectorAll('mark'); + const hide = () => { + for (let i = 0; i < markers.length; i++) { + markers[i].classList.add('fade-out'); + window.setTimeout(() => { + marker.unmark(); + }, 300); + } + }; + + for (let i = 0; i < markers.length; i++) { + markers[i].addEventListener('click', hide); + } + } + } + + // Eventhandler for keyevents on `document` + function globalKeyHandler(e) { + if (e.altKey || + e.ctrlKey || + e.metaKey || + e.shiftKey || + e.target.type === 'textarea' || + e.target.type === 'text' || + !hasFocus() && /^(?:input|select|textarea)$/i.test(e.target.nodeName) + ) { + return; + } + + if (e.keyCode === ESCAPE_KEYCODE) { + e.preventDefault(); + searchbar.classList.remove('active'); + setSearchUrlParameters('', + searchbar.value.trim() !== '' ? 'push' : 'replace'); + if (hasFocus()) { + unfocusSearchbar(); + } + showSearch(false); + marker.unmark(); + } else if (!hasFocus() && e.keyCode === SEARCH_HOTKEY_KEYCODE) { + e.preventDefault(); + showSearch(true); + window.scrollTo(0, 0); + searchbar.select(); + } else if (hasFocus() && e.keyCode === DOWN_KEYCODE) { + e.preventDefault(); + unfocusSearchbar(); + searchresults.firstElementChild.classList.add('focus'); + } else if (!hasFocus() && (e.keyCode === DOWN_KEYCODE + || e.keyCode === UP_KEYCODE + || e.keyCode === SELECT_KEYCODE)) { + // not `:focus` because browser does annoying scrolling + const focused = searchresults.querySelector('li.focus'); + if (!focused) { + return; + } + e.preventDefault(); + if (e.keyCode === DOWN_KEYCODE) { + const next = focused.nextElementSibling; + if (next) { + focused.classList.remove('focus'); + next.classList.add('focus'); + } + } else if (e.keyCode === UP_KEYCODE) { + focused.classList.remove('focus'); + const prev = focused.previousElementSibling; + if (prev) { + prev.classList.add('focus'); + } else { + searchbar.select(); + } + } else { // SELECT_KEYCODE + window.location.assign(focused.querySelector('a')); + } + } + } + + function showSearch(yes) { + if (yes) { + search_wrap.classList.remove('hidden'); + searchicon.setAttribute('aria-expanded', 'true'); + } else { + search_wrap.classList.add('hidden'); + searchicon.setAttribute('aria-expanded', 'false'); + const results = searchresults.children; + for (let i = 0; i < results.length; i++) { + results[i].classList.remove('focus'); + } + } + } + + function showResults(yes) { + if (yes) { + searchresults_outer.classList.remove('hidden'); + } else { + searchresults_outer.classList.add('hidden'); + } + } + + // Eventhandler for search icon + function searchIconClickHandler() { + if (search_wrap.classList.contains('hidden')) { + showSearch(true); + window.scrollTo(0, 0); + searchbar.select(); + } else { + showSearch(false); + } + } + + // Eventhandler for keyevents while the searchbar is focused + function searchbarKeyUpHandler() { + const searchterm = searchbar.value.trim(); + if (searchterm !== '') { + searchbar.classList.add('active'); + doSearch(searchterm); + } else { + searchbar.classList.remove('active'); + showResults(false); + removeChildren(searchresults); + } + + setSearchUrlParameters(searchterm, 'push_if_new_search_else_replace'); + + // Remove marks + marker.unmark(); + } + + // Update current url with ?URL_SEARCH_PARAM= parameter, remove ?URL_MARK_PARAM and + // `#heading-anchor`. `action` can be one of "push", "replace", + // "push_if_new_search_else_replace" and replaces or pushes a new browser history item. + // "push_if_new_search_else_replace" pushes if there is no `?URL_SEARCH_PARAM=abc` yet. + function setSearchUrlParameters(searchterm, action) { + const url = parseURL(window.location.href); + const first_search = !Object.prototype.hasOwnProperty.call(url.params, URL_SEARCH_PARAM); + + if (searchterm !== '' || action === 'push_if_new_search_else_replace') { + url.params[URL_SEARCH_PARAM] = searchterm; + delete url.params[URL_MARK_PARAM]; + url.hash = ''; + } else { + delete url.params[URL_MARK_PARAM]; + delete url.params[URL_SEARCH_PARAM]; + } + // A new search will also add a new history item, so the user can go back + // to the page prior to searching. A updated search term will only replace + // the url. + if (action === 'push' || action === 'push_if_new_search_else_replace' && first_search ) { + history.pushState({}, document.title, renderURL(url)); + } else if (action === 'replace' || + action === 'push_if_new_search_else_replace' && + !first_search + ) { + history.replaceState({}, document.title, renderURL(url)); + } + } + + function doSearch(searchterm) { + // Don't search the same twice + if (current_searchterm === searchterm) { + return; + } else { + current_searchterm = searchterm; + } + + if (searchindex === null) { + return; + } + + // Do the actual search + const results = searchindex.search(searchterm, search_options); + const resultcount = Math.min(results.length, results_options.limit_results); + + // Display search metrics + searchresults_header.innerText = formatSearchMetric(resultcount, searchterm); + + // Clear and insert results + const searchterms = searchterm.split(' '); + removeChildren(searchresults); + for (let i = 0; i < resultcount ; i++) { + const resultElem = document.createElement('li'); + resultElem.innerHTML = formatSearchResult(results[i], searchterms); + searchresults.appendChild(resultElem); + } + + // Display results + showResults(true); + } + + function loadScript(url, id) { + const script = document.createElement('script'); + script.src = url; + script.id = id; + script.onload = () => init(window.search); + script.onerror = error => { + console.error(`Failed to load \`${url}\`: ${error}`); + }; + document.head.append(script); + } + + loadScript(path_to_root + 'searchindex.js', 'search-index'); + + // Exported functions + search.hasFocus = hasFocus; +})(window.search); diff --git a/searchindex.js b/searchindex.js new file mode 100644 index 000000000..dd5840361 --- /dev/null +++ b/searchindex.js @@ -0,0 +1 @@ +Object.assign(window.search, {"doc_urls":["getting-started.html#getting-started","getting-started.html#asking-questions","getting-started.html#experts","getting-started.html#etiquette","getting-started.html#what-should-i-work-on","getting-started.html#easy-or-mentored-issues","getting-started.html#recurring-work","getting-started.html#clippy-issues","getting-started.html#diagnostic-issues","getting-started.html#picking-up-abandoned-pull-requests","getting-started.html#writing-tests","getting-started.html#contributing-to-std-standard-library","getting-started.html#contributing-code-to-other-rust-projects","getting-started.html#other-ways-to-contribute","getting-started.html#cloning-and-building","getting-started.html#contributor-procedures","getting-started.html#other-resources","about-this-guide.html#about-this-guide","about-this-guide.html#constant-change","about-this-guide.html#other-places-to-find-information","building/how-to-build-and-run.html#how-to-build-and-run-the-compiler","building/how-to-build-and-run.html#quick-start","building/how-to-build-and-run.html#get-the-source-code","building/how-to-build-and-run.html#partial-clone-the-repository","building/how-to-build-and-run.html#shallow-clone-the-repository","building/how-to-build-and-run.html#what-is-xpy","building/how-to-build-and-run.html#running-xpy","building/how-to-build-and-run.html#create-a-bootstraptoml","building/how-to-build-and-run.html#common-x-commands","building/how-to-build-and-run.html#building-the-compiler","building/how-to-build-and-run.html#build-specific-components","building/how-to-build-and-run.html#creating-a-rustup-toolchain","building/how-to-build-and-run.html#building-targets-for-cross-compilation","building/how-to-build-and-run.html#other-x-commands","building/how-to-build-and-run.html#cleaning-out-build-directories","building/how-to-build-and-run.html#remarks-on-disk-space","building/quickstart.html#quickstart","building/prerequisites.html#prerequisites","building/prerequisites.html#dependencies","building/prerequisites.html#hardware","building/suggested.html#suggested-workflows","building/suggested.html#installing-a-pre-push-hook","building/suggested.html#config-extensions","building/suggested.html#configuring-rust-analyzer-for-rustc","building/suggested.html#checking-the-library-tree","building/suggested.html#project-local-rust-analyzer-setup","building/suggested.html#using-a-separate-build-directory-for-rust-analyzer","building/suggested.html#visual-studio-code","building/suggested.html#neovim","building/suggested.html#emacs","building/suggested.html#helix","building/suggested.html#zed","building/suggested.html#check-check-and-check-again","building/suggested.html#x-suggest","building/suggested.html#configuring-rustup-to-use-nightly","building/suggested.html#faster-builds-with-ci-rustc","building/suggested.html#using-incremental-compilation","building/suggested.html#fine-tuning-optimizations","building/suggested.html#working-on-multiple-branches-at-the-same-time","building/suggested.html#working-with-nix","building/suggested.html#note","building/suggested.html#shell-completions","building/build-install-distribution-artifacts.html#build-distribution-artifacts","building/build-install-distribution-artifacts.html#install-from-source","building/compiler-documenting.html#building-documentation","rustdoc.html#rustdoc-overview","rustdoc.html#cheat-sheet","rustdoc.html#code-structure","rustdoc.html#tests","rustdoc.html#constraints","rustdoc.html#multiple-runs-same-output-directory","rustdoc.html#use-cases","rustdoc.html#standard-library-docs","rustdoc.html#docsrs","rustdoc.html#locally-generated-docs","rustdoc.html#self-hosted-project-docs","building/new-target.html#adding-a-new-target","building/new-target.html#specifying-a-new-llvm","building/new-target.html#using-pre-built-llvm","building/new-target.html#creating-a-target-specification","building/new-target.html#adding-a-target-specification","building/new-target.html#patching-crates","building/new-target.html#cross-compiling","building/new-target.html#promoting-a-target-from-tier-2-target-to-tier-2-host","building/optimized-build.html#optimized-build-of-the-compiler","building/optimized-build.html#link-time-optimization","building/optimized-build.html#memory-allocator","building/optimized-build.html#codegen-units","building/optimized-build.html#instruction-set","building/optimized-build.html#profile-guided-optimization","tests/intro.html#testing-the-compiler","tests/intro.html#kinds-of-tests","tests/intro.html#compiletest","tests/intro.html#package-tests","tests/intro.html#tidy","tests/intro.html#formatting","tests/intro.html#book-documentation-tests","tests/intro.html#documentation-link-checker","tests/intro.html#dist-check","tests/intro.html#tool-tests","tests/intro.html#ecosystem-testing","tests/intro.html#performance-testing","tests/intro.html#codegen-backend-testing","tests/intro.html#miscellaneous-information","tests/intro.html#further-reading","tests/running.html#running-tests","tests/running.html#running-a-subset-of-the-test-suites","tests/running.html#run-only-the-tidy-script","tests/running.html#run-tests-on-the-standard-library","tests/running.html#run-the-tidy-script-and-tests-on-the-standard-library","tests/running.html#run-tests-on-the-standard-library-using-a-stage-1-compiler","tests/running.html#run-all-tests-using-a-stage-2-compiler","tests/running.html#run-unit-tests-on-the-compilerlibrary","tests/running.html#running-an-individual-test","tests/running.html#passing-arguments-to-rustc-when-running-tests","tests/running.html#editing-and-updating-the-reference-files","tests/running.html#configuring-test-running","tests/running.html#passing---pass-mode","tests/running.html#running-tests-with-different-compare-modes","tests/running.html#running-tests-manually","tests/running.html#running-tests-on-a-remote-machine","tests/running.html#testing-on-emulators","tests/running.html#running-rustc_codegen_gcc-tests","tests/docker.html#testing-with-docker","tests/docker.html#the-runsh-script","tests/docker.html#interactive-mode","tests/ci.html#testing-with-ci","tests/ci.html#ci-workflow","tests/ci.html#pull-request-builds","tests/ci.html#auto-builds","tests/ci.html#try-builds","tests/ci.html#modifying-ci-jobs","tests/ci.html#merging-prs-serially-with-bors","tests/ci.html#rollups","tests/ci.html#docker","tests/ci.html#caching","tests/ci.html#docker-images-caching","tests/ci.html#llvm-caching-with-sccache","tests/ci.html#custom-tooling-around-ci","tests/ci.html#rust-log-analyzer-to-show-the-error-message-in-prs","tests/ci.html#toolstate-to-support-allowed-failures","tests/ci.html#public-ci-dashboard","tests/ci.html#determining-the-ci-configuration","tests/adding.html#adding-new-tests","tests/adding.html#ui-test-walkthrough","tests/adding.html#step-1-add-a-test-file","tests/adding.html#step-2-generate-the-expected-output","tests/adding.html#step-3-add-error-annotations","tests/adding.html#step-4-review-the-output","tests/adding.html#step-5-check-other-tests","tests/adding.html#comment-explaining-what-the-test-is-about","tests/best-practices.html#best-practices-for-writing-tests","tests/best-practices.html#test-naming","tests/best-practices.html#test-organization","tests/best-practices.html#test-descriptions","tests/best-practices.html#test-content","tests/best-practices.html#flaky-tests","tests/best-practices.html#compiletest-directives","tests/best-practices.html#filecheck-best-practices","tests/compiletest.html#compiletest","tests/compiletest.html#introduction","tests/compiletest.html#test-suites","tests/compiletest.html#compiler-specific-test-suites","tests/compiletest.html#general-purpose-test-suite","tests/compiletest.html#rustdoc-test-suites","tests/compiletest.html#pretty-printer-tests","tests/compiletest.html#incremental-tests","tests/compiletest.html#debuginfo-tests","tests/compiletest.html#codegen-tests","tests/compiletest.html#assembly-tests","tests/compiletest.html#codegen-units-tests","tests/compiletest.html#mir-opt-tests","tests/compiletest.html#run-make-tests","tests/compiletest.html#coverage-tests","tests/compiletest.html#crashes-tests","tests/compiletest.html#building-auxiliary-crates","tests/compiletest.html#auxiliary-proc-macro","tests/compiletest.html#revisions","tests/compiletest.html#ignoring-unused-revision-names","tests/compiletest.html#compare-modes","tests/ui.html#ui-tests","tests/ui.html#introduction","tests/ui.html#general-structure-of-a-test","tests/ui.html#output-comparison","tests/ui.html#normalization","tests/ui.html#error-annotations","tests/ui.html#error-annotation-examples","tests/ui.html#error-pattern","tests/ui.html#diagnostic-kinds-error-levels","tests/ui.html#cfg-revisions","tests/ui.html#controlling-passfail-expectations","tests/ui.html#known-bugs","tests/ui.html#test-organization","tests/ui.html#rustfix-tests","tests/ui.html#compare-modes","tests/ui.html#rustc_-test-attributes","tests/ui.html#ui-test-mode-preset-lint-levels","tests/directives.html#compiletest-directives","tests/directives.html#listing-of-compiletest-directives","tests/directives.html#assembly","tests/directives.html#auxiliary-builds","tests/directives.html#controlling-outcome-expectations","tests/directives.html#controlling-output-snapshots-and-normalizations","tests/directives.html#controlling-when-tests-are-run","tests/directives.html#affecting-how-tests-are-built","tests/directives.html#rustdoc","tests/directives.html#pretty-printing","tests/directives.html#tool-specific-directives","tests/directives.html#substitutions","tests/directives.html#adding-a-directive","tests/directives.html#adding-a-new-directive-parser","tests/directives.html#implementing-the-behavior-change","tests/minicore.html#minicore-test-auxiliary-using-core-stubs","tests/minicore.html#implied-compiler-flags","tests/minicore.html#adding-more-core-stubs","tests/minicore.html#example-codegen-test-that-uses-minicore","tests/ecosystem.html#ecosystem-testing","tests/ecosystem.html#testing-methods","tests/ecosystem.html#crater","tests/ecosystem.html#cargotest","tests/ecosystem.html#large-oss-project-builders","tests/crater.html#crater","tests/crater.html#when-to-run-crater","tests/crater.html#requesting-crater-runs","tests/ecosystem-test-jobs/fuchsia.html#fuchsia-integration-tests","tests/ecosystem-test-jobs/fuchsia.html#what-to-do-if-the-fuchsia-job-breaks","tests/ecosystem-test-jobs/fuchsia.html#building-fuchsia-in-ci","tests/ecosystem-test-jobs/fuchsia.html#building-fuchsia-locally","tests/ecosystem-test-jobs/fuchsia.html#modifying-the-fuchsia-checkout","tests/ecosystem-test-jobs/fuchsia.html#customizing-the-fuchsia-build","tests/ecosystem-test-jobs/fuchsia.html#fuchsia-target-support","tests/ecosystem-test-jobs/rust-for-linux.html#rust-for-linux-integration-tests","tests/ecosystem-test-jobs/rust-for-linux.html#what-to-do-if-the-rust-for-linux-job-breaks","tests/ecosystem-test-jobs/rust-for-linux.html#building-rust-for-linux-in-ci","tests/codegen-backend-tests/intro.html#codegen-backend-testing","tests/codegen-backend-tests/cg_clif.html#cranelift-codegen-backend-tests","tests/codegen-backend-tests/cg_gcc.html#gcc-codegen-backend-tests","tests/perf.html#performance-testing","tests/perf.html#rustc-perf","tests/perf.html#automatic-perf-runs","tests/perf.html#manual-perf-runs","tests/suggest-tests.html#suggest-tests-tool","tests/suggest-tests.html#internals","tests/suggest-tests.html#static-suggestions","tests/suggest-tests.html#dynamic-suggestions","tests/suggest-tests.html#adding-a-suggestion","tests/misc.html#miscellaneous-testing-related-info","tests/misc.html#rustc_bootstrap-and-stability","compiler-debugging.html#debugging-the-compiler","compiler-debugging.html#configuring-the-compiler","compiler-debugging.html#suppressing-the-ice-file","compiler-debugging.html#getting-a-backtrace","compiler-debugging.html#-z-flags","compiler-debugging.html#getting-a-backtrace-for-errors","compiler-debugging.html#debugging-delayed-bugs","compiler-debugging.html#getting-the-error-creation-location","compiler-debugging.html#getting-logging-output","compiler-debugging.html#narrowing-bisecting-regressions","compiler-debugging.html#downloading-artifacts-from-rusts-ci","compiler-debugging.html#rustc_-test-attributes","compiler-debugging.html#formatting-graphviz-output-dot-files","compiler-debugging.html#debugging-type-layouts","compiler-debugging.html#configuring-codelldb-for-debugging-rustc","tracing.html#using-tracing-to-debug-the-compiler","tracing.html#function-level-filters","tracing.html#i-dont-want-everything","tracing.html#i-dont-want-all-calls","tracing.html#query-level-filters","tracing.html#broad-module-level-filters","tracing.html#log-colors","tracing.html#how-to-keep-or-remove-debug-and-trace-calls-from-the-resulting-binary","tracing.html#logging-etiquette-and-conventions","profiling.html#profiling-the-compiler","profiling.html#optimizing-rustcs-bootstrap-times-with-cargo-llvm-lines","profiling/with_perf.html#profiling-with-perf","profiling/with_perf.html#initial-steps","profiling/with_perf.html#gathering-a-perf-profile","profiling/with_perf.html#the-basics","profiling/with_perf.html#gathering-a-perf-profile-from-a-perfrust-langorg-test","profiling/with_perf.html#gathering-nll-data","profiling/with_perf.html#analyzing-a-perf-profile-with-perf-focus","profiling/with_perf.html#installing-perf-focus","profiling/with_perf.html#example-how-much-time-is-spent-in-mir-borrowck","profiling/with_perf.html#example-how-much-time-does-mir-borrowck-spend-solving-traits","profiling/with_perf.html#example-where-does-mir-borrowck-spend-its-time","profiling/with_perf.html#relative-percentages","profiling/wpa_profiling.html#profiling-on-windows","profiling/wpa_profiling.html#introducing-wpr-and-wpa","profiling/wpa_profiling.html#installing-wpr-and-wpa","profiling/wpa_profiling.html#recording","profiling/wpa_profiling.html#analysis","profiling/wpa_profiling.html#other-analysis-tabs","profiling/with_rustc_perf.html#profiling-with-rustc-perf","crates-io.html#cratesio-dependencies","crates-io.html#permitted-dependencies","contributing.html#contribution-procedures","contributing.html#bug-reports","contributing.html#bug-fixes-or-normal-code-changes","contributing.html#new-features","contributing.html#breaking-changes","contributing.html#major-changes","contributing.html#performance","contributing.html#pull-requests","contributing.html#keeping-your-branch-up-to-date","contributing.html#r","contributing.html#waiting-for-reviews","contributing.html#ci","contributing.html#r-1","contributing.html#opening-a-pr","contributing.html#reverting-a-pr","contributing.html#external-dependencies","contributing.html#writing-documentation","contributing.html#contributing-to-rustc-dev-guide","contributing.html#issue-triage","contributing.html#rfcbot-labels","contributing.html#helpful-links-and-information","compiler-team.html#about-the-compiler-team","compiler-team.html#discussion","compiler-team.html#reviewers","compiler-team.html#rust-compiler-meeting","compiler-team.html#team-membership","compiler-team.html#r-rights","compiler-team.html#reviewer-rotation","compiler-team.html#full-team-membership","git.html#using-git","git.html#prerequisites","git.html#standard-process","git.html#troubleshooting-git-issues","git.html#i-made-a-merge-commit-by-accident","git.html#i-deleted-my-fork-on-github","git.html#i-changed-a-submodule-by-accident","git.html#i-see-error-cannot-rebase-when-i-try-to-rebase","git.html#i-see-untracked-files-srcstdarch","git.html#i-see--head","git.html#failed-to-push-some-refs","git.html#git-is-trying-to-rebase-commits-i-didnt-write","git.html#quick-note-about-submodules","git.html#rebasing-and-conflicts","git.html#rebasing","git.html#keeping-things-up-to-date","git.html#advanced-rebasing","git.html#squash-your-commits","git.html#git-range-diff","git.html#no-merge-policy","git.html#tips-for-reviewing","git.html#hiding-whitespace","git.html#fetching-prs","git.html#moving-large-sections-of-code","git.html#range-diff","git.html#ignoring-changes-to-specific-files","git.html#git-submodules","git.html#hard-resetting-submodules","git.html#deinit-git-submodules","git.html#overcoming-fatal-not-a-git-repository-gitmodules","git.html#ignoring-commits-during-git-blame","rustbot.html#mastering-rustbot","rustbot.html#issue-claiming","rustbot.html#issue-relabeling","rustbot.html#other-commands","walkthrough.html#walkthrough-a-typical-contribution","walkthrough.html#overview","walkthrough.html#pre-rfc-and-rfc","walkthrough.html#implementation","walkthrough.html#refining-your-implementation","walkthrough.html#stabilization","implementing_new_features.html#implementing-new-language-features","implementing_new_features.html#the-rfcbot-fcp-process","implementing_new_features.html#the-logistics-of-writing-features","implementing_new_features.html#warning-cycles","implementing_new_features.html#stability","implementing_new_features.html#tracking-issues","implementing_new_features.html#stability-in-code","stability.html#stability-attributes","stability.html#unstable","stability.html#stable","stability.html#rustc_const_unstable","stability.html#rustc_const_stable","stability.html#rustc_const_stable_indirect","stability.html#rustc_intrinsic_const_stable_indirect","stability.html#rustc_default_body_unstable","stability.html#stabilizing-a-library-feature","stability.html#allow_internal_unstable","stability.html#rustc_allow_const_fn_unstable","stability.html#staged_api","stability.html#deprecated","stabilization_guide.html#request-for-stabilization","stabilization_guide.html#documentation-prs","stabilization_guide.html#write-a-stabilization-report","stabilization_guide.html#fcp","stabilization_guide.html#stabilization-pr","stabilization_guide.html#updating-the-feature-gate-listing","stabilization_guide.html#removing-existing-uses-of-the-feature-gate","stabilization_guide.html#do-not-require-the-feature-gate-to-use-the-feature","feature-gates.html#feature-gates","feature-gates.html#adding-a-feature-gate","feature-gates.html#removing-a-feature-gate","feature-gates.html#renaming-a-feature-gate","feature-gates.html#stabilizing-a-feature","conventions.html#coding-conventions","conventions.html#formatting-and-the-tidy-script","conventions.html#formatting-c-code","conventions.html#formatting-and-linting-python-code","conventions.html#copyright-notice","conventions.html#line-length","conventions.html#tabs-vs-spaces","conventions.html#coding-for-correctness","conventions.html#prefer-exhaustive-matches","conventions.html#use-todo-comments-for-things-you-dont-want-to-forget","conventions.html#using-crates-from-cratesio","conventions.html#how-to-structure-your-pr","conventions.html#naming-conventions","bug-fix-procedure.html#procedures-for-breaking-changes","bug-fix-procedure.html#motivation","bug-fix-procedure.html#what-qualifies-as-a-bug-fix","bug-fix-procedure.html#detailed-design","bug-fix-procedure.html#tracking-issue","bug-fix-procedure.html#issuing-future-compatibility-warnings","bug-fix-procedure.html#stabilization","bug-fix-procedure.html#removing-a-lint","external-repos.html#using-external-repositories","external-repos.html#external-dependencies-subtrees","external-repos.html#synchronizing-a-subtree","external-repos.html#creating-a-new-subtree-dependency","external-repos.html#external-dependencies-submodules","fuzzing.html#fuzzing","fuzzing.html#guidelines","fuzzing.html#in-a-nutshell","fuzzing.html#discussion","fuzzing.html#building-a-corpus","fuzzing.html#extra-credit","fuzzing.html#minimization","fuzzing.html#effective-fuzzing","fuzzing.html#existing-projects","notification-groups/about.html#notification-groups","notification-groups/about.html#list-of-notification-groups","notification-groups/about.html#what-issues-are-a-good-fit-for-notification-groups","notification-groups/about.html#joining-a-notification-group","notification-groups/about.html#tagging-an-issue-for-a-notification-group","notification-groups/apple.html#apple-notification-group","notification-groups/apple.html#deployment-targets","notification-groups/apple.html#the-app-store-and-private-apis","notification-groups/arm.html#arm-notification-group","notification-groups/emscripten.html#emscripten-notification-group","notification-groups/fuchsia.html#fuchsia-notification-group","notification-groups/risc-v.html#risc-v-notification-group","notification-groups/rust-for-linux.html#rust-for-linux-notification-group","notification-groups/wasi.html#wasi-notification-group","notification-groups/wasm.html#webassembly-wasm-notification-group","notification-groups/windows.html#windows-notification-group","licenses.html#rust-langrust-licenses","licenses.html#guidelines-for-reviewers","licenses.html#porting","guides/editions.html#editions","guides/editions.html#edition-definition","guides/editions.html#adding-a-new-edition","guides/editions.html#features-and-edition-stability","guides/editions.html#edition-parsing","guides/editions.html#keywords","guides/editions.html#edition-hygiene","guides/editions.html#lints","guides/editions.html#migration-lints","guides/editions.html#edition-specific-lints","guides/editions.html#lints-and-stability","guides/editions.html#idiom-lints","guides/editions.html#standard-library-changes","guides/editions.html#preludes","guides/editions.html#customized-language-behavior","guides/editions.html#migrating-the-standard-library-edition","guides/editions.html#stabilizing-an-edition","building/bootstrapping/intro.html#bootstrapping-the-compiler","building/bootstrapping/what-bootstrapping-does.html#what-bootstrapping-does","building/bootstrapping/what-bootstrapping-does.html#stages-of-bootstrapping","building/bootstrapping/what-bootstrapping-does.html#overview","building/bootstrapping/what-bootstrapping-does.html#stage-0-the-pre-compiled-compiler","building/bootstrapping/what-bootstrapping-does.html#stage-1-from-current-code-by-an-earlier-compiler","building/bootstrapping/what-bootstrapping-does.html#stage-2-the-truly-current-compiler","building/bootstrapping/what-bootstrapping-does.html#stage-3-the-same-result-test","building/bootstrapping/what-bootstrapping-does.html#building-the-stages","building/bootstrapping/what-bootstrapping-does.html#complications-of-bootstrapping","building/bootstrapping/what-bootstrapping-does.html#understanding-stages-of-bootstrap","building/bootstrapping/what-bootstrapping-does.html#overview-1","building/bootstrapping/what-bootstrapping-does.html#building-vs-running","building/bootstrapping/what-bootstrapping-does.html#stages-and-std","building/bootstrapping/what-bootstrapping-does.html#cross-compiling-rustc","building/bootstrapping/what-bootstrapping-does.html#what-is-a-sysroot","building/bootstrapping/what-bootstrapping-does.html#passing-flags-to-commands-invoked-by-bootstrap","building/bootstrapping/what-bootstrapping-does.html#environment-variables","building/bootstrapping/what-bootstrapping-does.html#clarification-of-build-commands-stdout","building/bootstrapping/what-bootstrapping-does.html#building-stage0-stdcompiler-artifacts","building/bootstrapping/what-bootstrapping-does.html#copying-stage0-stdrustc","building/bootstrapping/what-bootstrapping-does.html#assembling-stage1-compiler","building/bootstrapping/how-bootstrap-does-it.html#how-bootstrap-does-it","building/bootstrapping/how-bootstrap-does-it.html#synopsis-of--step","building/bootstrapping/how-bootstrap-does-it.html#the-entry-points","building/bootstrapping/writing-tools-in-bootstrap.html#writing-tools-in-bootstrap","building/bootstrapping/debugging-bootstrap.html#debugging-bootstrap","building/bootstrapping/debugging-bootstrap.html#println-logging","building/bootstrapping/debugging-bootstrap.html#tracing-in-bootstrap","building/bootstrapping/debugging-bootstrap.html#enabling-tracing-output","building/bootstrapping/debugging-bootstrap.html#using-tracing-in-bootstrap","building/bootstrapping/debugging-bootstrap.html#profiling-bootstrap","building/bootstrapping/debugging-bootstrap.html#rust-analyzer-integration","building/bootstrapping/bootstrap-in-dependencies.html#cfgbootstrap-in-compiler-dependencies","building/bootstrapping/bootstrap-in-dependencies.html#enabling-cfgbootstrap","building/bootstrapping/bootstrap-in-dependencies.html#the-update-dance","building/bootstrapping/bootstrap-in-dependencies.html#step-1-accept-the-new-behavior-in-the-compiler--139797-","building/bootstrapping/bootstrap-in-dependencies.html#step-2-update-the-crate--821-","building/bootstrapping/bootstrap-in-dependencies.html#step-3-update-the-crate-version-used-by-the-compiler--139934-","building/bootstrapping/bootstrap-in-dependencies.html#step-4-remove-the-old-behavior-from-the-compiler--139753-","part-2-intro.html#high-level-compiler-architecture","overview.html#overview-of-the-compiler","overview.html#what-the-compiler-does-to-your-code","overview.html#invocation","overview.html#lexing-and-parsing","overview.html#ast-lowering","overview.html#mir-lowering","overview.html#code-generation","overview.html#how-it-does-it","overview.html#intermediate-representations","overview.html#queries","overview.html#tyty","overview.html#parallelism","overview.html#bootstrapping","overview.html#references","compiler-src.html#high-level-overview-of-the-compiler-source","compiler-src.html#workspace-structure","compiler-src.html#compiler","compiler-src.html#big-picture","compiler-src.html#rustdoc","compiler-src.html#tests","compiler-src.html#build-system","compiler-src.html#standard-library","compiler-src.html#other","query.html#queries-demand-driven-compilation","query.html#invoking-queries","query.html#how-the-compiler-executes-a-query","query.html#providers","query.html#how-providers-are-set-up","query.html#adding-a-new-query","query.html#external-links","queries/query-evaluation-model-in-detail.html#the-query-evaluation-model-in-detail","queries/query-evaluation-model-in-detail.html#what-is-a-query","queries/query-evaluation-model-in-detail.html#cachingmemoization","queries/query-evaluation-model-in-detail.html#input-data","queries/query-evaluation-model-in-detail.html#an-example-execution-trace-of-some-queries","queries/query-evaluation-model-in-detail.html#cycles","queries/query-evaluation-model-in-detail.html#steal-queries","queries/incremental-compilation.html#incremental-compilation","queries/incremental-compilation.html#the-basic-algorithm","queries/incremental-compilation.html#the-try-mark-green-algorithm","queries/incremental-compilation.html#the-query-dag","queries/incremental-compilation.html#improvements-to-the-basic-algorithm","queries/incremental-compilation.html#resources","queries/incremental-compilation.html#footnotes","queries/incremental-compilation-in-detail.html#incremental-compilation-in-detail","queries/incremental-compilation-in-detail.html#a-basic-algorithm-for-incremental-query-evaluation","queries/incremental-compilation-in-detail.html#the-problem-with-the-basic-algorithm-false-positives","queries/incremental-compilation-in-detail.html#improving-accuracy-the-red-green-algorithm","queries/incremental-compilation-in-detail.html#the-real-world-how-persistence-makes-everything-complicated","queries/incremental-compilation-in-detail.html#a-question-of-stability-bridging-the-gap-between-compilation-sessions","queries/incremental-compilation-in-detail.html#checking-query-results-for-changes-hashstable-and-fingerprints","queries/incremental-compilation-in-detail.html#a-tale-of-two-depgraphs-the-old-and-the-new","queries/incremental-compilation-in-detail.html#didnt-you-forget-something-cache-promotion","queries/incremental-compilation-in-detail.html#incremental-compilation-and-the-compiler-backend","queries/incremental-compilation-in-detail.html#query-modifiers","queries/incremental-compilation-in-detail.html#the-projection-query-pattern","queries/incremental-compilation-in-detail.html#shortcomings-of-the-current-system","queries/incremental-compilation-in-detail.html#incrementality-of-on-disk-data-structures","queries/incremental-compilation-in-detail.html#unnecessary-data-dependencies","incrcomp-debugging.html#debugging-and-testing-dependencies","incrcomp-debugging.html#testing-the-dependency-graph","incrcomp-debugging.html#debugging-the-dependency-graph","incrcomp-debugging.html#dumping-the-graph","incrcomp-debugging.html#tracking-down-incorrect-edges","queries/salsa.html#how-salsa-works","queries/salsa.html#what-is-salsa","queries/salsa.html#how-does-it-work","queries/salsa.html#key-salsa-concepts","queries/salsa.html#query","queries/salsa.html#database","queries/salsa.html#query-groups","memory.html#memory-management-in-rustc","memory.html#arenas-and--interning","memory.html#example-tytykind","memory.html#the-tcx-and-how-it-uses-lifetimes","memory.html#a-note-on-lifetimes","serialization.html#serialization-in-rustc","serialization.html#the-encodable-and-decodable-traits","serialization.html#encoding-and-decoding-arena-allocated-types","serialization.html#derive-macros","serialization.html#shorthands","serialization.html#lazyvalue","serialization.html#specialization","parallel-rustc.html#parallel-compilation","parallel-rustc.html#code-generation","parallel-rustc.html#data-structures","parallel-rustc.html#workerlocal","parallel-rustc.html#parallel-iterator","parallel-rustc.html#query-system","parallel-rustc.html#rustdoc","parallel-rustc.html#resources","rustdoc-internals.html#rustdoc-internals","rustdoc-internals.html#from-crate-to-clean","rustdoc-internals.html#passes-anything-but-a-gas-station-or--hot-potato-","rustdoc-internals.html#from-clean-to-html","rustdoc-internals.html#from-soup-to-nuts-or--an-unbroken-thread-stretches-from-those-first-cells-to-us-","rustdoc-internals.html#other-tricks-up-its-sleeve","rustdoc-internals.html#testing-locally","rustdoc-internals.html#see-also","rustdoc-internals/search.html#rustdoc-search","rustdoc-internals/search.html#search-index-format","rustdoc-internals/search.html#parallel-arrays-and-indexed-maps","rustdoc-internals/search.html#representing-sparse-columns","rustdoc-internals/search.html#how-descriptions-are-stored","rustdoc-internals/search.html#i-f-and-p","rustdoc-internals/search.html#searching-by-name","rustdoc-internals/search.html#searching-by-type","rustdoc-internals/search.html#re-exports","rustdoc-internals/search.html#testing-the-search-engine","rustdoc-internals/rustdoc-test-suite.html#the-rustdoc-test-suite","rustdoc-internals/rustdoc-test-suite.html#htmldocck-directives","rustdoc-internals/rustdoc-test-suite.html#has","rustdoc-internals/rustdoc-test-suite.html#hasraw","rustdoc-internals/rustdoc-test-suite.html#matches","rustdoc-internals/rustdoc-test-suite.html#matchesraw","rustdoc-internals/rustdoc-test-suite.html#count","rustdoc-internals/rustdoc-test-suite.html#snapshot","rustdoc-internals/rustdoc-test-suite.html#has-dir","rustdoc-internals/rustdoc-test-suite.html#files","rustdoc-internals/rustdoc-test-suite.html#compiletest-directives-brief","rustdoc-internals/rustdoc-test-suite.html#caveats","rustdoc-internals/rustdoc-test-suite.html#limitations","rustdoc-internals/rustdoc-gui-test-suite.html#the-rustdoc-gui-test-suite","rustdoc-internals/rustdoc-json-test-suite.html#the-rustdoc-json-test-suite","autodiff/internals.html","autodiff/installation.html#installation","autodiff/installation.html#build-instructions","autodiff/installation.html#compiler-explorer-and-dist-builds","autodiff/installation.html#build-instruction-for-enzyme-itself","autodiff/debugging.html#reporting-backend-crashes","autodiff/debugging.html#controlling-llvm-ir-generation","autodiff/debugging.html#1-generate-an-llvm-ir-reproducer","autodiff/debugging.html#2-check-your-llvm-ir-reproducer","autodiff/debugging.html#3-minimize-your-llvm-ir-reproducer","autodiff/debugging.html#4-optional-minimize-your-llvm-ir-reproducer-further","autodiff/debugging.html#advanced-debugging-manual-llvm-ir-investigation","autodiff/debugging.html#5-report-your-bug","autodiff/debugging.html#minimize-rust-code","autodiff/flags.html#supported-rustflags","autodiff/flags.html#debug-flags","autodiff/flags.html#benchmark-flags","autodiff/limitations.html#current-limitations","autodiff/limitations.html#safety-and-soundness","autodiff/limitations.html#abi-adjustments","autodiff/limitations.html#compile-times","autodiff/limitations.html#type-analysis","autodiff/limitations.html#duplicated-optimizations","autodiff/limitations.html#fat-lto","part-3-intro.html#source-code-representation","syntax-intro.html#syntax-and-the-ast","the-parser.html#lexing-and-parsing","the-parser.html#the-ast","the-parser.html#parsing","the-parser.html#more-on-lexical-analysis","macro-expansion.html#macro-expansion","macro-expansion.html#expansion-and-ast-integration","macro-expansion.html#error-recovery","macro-expansion.html#name-resolution","macro-expansion.html#eager-expansion","macro-expansion.html#other-data-structures","macro-expansion.html#hygiene-and-hierarchies","macro-expansion.html#the-expansion-order-hierarchy","macro-expansion.html#the-macro-definition-hierarchy","macro-expansion.html#the-call-site-hierarchy","macro-expansion.html#macro-backtraces","macro-expansion.html#producing-macro-output","macro-expansion.html#macros-by-example","macro-expansion.html#example","macro-expansion.html#the-mbe-parser","macro-expansion.html#procedural-macros","macro-expansion.html#custom-derive","macro-expansion.html#macros-by-example-and-macros-20","name-resolution.html#name-resolution","name-resolution.html#basics","name-resolution.html#namespaces","name-resolution.html#scopes-and-ribs","name-resolution.html#overall-strategy","name-resolution.html#speculative-crate-loading","name-resolution.html#todo--16","attributes.html#attributes","attributes.html#builtininert-attributes","attributes.html#non-builtinactive-attributes","test-implementation.html#the-test-attribute","test-implementation.html#step-1-re-exporting","test-implementation.html#step-2-harness-generation","test-implementation.html#step-3-test-object-generation","test-implementation.html#inspecting-the-generated-code","panic-implementation.html#panicking-in-rust","panic-implementation.html#step-1-invocation-of-the-panic-macro","panic-implementation.html#core-definition-of-panic","panic-implementation.html#std-implementation-of-panic","panic-implementation.html#step-2-the-panic-runtime","ast-validation.html#ast-validation","ast-validation.html#validations","feature-gate-ck.html#feature-gate-checking","lang-items.html#lang-items","lang-items.html#retrieving-a-language-item","lang-items.html#list-of-all-language-items","hir.html#the-hir","hir.html#out-of-band-storage-and-the-crate-type","hir.html#identifiers-in-the-hir","hir.html#hir-operations","hir.html#hir-bodies","ast-lowering.html#ast-lowering","hir-debugging.html#hir-debugging","thir.html#the-thir","mir/index.html#the-mir-mid-level-ir","mir/index.html#introduction-to-mir","mir/index.html#key-mir-vocabulary","mir/index.html#mir-data-types","mir/index.html#representing-constants","mir/index.html#mir-constant-values","mir/index.html#valtrees","mir/index.html#promoted-constants","mir/construction.html#mir-construction","mir/construction.html#unpack-all-the-things","mir/construction.html#lowering-expressions-into-the-desired-mir","mir/construction.html#operator-lowering","mir/construction.html#method-call-lowering","mir/construction.html#conditions","mir/construction.html#pattern-matching","mir/construction.html#aggregate-construction","mir/visitor.html#mir-visitor","mir/visitor.html#traversal","mir/passes.html#mir-queries-and-passes","mir/passes.html#implementing-and-registering-a-pass","mir/passes.html#stealing","mir/passes.html#overview","mir/passes.html#example","asm.html#inline-assembly","asm.html#overview","asm.html#ast","asm.html#hir","asm.html#type-checking","asm.html#thir","asm.html#mir","asm.html#codegen","asm.html#adding-support-for-new-architectures","asm.html#tests","cli.html#command-line-arguments","cli.html#guidelines","rustc-driver/intro.html#rustc_driver-and-rustc_interface","rustc-driver/intro.html#rustc_driver","rustc-driver/intro.html#rustc_interface","rustc-driver/remarks-on-perma-unstable-features.html#remarks-on-perma-unstable-features","rustc-driver/remarks-on-perma-unstable-features.html#rustc_private","rustc-driver/remarks-on-perma-unstable-features.html#overview","rustc-driver/remarks-on-perma-unstable-features.html#using-rustc-private-with-official-toolchains","rustc-driver/remarks-on-perma-unstable-features.html#using-rustc-private-with-custom-toolchains","rustc-driver/remarks-on-perma-unstable-features.html#additional-resources","rustc-driver/interacting-with-the-ast.html#example-type-checking-through-rustc_driver","rustc-driver/interacting-with-the-ast.html#getting-the-type-of-an-expression","rustc-driver/getting-diagnostics.html#example-getting-diagnostic-through-rustc_interface","rustc-driver/getting-diagnostics.html#getting-diagnostics","diagnostics.html#errors-and-lints","diagnostics.html#diagnostic-structure","diagnostics.html#error-codes-and-explanations","diagnostics.html#lints-versus-fixed-diagnostics","diagnostics.html#diagnostic-output-style-guide","diagnostics.html#lint-naming","diagnostics.html#diagnostic-levels","diagnostics.html#helpful-tips-and-options","diagnostics.html#finding-the-source-of-errors","diagnostics.html#span","diagnostics.html#error-messages","diagnostics.html#suggestions","diagnostics.html#suggestion-style-guide","diagnostics.html#lints","diagnostics.html#when-do-lints-run","diagnostics.html#lint-definition-terms","diagnostics.html#declaring-a-lint","diagnostics.html#edition-gated-lints","diagnostics.html#feature-gated-lints","diagnostics.html#future-incompatible-lints","diagnostics.html#renaming-or-removing-a-lint","diagnostics.html#lint-groups","diagnostics.html#linting-early-in-the-compiler","diagnostics.html#json-diagnostic-output","diagnostics.html#rustc_on_unimplemented","diagnostics.html#filtering","diagnostics.html#formatting","diagnostics/diagnostic-structs.html#diagnostic-and-subdiagnostic-structs","diagnostics/diagnostic-structs.html#derivediagnostic-and-derivelintdiagnostic","diagnostics/diagnostic-structs.html#reference","diagnostics/diagnostic-structs.html#derivesubdiagnostic","diagnostics/diagnostic-structs.html#reference-1","diagnostics/translation.html#translation","diagnostics/translation.html#writing-translatable-diagnostics","diagnostics/translation.html#fluent","diagnostics/translation.html#guideline-for-message-naming","diagnostics/translation.html#guidelines-for-writing-translatable-messages","diagnostics/translation.html#compile-time-validation-and-typed-identifiers","diagnostics/translation.html#internals","diagnostics/translation.html#messages","diagnostics/translation.html#arguments","diagnostics/translation.html#loading","diagnostics/lintstore.html#lints","diagnostics/lintstore.html#lints-vs-lint-passes","diagnostics/lintstore.html#registration","diagnostics/lintstore.html#high-level-overview","diagnostics/lintstore.html#compiler-lint-passes-are-combined-into-one-pass","diagnostics/error-codes.html#error-codes","diagnostics/error-codes.html#error-explanations","diagnostics/error-codes.html#allocating-a-fresh-code","diagnostics/error-codes.html#running-error-code-doctests","diagnostics/diagnostic-items.html#diagnostic-items","diagnostics/diagnostic-items.html#finding-diagnostic-items","diagnostics/diagnostic-items.html#adding-diagnostic-items","diagnostics/diagnostic-items.html#naming-conventions","diagnostics/diagnostic-items.html#using-diagnostic-items","diagnostics/diagnostic-items.html#example-checking-for-a-type","diagnostics/diagnostic-items.html#example-checking-for-a-trait-implementation","diagnostics/diagnostic-items.html#associated-types","diagnostics/diagnostic-items.html#usage-in-clippy","diagnostics/diagnostic-items.html#related-issues","diagnostics/error-guaranteed.html#errorguaranteed","part-4-intro.html#analysis","generic_parameters_summary.html#generic-parameter-definitions","generic_parameters_summary.html#tygenerics","ty_module/early_binder.html#earlybinder-and-instantiating-parameters","ty_module/binders.html#binder-and-higher-ranked-regions","ty_module/instantiating_binders.html#instantiating-binders","ty_module/instantiating_binders.html#instantiating-with-inference-variables","ty_module/instantiating_binders.html#instantiating-with-placeholders","ty_module/instantiating_binders.html#why-have-both-replaceholder-and-rebound","ty_module/instantiating_binders.html#instantiating-with-relateparam","early_late_parameters.html#early-vs-late-bound-parameters","early_late_parameters.html#what-does-it-mean-to-be-early-bound-or-late-bound","early_late_parameters.html#differences-between-early-and-late-bound-parameters","early_late_parameters.html#higher-ranked-function-pointers-and-trait-bounds","early_late_parameters.html#turbofishing-in-the-presence-of-late-bound-parameters","early_late_parameters.html#liveness-of-types-with-late-bound-parameters","early_late_parameters.html#requirements-for-a-parameter-to-be-late-bound","early_late_parameters.html#must-be-a-lifetime-parameter","early_late_parameters.html#must-not-be-used-in-a-where-clause","early_late_parameters.html#must-be-constrained-by-argument-types","ty.html#the-ty-module-representing-types","ty.html#tyty","ty.html#rustc_hirty-vs-tyty","ty.html#tyty-implementation","ty.html#allocating-and-working-with-types","ty.html#comparing-types","ty.html#tytykind-variants","ty.html#import-conventions","ty.html#type-errors","ty.html#tykind-variant-shorthand-syntax","ty_module/generic_arguments.html#adts-and-generic-arguments","ty_module/generic_arguments.html#adts-representation","ty_module/generic_arguments.html#adtdef-and-defid","ty_module/generic_arguments.html#question-why-not-substitute-inside-the-adtdef","ty_module/generic_arguments.html#the-genericargs-type","ty_module/param_ty_const_regions.html#parameter-tyconstregions","ty_module/param_ty_const_regions.html#tyconst-parameters","ty_module/param_ty_const_regions.html#lifetime-parameters","ty-fold.html#typefoldable-and-typefolder","normalization.html#aliases-and-normalization","normalization.html#aliases","normalization.html#rigid-ambiguous-and-unnormalized-aliases","normalization.html#diverging-aliases","normalization.html#opaque-types","normalization.html#const-aliases","normalization.html#what-is-normalization","normalization.html#structural-vs-deep-normalization","normalization.html#core-normalization-logic","normalization.html#how-to-normalize","normalization.html#outside-of-the-trait-solver","normalization.html#inside-of-the-trait-solver","normalization.html#whenwhere-to-normalize-old-vs-new-solver","normalization.html#old-solver","normalization.html#new-solver","normalization.html#missing-normalization-calls","normalization.html#normalizing-parameter-environments","normalization.html#unnormalizable-non-rigid-aliases-in-higher-ranked-types","normalization.html#handling-uses-of-diverging-aliases","typing_parameter_envs.html#typingparameter-environments","typing_parameter_envs.html#typing-environments","typing_parameter_envs.html#parameter-environments","typing_parameter_envs.html#what-is-a-paramenv","typing_parameter_envs.html#acquiring-a-paramenv","typing_parameter_envs.html#how-are-paramenvs-constructed","typing_parameter_envs.html#typing-modes","type-inference.html#type-inference","type-inference.html#a-note-on-terminology","type-inference.html#creating-an-inference-context","type-inference.html#inference-variables","type-inference.html#enforcing-equality--subtyping","type-inference.html#trying-equality","type-inference.html#snapshots","type-inference.html#subtyping-obligations","type-inference.html#region-constraints","type-inference.html#solving-region-constraints","type-inference.html#lexical-region-resolution","traits/resolution.html#trait-resolution-old-style","traits/resolution.html#major-concepts","traits/resolution.html#overview","traits/resolution.html#selection","traits/resolution.html#candidate-assembly","traits/resolution.html#confirmation","traits/resolution.html#selection-during-codegen","traits/hrtb.html#higher-ranked-trait-bounds","traits/hrtb.html#basic-matching-and-placeholder-leaks","traits/hrtb.html#higher-ranked-trait-obligations","traits/caching.html#caching-and-subtle-considerations-therewith","traits/caching.html#an-example","traits/caching.html#where-clauses-and-the-local-vs-global-cache","traits/implied-bounds.html#implied-bounds","traits/implied-bounds.html#explicit-implied-bounds","traits/implied-bounds.html#implicit-implied-bounds","traits/implied-bounds.html#using-implicit-implied-bounds-as-assumptions","traits/implied-bounds.html#proving-implicit-implied-bounds","traits/specialization.html#specialization","traits/specialization.html#additional-resources","traits/chalk.html#chalk-based-trait-solving","traits/chalk.html#ongoing-work","traits/lowering-to-logic.html#lowering-to-logic","traits/lowering-to-logic.html#rust-traits-and-logic","traits/lowering-to-logic.html#type-checking-normal-functions","traits/lowering-to-logic.html#type-checking-generic-functions-beyond-horn-clauses","traits/lowering-to-logic.html#source","traits/goals-and-clauses.html#goals-and-clauses","traits/goals-and-clauses.html#goals-and-clauses-meta-structure","traits/goals-and-clauses.html#domain-goals","traits/goals-and-clauses.html#coinductive-goals","traits/goals-and-clauses.html#incomplete-chapter","traits/canonical-queries.html#canonical-queries","traits/canonical-queries.html#the-traditional-interactive-prolog-query","traits/canonical-queries.html#a-trait-query-in-rustc","traits/canonical-queries.html#examples","traits/canonicalization.html#canonicalization","traits/canonicalization.html#canonicalizing-the-query","traits/canonicalization.html#executing-the-query","traits/canonicalization.html#canonicalizing-the-query-result","traits/canonicalization.html#processing-the-canonicalized-query-result","solve/trait-solving.html#trait-solving-new","solve/trait-solving.html#core-concepts","solve/invariants.html#invariants-of-the-type-system","solve/invariants.html#wfx-implies-wfnormalizex-","solve/invariants.html#structural-equality-modulo-regions-implies-semantic-equality-","solve/invariants.html#applying-inference-results-from-a-goal-does-not-change-its-result-","solve/invariants.html#the-trait-solver-has-to-be--locally-sound--","solve/invariants.html#normalization-of-semantically-equal-aliases-in-empty-environments-results-in-a-unique-type-","solve/invariants.html#generic-goals-and-their-instantiations-have-the-same-result-","solve/invariants.html#trait-goals-in-empty-environments-are-proven-by-a-unique-impl-","solve/invariants.html#the-type-system-is-complete-","solve/invariants.html#trait-solving-must-be-free-lifetime-agnostic-","solve/invariants.html#removing-ambiguity-makes-strictly-more-things-compile-","solve/invariants.html#semantic-equality-implies-structural-equality-","solve/the-solver.html#the-solver","solve/the-solver.html#a-rough-walkthrough","solve/the-solver.html#important-concepts-and-design-patterns","solve/the-solver.html#evalctxtadd_goal","solve/the-solver.html#matching-on-tykind","solve/the-solver.html#higher-ranked-goals","solve/the-solver.html#dealing-with-choice","solve/the-solver.html#learning-more","solve/canonicalization.html#canonicalization","solve/canonicalization.html#a-walkthrough-of-canonical-queries","solve/canonicalization.html#canonicalizing-the-input","solve/canonicalization.html#instantiating-the-canonical-goal-inside-of-the-query","solve/canonicalization.html#canonicalizing-the-query-response","solve/canonicalization.html#instantiating-the-query-response","solve/canonicalization.html#externalconstraints","solve/canonicalization.html#how-exactly-does-canonicalization-work","solve/coinduction.html#coinduction","solve/coinduction.html#coinduction-and-induction","solve/coinduction.html#why-is-coinduction-correct","solve/coinduction.html#how-to-implement-coinduction","solve/coinduction.html#future-work","solve/coinduction.html#recursive-data-types-already-rely-on-coinduction","solve/coinduction.html#recursive-data-types","solve/coinduction.html#explicitly-checked-implied-bounds","solve/coinduction.html#issues-when-extending-coinduction-to-more-goals","solve/caching.html#caching-in-the-new-trait-solver","solve/caching.html#the-global-cache","solve/caching.html#dealing-with-overflow","solve/caching.html#handling-cycles","solve/caching.html#only-caching-cycle-roots","solve/caching.html#the-provisional-cache","solve/proof-trees.html#proof-trees","solve/proof-trees.html#computing-proof-trees","solve/proof-trees.html#debugging-the-solver","solve/opaque-types.html#opaque-types-in-the-new-solver","solve/opaque-types.html#opaques-are-alias-types","solve/opaque-types.html#normalizes-to-for-opaques","solve/opaque-types.html#using-alias-bounds-of-normalizable-aliases","solve/opaque-types.html#opaque-types-can-be-defined-anywhere","solve/opaque-types.html#higher-ranked-opaque-types-in-their-defining-scope","solve/opaque-types.html#member-constraints","solve/opaque-types.html#calling-methods-on-opaque-types","solve/significant-changes.html#significant-changes-and-quirks","solve/significant-changes.html#canonicalization","solve/significant-changes.html#deferred-alias-equality","solve/significant-changes.html#eagerly-evaluating-nested-goals","solve/significant-changes.html#nested-goals-are-evaluated-until-reaching-a-fixpoint","solve/significant-changes.html#proof-trees-and-providing-diagnostics-information","solve/significant-changes.html#major-quirks-of-the-new-implementation","solve/significant-changes.html#hiding-impls-if-there-are-any-env-candidates","solve/significant-changes.html#normalizesto-goals-are-a-function","traits/unsize.html#coerceunsized","traits/unsize.html#unsize","traits/unsize.html#primitive-unsizing-implementations","traits/unsize.html#structural-implementations","traits/unsize.html#upcasting-implementations","type-checking.html#type-checking","type-checking.html#type-collection","method-lookup.html#method-lookup","method-lookup.html#the-probe-phase","method-lookup.html#steps","method-lookup.html#candidate-assembly","method-lookup.html#candidate-search","variance.html#variance-of-type-and-lifetime-parameters","variance.html#the-algorithm","variance.html#constraints","variance.html#dependency-graph-management","variance.html#addendum-variance-on-traits","variance.html#variance-and-object-types","variance.html#trait-variance-and-vtable-resolution","variance.html#variance-and-associated-types","coherence.html#coherence","coherence.html#overlap-checks","coherence.html#the-explicit-negative-impl-check","coherence.html#the-implicit-negative-impl-check","opaque-types-type-alias-impl-trait.html#opaque-types-type-alias-impl-trait","opaque-types-type-alias-impl-trait.html#defining-use-sites","opaque-types-type-alias-impl-trait.html#associated-opaque-types","opaque-types-impl-trait-inference.html#inference-of-opaque-types-impl-trait","opaque-types-impl-trait-inference.html#running-example","opaque-types-impl-trait-inference.html#type-checking-main","opaque-types-impl-trait-inference.html#within-the-type_of-query","opaque-types-impl-trait-inference.html#relating-an-opaque-type-to-another-type","opaque-types-impl-trait-inference.html#interactions-with-queries","opaque-types-impl-trait-inference.html#within-the-mir-borrow-checker","opaque-types-impl-trait-inference.html#backwards-compatibility-hacks","return-position-impl-trait-in-trait.html#return-position-impl-trait-in-trait","return-position-impl-trait-in-trait.html#how-does-it-work","return-position-impl-trait-in-trait.html#ast-lowering","return-position-impl-trait-in-trait.html#hir-ty-lowering","return-position-impl-trait-in-trait.html#typechecking","return-position-impl-trait-in-trait.html#whats-broken-whats-weird-etc","borrow_check/opaque-types-region-inference-restrictions.html#opaque-types-region-inference-restrictions","borrow_check/opaque-types-region-inference-restrictions.html#background-type-and-const-generic-arguments","borrow_check/opaque-types-region-inference-restrictions.html#uniqueness-restriction","borrow_check/opaque-types-region-inference-restrictions.html#an-exception-to-uniqueness-rule","borrow_check/opaque-types-region-inference-restrictions.html#universal-lifetimes-restriction","borrow_check/opaque-types-region-inference-restrictions.html#closure-restrictions","effects.html#effects-and-const-condition-checking","effects.html#the-hosteffect-predicate","effects.html#the-const_conditions-query","effects.html#enforcement-of-const_conditions","effects.html#explicit_implied_const_bounds-on-associated-types-and-traits","effects.html#proving-hosteffectpredicates","pat-exhaustive-checking.html#pattern-and-exhaustiveness-checking","pat-exhaustive-checking.html#pattern-usefulness","pat-exhaustive-checking.html#where-it-happens","pat-exhaustive-checking.html#the-algorithm","pat-exhaustive-checking.html#important-concepts","pat-exhaustive-checking.html#constructors-and-fields","pat-exhaustive-checking.html#constructor-grouping-and-splitting","pat-exhaustive-checking.html#usefulness-vs-reachability-in-the-presence-of-empty-types","unsafety-checking.html#unsafety-checking","unsafety-checking.html#overview","unsafety-checking.html#the-unused_unsafe-lint","unsafety-checking.html#other-checks-involving-unsafe","mir/dataflow.html#dataflow-analysis","mir/dataflow.html#defining-a-dataflow-analysis","mir/dataflow.html#transfer-functions-and-effects","mir/dataflow.html#before-effects","mir/dataflow.html#convergence","mir/dataflow.html#a-brief-example","mir/dataflow.html#inspecting-the-results-of-a-dataflow-analysis","mir/dataflow.html#graphviz-diagrams","mir/drop-elaboration.html#drop-elaboration","mir/drop-elaboration.html#dynamic-drops","mir/drop-elaboration.html#drop-obligations","mir/drop-elaboration.html#drop-elaboration-1","mir/drop-elaboration.html#drop-elaboration-in-rustc","mir/drop-elaboration.html#open-drops","mir/drop-elaboration.html#cleanup-paths","mir/drop-elaboration.html#aside-drop-elaboration-and-const-eval","borrow_check.html#mir-borrow-check","borrow_check.html#major-phases-of-the-borrow-checker","borrow_check/moves_and_initialization.html#tracking-moves-and-initialization","borrow_check/moves_and_initialization.html#initialization-and-moves","borrow_check/moves_and_initialization.html#subsections","borrow_check/moves_and_initialization/move_paths.html#move-paths","borrow_check/moves_and_initialization/move_paths.html#move-path-indices","borrow_check/moves_and_initialization/move_paths.html#building-move-paths","borrow_check/moves_and_initialization/move_paths.html#illegal-move-paths","borrow_check/moves_and_initialization/move_paths.html#looking-up-a-move-path","borrow_check/moves_and_initialization/move_paths.html#cross-references","borrow_check/type_check.html#the-mir-type-check","borrow_check/type_check.html#user-types","borrow_check/drop_check.html#drop-check","borrow_check/drop_check.html#how-values-are-dropped","borrow_check/drop_check.html#partially-dropping-a-local","borrow_check/drop_check.html#dropck_outlives","borrow_check/region_inference.html#region-inference-nll","borrow_check/region_inference.html#universal-regions","borrow_check/region_inference.html#region-variables","borrow_check/region_inference.html#constraints","borrow_check/region_inference.html#inference-overview","borrow_check/region_inference.html#example","borrow_check/region_inference.html#some-details","borrow_check/region_inference/constraint_propagation.html#constraint-propagation","borrow_check/region_inference/constraint_propagation.html#notation-and-high-level-concepts","borrow_check/region_inference/constraint_propagation.html#liveness-constraints","borrow_check/region_inference/constraint_propagation.html#outlives-constraints","borrow_check/region_inference/constraint_propagation.html#the-outlives-constraint-graph-and-sccs","borrow_check/region_inference/constraint_propagation.html#applying-liveness-constraints-to-sccs","borrow_check/region_inference/constraint_propagation.html#applying-outlives-constraints","borrow_check/region_inference/lifetime_parameters.html#universal-regions","borrow_check/region_inference/lifetime_parameters.html#universal-regions-and-their-relationships-to-one-another","borrow_check/region_inference/lifetime_parameters.html#everything-is-a-region-variable","borrow_check/region_inference/lifetime_parameters.html#universal-lifetimes-as-the-elements-of-a-regions-value","borrow_check/region_inference/lifetime_parameters.html#the-value-of-a-universal-region","borrow_check/region_inference/lifetime_parameters.html#liveness-and-universal-regions","borrow_check/region_inference/lifetime_parameters.html#propagating-outlives-constraints-for-universal-regions","borrow_check/region_inference/lifetime_parameters.html#detecting-errors","borrow_check/region_inference/member_constraints.html#member-constraints","borrow_check/region_inference/member_constraints.html#detailed-example","borrow_check/region_inference/member_constraints.html#choices-are-always-lifetime-parameters","borrow_check/region_inference/member_constraints.html#applying-member-constraints","borrow_check/region_inference/member_constraints.html#lower-bounds","borrow_check/region_inference/member_constraints.html#upper-bounds","borrow_check/region_inference/member_constraints.html#minimal-choice","borrow_check/region_inference/member_constraints.html#collecting-upper-bounds-in-the-implementation","borrow_check/region_inference/placeholders_and_universes.html#placeholders-and-universes","borrow_check/region_inference/placeholders_and_universes.html#subtyping-and-placeholders","borrow_check/region_inference/placeholders_and_universes.html#what-is-a-universe","borrow_check/region_inference/placeholders_and_universes.html#universes-and-placeholder-region-elements","borrow_check/region_inference/placeholders_and_universes.html#placeholders-and-outlives-constraints","borrow_check/region_inference/placeholders_and_universes.html#extending-the-universal-regions-check","borrow_check/region_inference/placeholders_and_universes.html#back-to-our-example","borrow_check/region_inference/placeholders_and_universes.html#another-example","borrow_check/region_inference/placeholders_and_universes.html#final-example","borrow_check/region_inference/closure_constraints.html#propagating-closure-constraints","borrow_check/region_inference/closure_constraints.html#how-this-is-implemented","borrow_check/region_inference/closure_constraints.html#region-outlive-constraints","borrow_check/region_inference/closure_constraints.html#type-outlive-constraints","borrow_check/region_inference/error_reporting.html#reporting-region-errors","borrow_check/two_phase_borrows.html#two-phase-borrows","borrow_check/two_phase_borrows.html#checking-two-phase-borrows","closure.html#closure-capture-inference","closure.html#example-1","closure.html#example-2","closure.html#example-3","closure.html#inferences-in-the-compiler","coroutine-closures.html#async-closurescoroutine-closures","coroutine-closures.html#coroutine-closures----a-technical-deep-dive","coroutine-closures.html#hir","coroutine-closures.html#rustc_middlety-representation","coroutine-closures.html#trait-hierarchy","coroutine-closures.html#tale-of-two-bodies","coroutine-closures.html#closure-signature-inference","coroutine-closures.html#upvar-analysis","coroutine-closures.html#instance-resolution","coroutine-closures.html#borrow-checking","part-5-intro.html#from-mir-to-binaries","mir/optimizations.html#mir-optimizations","mir/optimizations.html#quickstart-for-adding-a-new-optimization","mir/optimizations.html#defining-optimization-passes","mir/optimizations.html#mir-optimization-levels","mir/debugging.html#mir-debugging","const-eval.html#constant-evaluation","const-eval/interpret.html#interpreter","const-eval/interpret.html#datastructures","const-eval/interpret.html#memory","const-eval/interpret.html#global-memory-and-exotic-allocations","const-eval/interpret.html#pointer-values-vs-pointer-types","const-eval/interpret.html#interpretation","backend/monomorph.html#monomorphization","backend/monomorph.html#collection","backend/monomorph.html#codegen-unit-cgu-partitioning","backend/lowering-mir.html#lowering-mir-to-a-codegen-ir","backend/codegen.html#code-generation","backend/codegen.html#what-is-llvm","backend/codegen.html#running-llvm-linking-and-metadata-generation","backend/updating-llvm.html#updating-llvm","backend/updating-llvm.html#backports-upstream-supported","backend/updating-llvm.html#backports-upstream-not-supported","backend/updating-llvm.html#new-llvm-release-updates","backend/updating-llvm.html#caveats-and-gotchas","backend/debugging.html#debugging-llvm","backend/debugging.html#minimize-the-example","backend/debugging.html#enable-llvm-internal-checks","backend/debugging.html#get-your-hands-on-raw-llvm-input","backend/debugging.html#investigate-llvm-optimization-passes","backend/debugging.html#getting-help-and-asking-questions","backend/debugging.html#compiler-options-to-know-and-love","backend/debugging.html#filing-llvm-bug-reports","backend/debugging.html#porting-bug-fixes-from-llvm","backend/backend-agnostic.html#backend-agnostic-codegen","backend/backend-agnostic.html#refactoring-of-rustc_codegen_llvm","backend/backend-agnostic.html#state-of-the-code-before-the-refactoring","backend/backend-agnostic.html#generic-types-and-structures","backend/backend-agnostic.html#traits-and-interface","backend/backend-agnostic.html#state-of-the-code-after-the-refactoring","backend/implicit-caller-location.html#implicit-caller-location","backend/implicit-caller-location.html#motivating-example","backend/implicit-caller-location.html#reading-caller-location","backend/implicit-caller-location.html#caller-location-in-const","backend/implicit-caller-location.html#finding-the-right-location","backend/implicit-caller-location.html#allocating-a-static-location","backend/implicit-caller-location.html#generating-code-for-track_caller-callees","backend/implicit-caller-location.html#codegen-examples","backend/implicit-caller-location.html#dynamic-dispatch","backend/implicit-caller-location.html#the-attribute","backend/implicit-caller-location.html#traits","backend/implicit-caller-location.html#backgroundhistory","backend/libs-and-metadata.html#libraries-and-metadata","backend/libs-and-metadata.html#libraries","backend/libs-and-metadata.html#rlib","backend/libs-and-metadata.html#dylib","backend/libs-and-metadata.html#rmeta","backend/libs-and-metadata.html#metadata","backend/libs-and-metadata.html#strict-version-hash","backend/libs-and-metadata.html#stable-crate-id","backend/libs-and-metadata.html#crate-loading","backend/libs-and-metadata.html#pipelining","profile-guided-optimization.html#profile-guided-optimization","profile-guided-optimization.html#what-is-profiled-guided-optimization","profile-guided-optimization.html#how-is-pgo-implemented-in-rustc","profile-guided-optimization.html#overall-workflow","profile-guided-optimization.html#compile-time-aspects","profile-guided-optimization.html#runtime-aspects","profile-guided-optimization.html#testing-pgo","profile-guided-optimization.html#additional-information","llvm-coverage-instrumentation.html#llvm-source-based-code-coverage","llvm-coverage-instrumentation.html#recommended-bootstraptoml-settings","llvm-coverage-instrumentation.html#rust-symbol-mangling","llvm-coverage-instrumentation.html#the-llvm-profiler-runtime","llvm-coverage-instrumentation.html#testing-coverage-instrumentation","sanitizers.html#sanitizers-support","sanitizers.html#how-to-use-the-sanitizers","sanitizers.html#how-are-sanitizers-implemented-in-rustc","sanitizers.html#testing-sanitizers","sanitizers.html#enabling-sanitizer-on-a-new-target","sanitizers.html#additional-information","debugging-support-in-rustc.html#debugging-support-in-the-rust-compiler","debugging-support-in-rustc.html#preliminaries","debugging-support-in-rustc.html#debuggers","debugging-support-in-rustc.html#dwarf","debugging-support-in-rustc.html#codeviewpdb","debugging-support-in-rustc.html#supported-debuggers","debugging-support-in-rustc.html#gdb","debugging-support-in-rustc.html#lldb","debugging-support-in-rustc.html#windbgcdb","debugging-support-in-rustc.html#dwarf-and-rustc","debugging-support-in-rustc.html#current-limitations-of-dwarf","debugging-support-in-rustc.html#developer-notes","debugging-support-in-rustc.html#what-is-missing","debugging-support-in-rustc.html#code-signing-for-lldb-debug-server-on-macos","debugging-support-in-rustc.html#dwarf-and-traits","debugging-support-in-rustc.html#typical-process-for-a-debug-info-change-llvm","debugging-support-in-rustc.html#procedural-macro-stepping","debugging-support-in-rustc.html#source-file-checksums-in-debug-info","debugging-support-in-rustc.html#future-work","appendix/background.html#background-topics","appendix/background.html#what-is-a-control-flow-graph","appendix/background.html#what-is-a-dataflow-analysis","appendix/background.html#what-is-universally-quantified-what-about-existentially-quantified","appendix/background.html#what-is-a-de-bruijn-index","appendix/background.html#what-are-co--and-contra-variance","appendix/background.html#what-is-a-free-region-or-a-free-variable-what-about-bound-region","appendix/background.html#further-reading-about-compilers","appendix/background.html#books","appendix/background.html#courses","appendix/background.html#wikis","appendix/background.html#misc-papers-and-blog-posts","appendix/glossary.html#glossary","appendix/code-index.html#code-index","appendix/compiler-lecture.html#compiler-lecture-series","appendix/compiler-lecture.html#general","appendix/compiler-lecture.html#rust-analyzer","appendix/compiler-lecture.html#type-system","appendix/compiler-lecture.html#closures","appendix/compiler-lecture.html#chalk","appendix/compiler-lecture.html#polonius","appendix/compiler-lecture.html#miri","appendix/compiler-lecture.html#async","appendix/compiler-lecture.html#code-generation","appendix/bibliography.html#rust-bibliography","appendix/bibliography.html#type-system","appendix/bibliography.html#concurrency","appendix/bibliography.html#others","appendix/bibliography.html#papers--about--rust","appendix/humorust.html#humor-in-rust"],"index":{"documentStore":{"docInfo":{"0":{"body":70,"breadcrumbs":4,"title":2},"1":{"body":79,"breadcrumbs":4,"title":2},"10":{"body":28,"breadcrumbs":4,"title":2},"100":{"body":25,"breadcrumbs":4,"title":2},"1000":{"body":128,"breadcrumbs":10,"title":1},"1001":{"body":53,"breadcrumbs":12,"title":3},"1002":{"body":39,"breadcrumbs":13,"title":4},"1003":{"body":27,"breadcrumbs":15,"title":6},"1004":{"body":34,"breadcrumbs":14,"title":5},"1005":{"body":0,"breadcrumbs":13,"title":4},"1006":{"body":34,"breadcrumbs":13,"title":4},"1007":{"body":39,"breadcrumbs":12,"title":3},"1008":{"body":38,"breadcrumbs":6,"title":1},"1009":{"body":29,"breadcrumbs":6,"title":1},"101":{"body":13,"breadcrumbs":4,"title":2},"1010":{"body":17,"breadcrumbs":8,"title":3},"1011":{"body":59,"breadcrumbs":7,"title":2},"1012":{"body":147,"breadcrumbs":7,"title":2},"1013":{"body":23,"breadcrumbs":4,"title":2},"1014":{"body":117,"breadcrumbs":4,"title":2},"1015":{"body":124,"breadcrumbs":6,"title":2},"1016":{"body":0,"breadcrumbs":6,"title":2},"1017":{"body":32,"breadcrumbs":5,"title":1},"1018":{"body":126,"breadcrumbs":6,"title":2},"1019":{"body":87,"breadcrumbs":6,"title":2},"102":{"body":4,"breadcrumbs":5,"title":3},"1020":{"body":159,"breadcrumbs":7,"title":4},"1021":{"body":175,"breadcrumbs":4,"title":1},"1022":{"body":57,"breadcrumbs":4,"title":1},"1023":{"body":73,"breadcrumbs":6,"title":3},"1024":{"body":80,"breadcrumbs":6,"title":3},"1025":{"body":159,"breadcrumbs":6,"title":3},"1026":{"body":179,"breadcrumbs":7,"title":4},"1027":{"body":123,"breadcrumbs":6,"title":3},"1028":{"body":76,"breadcrumbs":5,"title":1},"1029":{"body":102,"breadcrumbs":6,"title":2},"103":{"body":6,"breadcrumbs":4,"title":2},"1030":{"body":59,"breadcrumbs":8,"title":4},"1031":{"body":56,"breadcrumbs":8,"title":4},"1032":{"body":84,"breadcrumbs":10,"title":6},"1033":{"body":56,"breadcrumbs":7,"title":3},"1034":{"body":32,"breadcrumbs":7,"title":3},"1035":{"body":21,"breadcrumbs":11,"title":5},"1036":{"body":101,"breadcrumbs":8,"title":2},"1037":{"body":225,"breadcrumbs":9,"title":3},"1038":{"body":96,"breadcrumbs":9,"title":3},"1039":{"body":98,"breadcrumbs":11,"title":5},"104":{"body":8,"breadcrumbs":4,"title":2},"1040":{"body":90,"breadcrumbs":8,"title":2},"1041":{"body":47,"breadcrumbs":10,"title":4},"1042":{"body":180,"breadcrumbs":9,"title":3},"1043":{"body":54,"breadcrumbs":14,"title":5},"1044":{"body":18,"breadcrumbs":10,"title":1},"1045":{"body":151,"breadcrumbs":11,"title":2},"1046":{"body":555,"breadcrumbs":12,"title":3},"1047":{"body":387,"breadcrumbs":10,"title":1},"1048":{"body":121,"breadcrumbs":14,"title":5},"1049":{"body":26,"breadcrumbs":12,"title":5},"105":{"body":229,"breadcrumbs":6,"title":2},"1050":{"body":116,"breadcrumbs":12,"title":5},"1051":{"body":103,"breadcrumbs":9,"title":2},"1052":{"body":87,"breadcrumbs":10,"title":3},"1053":{"body":212,"breadcrumbs":10,"title":3},"1054":{"body":284,"breadcrumbs":9,"title":2},"1055":{"body":0,"breadcrumbs":7,"title":4},"1056":{"body":81,"breadcrumbs":5,"title":2},"1057":{"body":64,"breadcrumbs":5,"title":2},"1058":{"body":170,"breadcrumbs":5,"title":2},"1059":{"body":63,"breadcrumbs":7,"title":4},"106":{"body":122,"breadcrumbs":8,"title":4},"1060":{"body":51,"breadcrumbs":5,"title":2},"1061":{"body":16,"breadcrumbs":6,"title":3},"1062":{"body":123,"breadcrumbs":5,"title":2},"1063":{"body":61,"breadcrumbs":4,"title":1},"1064":{"body":19,"breadcrumbs":4,"title":1},"1065":{"body":0,"breadcrumbs":5,"title":2},"1066":{"body":186,"breadcrumbs":5,"title":2},"1067":{"body":101,"breadcrumbs":6,"title":3},"1068":{"body":229,"breadcrumbs":9,"title":6},"1069":{"body":21,"breadcrumbs":4,"title":2},"107":{"body":3,"breadcrumbs":7,"title":3},"1070":{"body":162,"breadcrumbs":3,"title":1},"1071":{"body":57,"breadcrumbs":4,"title":2},"1072":{"body":25,"breadcrumbs":5,"title":3},"1073":{"body":118,"breadcrumbs":4,"title":2},"1074":{"body":43,"breadcrumbs":5,"title":3},"1075":{"body":51,"breadcrumbs":5,"title":3},"1076":{"body":73,"breadcrumbs":4,"title":2},"1077":{"body":82,"breadcrumbs":3,"title":1},"1078":{"body":82,"breadcrumbs":4,"title":2},"1079":{"body":105,"breadcrumbs":6,"title":4},"108":{"body":16,"breadcrumbs":8,"title":4},"1080":{"body":61,"breadcrumbs":4,"title":2},"1081":{"body":18,"breadcrumbs":4,"title":2},"1082":{"body":96,"breadcrumbs":4,"title":2},"1083":{"body":165,"breadcrumbs":4,"title":2},"1084":{"body":120,"breadcrumbs":4,"title":2},"1085":{"body":142,"breadcrumbs":5,"title":3},"1086":{"body":137,"breadcrumbs":4,"title":2},"1087":{"body":5,"breadcrumbs":4,"title":2},"1088":{"body":80,"breadcrumbs":7,"title":5},"1089":{"body":87,"breadcrumbs":5,"title":3},"109":{"body":6,"breadcrumbs":10,"title":6},"1090":{"body":114,"breadcrumbs":6,"title":4},"1091":{"body":17,"breadcrumbs":8,"title":3},"1092":{"body":83,"breadcrumbs":7,"title":2},"1093":{"body":24,"breadcrumbs":6,"title":1},"1094":{"body":90,"breadcrumbs":9,"title":2},"1095":{"body":33,"breadcrumbs":10,"title":3},"1096":{"body":42,"breadcrumbs":10,"title":3},"1097":{"body":68,"breadcrumbs":10,"title":3},"1098":{"body":58,"breadcrumbs":11,"title":4},"1099":{"body":59,"breadcrumbs":9,"title":2},"11":{"body":4,"breadcrumbs":6,"title":4},"110":{"body":32,"breadcrumbs":12,"title":8},"1100":{"body":30,"breadcrumbs":8,"title":3},"1101":{"body":213,"breadcrumbs":7,"title":2},"1102":{"body":92,"breadcrumbs":6,"title":2},"1103":{"body":89,"breadcrumbs":6,"title":2},"1104":{"body":129,"breadcrumbs":7,"title":3},"1105":{"body":192,"breadcrumbs":5,"title":1},"1106":{"body":144,"breadcrumbs":7,"title":3},"1107":{"body":56,"breadcrumbs":6,"title":2},"1108":{"body":112,"breadcrumbs":6,"title":2},"1109":{"body":42,"breadcrumbs":5,"title":1},"111":{"body":9,"breadcrumbs":10,"title":6},"1110":{"body":88,"breadcrumbs":6,"title":2},"1111":{"body":148,"breadcrumbs":5,"title":1},"1112":{"body":98,"breadcrumbs":5,"title":1},"1113":{"body":79,"breadcrumbs":8,"title":2},"1114":{"body":132,"breadcrumbs":10,"title":4},"1115":{"body":104,"breadcrumbs":8,"title":2},"1116":{"body":75,"breadcrumbs":8,"title":2},"1117":{"body":185,"breadcrumbs":10,"title":4},"1118":{"body":41,"breadcrumbs":10,"title":4},"1119":{"body":126,"breadcrumbs":9,"title":3},"112":{"body":22,"breadcrumbs":8,"title":4},"1120":{"body":98,"breadcrumbs":8,"title":2},"1121":{"body":35,"breadcrumbs":11,"title":5},"1122":{"body":75,"breadcrumbs":9,"title":3},"1123":{"body":31,"breadcrumbs":11,"title":5},"1124":{"body":28,"breadcrumbs":9,"title":3},"1125":{"body":39,"breadcrumbs":9,"title":3},"1126":{"body":55,"breadcrumbs":11,"title":5},"1127":{"body":33,"breadcrumbs":8,"title":2},"1128":{"body":125,"breadcrumbs":8,"title":2},"1129":{"body":192,"breadcrumbs":8,"title":2},"113":{"body":62,"breadcrumbs":7,"title":3},"1130":{"body":47,"breadcrumbs":10,"title":4},"1131":{"body":47,"breadcrumbs":9,"title":3},"1132":{"body":79,"breadcrumbs":8,"title":2},"1133":{"body":64,"breadcrumbs":8,"title":2},"1134":{"body":74,"breadcrumbs":8,"title":2},"1135":{"body":74,"breadcrumbs":10,"title":4},"1136":{"body":71,"breadcrumbs":8,"title":2},"1137":{"body":120,"breadcrumbs":8,"title":2},"1138":{"body":364,"breadcrumbs":7,"title":1},"1139":{"body":73,"breadcrumbs":10,"title":4},"114":{"body":30,"breadcrumbs":9,"title":5},"1140":{"body":159,"breadcrumbs":9,"title":3},"1141":{"body":66,"breadcrumbs":10,"title":4},"1142":{"body":114,"breadcrumbs":8,"title":2},"1143":{"body":149,"breadcrumbs":8,"title":2},"1144":{"body":183,"breadcrumbs":8,"title":2},"1145":{"body":41,"breadcrumbs":9,"title":3},"1146":{"body":18,"breadcrumbs":7,"title":1},"1147":{"body":64,"breadcrumbs":9,"title":3},"1148":{"body":161,"breadcrumbs":9,"title":3},"1149":{"body":6,"breadcrumbs":9,"title":3},"115":{"body":42,"breadcrumbs":8,"title":4},"1150":{"body":197,"breadcrumbs":8,"title":3},"1151":{"body":66,"breadcrumbs":9,"title":4},"1152":{"body":51,"breadcrumbs":6,"title":3},"1153":{"body":108,"breadcrumbs":5,"title":2},"1154":{"body":54,"breadcrumbs":5,"title":2},"1155":{"body":41,"breadcrumbs":5,"title":2},"1156":{"body":371,"breadcrumbs":5,"title":2},"1157":{"body":102,"breadcrumbs":6,"title":3},"1158":{"body":64,"breadcrumbs":8,"title":5},"1159":{"body":85,"breadcrumbs":4,"title":1},"116":{"body":34,"breadcrumbs":7,"title":3},"1160":{"body":296,"breadcrumbs":5,"title":2},"1161":{"body":186,"breadcrumbs":5,"title":2},"1162":{"body":116,"breadcrumbs":6,"title":3},"1163":{"body":335,"breadcrumbs":6,"title":3},"1164":{"body":456,"breadcrumbs":5,"title":2},"1165":{"body":75,"breadcrumbs":5,"title":2},"1166":{"body":46,"breadcrumbs":5,"title":2},"1167":{"body":212,"breadcrumbs":3,"title":2},"1168":{"body":87,"breadcrumbs":4,"title":2},"1169":{"body":168,"breadcrumbs":6,"title":4},"117":{"body":52,"breadcrumbs":7,"title":3},"1170":{"body":49,"breadcrumbs":5,"title":3},"1171":{"body":58,"breadcrumbs":5,"title":3},"1172":{"body":262,"breadcrumbs":4,"title":2},"1173":{"body":190,"breadcrumbs":4,"title":2},"1174":{"body":343,"breadcrumbs":4,"title":1},"1175":{"body":63,"breadcrumbs":4,"title":1},"1176":{"body":205,"breadcrumbs":4,"title":1},"1177":{"body":86,"breadcrumbs":7,"title":4},"1178":{"body":69,"breadcrumbs":8,"title":5},"1179":{"body":135,"breadcrumbs":4,"title":1},"118":{"body":41,"breadcrumbs":9,"title":5},"1180":{"body":123,"breadcrumbs":2,"title":1},"1181":{"body":61,"breadcrumbs":2,"title":1},"1182":{"body":112,"breadcrumbs":5,"title":4},"1183":{"body":173,"breadcrumbs":6,"title":4},"1184":{"body":50,"breadcrumbs":4,"title":2},"1185":{"body":120,"breadcrumbs":3,"title":1},"1186":{"body":116,"breadcrumbs":7,"title":5},"1187":{"body":133,"breadcrumbs":6,"title":2},"1188":{"body":143,"breadcrumbs":7,"title":3},"1189":{"body":128,"breadcrumbs":7,"title":3},"119":{"body":38,"breadcrumbs":7,"title":3},"1190":{"body":424,"breadcrumbs":8,"title":4},"1191":{"body":62,"breadcrumbs":6,"title":2},"1192":{"body":36,"breadcrumbs":6,"title":2},"1193":{"body":64,"breadcrumbs":6,"title":2},"1194":{"body":143,"breadcrumbs":8,"title":4},"1195":{"body":334,"breadcrumbs":8,"title":4},"1196":{"body":164,"breadcrumbs":8,"title":4},"1197":{"body":11,"breadcrumbs":8,"title":4},"1198":{"body":174,"breadcrumbs":8,"title":4},"1199":{"body":103,"breadcrumbs":8,"title":4},"12":{"body":28,"breadcrumbs":6,"title":4},"120":{"body":235,"breadcrumbs":8,"title":4},"1200":{"body":55,"breadcrumbs":8,"title":4},"1201":{"body":31,"breadcrumbs":8,"title":3},"1202":{"body":5,"breadcrumbs":7,"title":2},"1203":{"body":194,"breadcrumbs":9,"title":4},"1204":{"body":160,"breadcrumbs":8,"title":3},"1205":{"body":176,"breadcrumbs":7,"title":2},"1206":{"body":150,"breadcrumbs":8,"title":3},"1207":{"body":52,"breadcrumbs":8,"title":3},"1208":{"body":82,"breadcrumbs":7,"title":2},"1209":{"body":54,"breadcrumbs":8,"title":3},"121":{"body":125,"breadcrumbs":6,"title":2},"1210":{"body":18,"breadcrumbs":8,"title":3},"1211":{"body":43,"breadcrumbs":8,"title":3},"1212":{"body":36,"breadcrumbs":8,"title":3},"1213":{"body":118,"breadcrumbs":9,"title":4},"1214":{"body":39,"breadcrumbs":7,"title":2},"1215":{"body":113,"breadcrumbs":7,"title":2},"1216":{"body":33,"breadcrumbs":6,"title":1},"1217":{"body":93,"breadcrumbs":6,"title":1},"1218":{"body":128,"breadcrumbs":6,"title":1},"1219":{"body":18,"breadcrumbs":4,"title":2},"122":{"body":70,"breadcrumbs":7,"title":3},"1220":{"body":30,"breadcrumbs":3,"title":1},"1221":{"body":95,"breadcrumbs":3,"title":1},"1222":{"body":13,"breadcrumbs":3,"title":1},"1223":{"body":41,"breadcrumbs":3,"title":1},"1224":{"body":95,"breadcrumbs":3,"title":1},"1225":{"body":77,"breadcrumbs":5,"title":3},"1226":{"body":67,"breadcrumbs":5,"title":3},"1227":{"body":126,"breadcrumbs":4,"title":2},"1228":{"body":88,"breadcrumbs":3,"title":1},"1229":{"body":40,"breadcrumbs":6,"title":3},"123":{"body":117,"breadcrumbs":8,"title":2},"1230":{"body":51,"breadcrumbs":6,"title":3},"1231":{"body":140,"breadcrumbs":6,"title":3},"1232":{"body":51,"breadcrumbs":5,"title":2},"1233":{"body":108,"breadcrumbs":6,"title":3},"1234":{"body":55,"breadcrumbs":5,"title":2},"1235":{"body":25,"breadcrumbs":5,"title":2},"1236":{"body":7,"breadcrumbs":5,"title":2},"1237":{"body":133,"breadcrumbs":10,"title":5},"1238":{"body":77,"breadcrumbs":8,"title":3},"1239":{"body":63,"breadcrumbs":8,"title":3},"124":{"body":184,"breadcrumbs":8,"title":2},"1240":{"body":60,"breadcrumbs":8,"title":3},"1241":{"body":159,"breadcrumbs":8,"title":3},"1242":{"body":81,"breadcrumbs":4,"title":2},"1243":{"body":25,"breadcrumbs":4,"title":2},"1244":{"body":138,"breadcrumbs":5,"title":3},"1245":{"body":40,"breadcrumbs":4,"title":2},"1246":{"body":57,"breadcrumbs":6,"title":4},"1247":{"body":18,"breadcrumbs":4,"title":2},"1248":{"body":109,"breadcrumbs":8,"title":4},"1249":{"body":0,"breadcrumbs":5,"title":1},"125":{"body":174,"breadcrumbs":8,"title":2},"1250":{"body":42,"breadcrumbs":5,"title":1},"1251":{"body":83,"breadcrumbs":5,"title":1},"1252":{"body":50,"breadcrumbs":5,"title":1},"1253":{"body":0,"breadcrumbs":6,"title":2},"1254":{"body":188,"breadcrumbs":5,"title":1},"1255":{"body":35,"breadcrumbs":5,"title":1},"1256":{"body":108,"breadcrumbs":5,"title":1},"1257":{"body":111,"breadcrumbs":6,"title":2},"1258":{"body":53,"breadcrumbs":7,"title":3},"1259":{"body":5,"breadcrumbs":6,"title":2},"126":{"body":103,"breadcrumbs":8,"title":2},"1260":{"body":0,"breadcrumbs":5,"title":1},"1261":{"body":108,"breadcrumbs":10,"title":6},"1262":{"body":62,"breadcrumbs":6,"title":2},"1263":{"body":68,"breadcrumbs":10,"title":6},"1264":{"body":47,"breadcrumbs":7,"title":3},"1265":{"body":162,"breadcrumbs":9,"title":5},"1266":{"body":107,"breadcrumbs":6,"title":2},"1267":{"body":16,"breadcrumbs":5,"title":2},"1268":{"body":146,"breadcrumbs":6,"title":3},"1269":{"body":253,"breadcrumbs":5,"title":2},"127":{"body":193,"breadcrumbs":8,"title":2},"1270":{"body":118,"breadcrumbs":7,"title":4},"1271":{"body":69,"breadcrumbs":6,"title":3},"1272":{"body":16,"breadcrumbs":6,"title":3},"1273":{"body":97,"breadcrumbs":9,"title":6},"1274":{"body":25,"breadcrumbs":6,"title":3},"1275":{"body":41,"breadcrumbs":4,"title":1},"1276":{"body":7,"breadcrumbs":4,"title":1},"1277":{"body":8,"breadcrumbs":4,"title":1},"1278":{"body":10,"breadcrumbs":7,"title":4},"1279":{"body":1634,"breadcrumbs":4,"title":1},"128":{"body":139,"breadcrumbs":9,"title":3},"1280":{"body":307,"breadcrumbs":6,"title":2},"1281":{"body":7,"breadcrumbs":8,"title":3},"1282":{"body":25,"breadcrumbs":6,"title":1},"1283":{"body":35,"breadcrumbs":7,"title":2},"1284":{"body":37,"breadcrumbs":7,"title":2},"1285":{"body":19,"breadcrumbs":6,"title":1},"1286":{"body":28,"breadcrumbs":6,"title":1},"1287":{"body":11,"breadcrumbs":6,"title":1},"1288":{"body":7,"breadcrumbs":6,"title":1},"1289":{"body":12,"breadcrumbs":6,"title":1},"129":{"body":91,"breadcrumbs":8,"title":2},"1290":{"body":10,"breadcrumbs":7,"title":2},"1291":{"body":17,"breadcrumbs":5,"title":2},"1292":{"body":46,"breadcrumbs":5,"title":2},"1293":{"body":102,"breadcrumbs":4,"title":1},"1294":{"body":11,"breadcrumbs":4,"title":1},"1295":{"body":230,"breadcrumbs":5,"title":2},"1296":{"body":36,"breadcrumbs":5,"title":2},"13":{"body":87,"breadcrumbs":4,"title":2},"130":{"body":405,"breadcrumbs":8,"title":2},"131":{"body":201,"breadcrumbs":9,"title":3},"132":{"body":193,"breadcrumbs":10,"title":4},"133":{"body":61,"breadcrumbs":7,"title":1},"134":{"body":129,"breadcrumbs":7,"title":1},"135":{"body":9,"breadcrumbs":7,"title":1},"136":{"body":95,"breadcrumbs":9,"title":3},"137":{"body":83,"breadcrumbs":9,"title":3},"138":{"body":8,"breadcrumbs":10,"title":4},"139":{"body":64,"breadcrumbs":13,"title":7},"14":{"body":4,"breadcrumbs":4,"title":2},"140":{"body":102,"breadcrumbs":10,"title":4},"141":{"body":52,"breadcrumbs":9,"title":3},"142":{"body":45,"breadcrumbs":9,"title":3},"143":{"body":206,"breadcrumbs":8,"title":3},"144":{"body":17,"breadcrumbs":8,"title":3},"145":{"body":115,"breadcrumbs":10,"title":5},"146":{"body":63,"breadcrumbs":10,"title":5},"147":{"body":49,"breadcrumbs":10,"title":5},"148":{"body":118,"breadcrumbs":9,"title":4},"149":{"body":42,"breadcrumbs":9,"title":4},"15":{"body":5,"breadcrumbs":4,"title":2},"150":{"body":62,"breadcrumbs":8,"title":3},"151":{"body":147,"breadcrumbs":8,"title":4},"152":{"body":184,"breadcrumbs":6,"title":2},"153":{"body":54,"breadcrumbs":6,"title":2},"154":{"body":206,"breadcrumbs":6,"title":2},"155":{"body":27,"breadcrumbs":6,"title":2},"156":{"body":83,"breadcrumbs":6,"title":2},"157":{"body":37,"breadcrumbs":6,"title":2},"158":{"body":27,"breadcrumbs":7,"title":3},"159":{"body":73,"breadcrumbs":4,"title":1},"16":{"body":4,"breadcrumbs":3,"title":1},"160":{"body":188,"breadcrumbs":4,"title":1},"161":{"body":44,"breadcrumbs":5,"title":2},"162":{"body":83,"breadcrumbs":7,"title":4},"163":{"body":8,"breadcrumbs":7,"title":4},"164":{"body":70,"breadcrumbs":6,"title":3},"165":{"body":176,"breadcrumbs":6,"title":3},"166":{"body":137,"breadcrumbs":5,"title":2},"167":{"body":338,"breadcrumbs":5,"title":2},"168":{"body":49,"breadcrumbs":5,"title":2},"169":{"body":64,"breadcrumbs":5,"title":2},"17":{"body":138,"breadcrumbs":2,"title":1},"170":{"body":64,"breadcrumbs":6,"title":3},"171":{"body":183,"breadcrumbs":6,"title":3},"172":{"body":206,"breadcrumbs":6,"title":3},"173":{"body":275,"breadcrumbs":5,"title":2},"174":{"body":165,"breadcrumbs":5,"title":2},"175":{"body":145,"breadcrumbs":6,"title":3},"176":{"body":185,"breadcrumbs":6,"title":3},"177":{"body":163,"breadcrumbs":4,"title":1},"178":{"body":49,"breadcrumbs":7,"title":4},"179":{"body":123,"breadcrumbs":5,"title":2},"18":{"body":83,"breadcrumbs":3,"title":2},"180":{"body":70,"breadcrumbs":7,"title":2},"181":{"body":34,"breadcrumbs":6,"title":1},"182":{"body":92,"breadcrumbs":8,"title":3},"183":{"body":199,"breadcrumbs":7,"title":2},"184":{"body":286,"breadcrumbs":6,"title":1},"185":{"body":236,"breadcrumbs":7,"title":2},"186":{"body":197,"breadcrumbs":8,"title":3},"187":{"body":128,"breadcrumbs":7,"title":2},"188":{"body":141,"breadcrumbs":9,"title":4},"189":{"body":96,"breadcrumbs":7,"title":2},"19":{"body":149,"breadcrumbs":4,"title":3},"190":{"body":175,"breadcrumbs":8,"title":3},"191":{"body":88,"breadcrumbs":7,"title":2},"192":{"body":152,"breadcrumbs":7,"title":2},"193":{"body":109,"breadcrumbs":7,"title":2},"194":{"body":86,"breadcrumbs":7,"title":2},"195":{"body":64,"breadcrumbs":8,"title":3},"196":{"body":59,"breadcrumbs":11,"title":6},"197":{"body":129,"breadcrumbs":7,"title":2},"198":{"body":24,"breadcrumbs":8,"title":3},"199":{"body":20,"breadcrumbs":6,"title":1},"2":{"body":74,"breadcrumbs":3,"title":1},"20":{"body":54,"breadcrumbs":6,"title":3},"200":{"body":114,"breadcrumbs":7,"title":2},"201":{"body":106,"breadcrumbs":8,"title":3},"202":{"body":320,"breadcrumbs":9,"title":4},"203":{"body":567,"breadcrumbs":8,"title":3},"204":{"body":121,"breadcrumbs":8,"title":3},"205":{"body":62,"breadcrumbs":6,"title":1},"206":{"body":45,"breadcrumbs":7,"title":2},"207":{"body":47,"breadcrumbs":8,"title":3},"208":{"body":133,"breadcrumbs":6,"title":1},"209":{"body":54,"breadcrumbs":7,"title":2},"21":{"body":9,"breadcrumbs":5,"title":2},"210":{"body":215,"breadcrumbs":9,"title":4},"211":{"body":156,"breadcrumbs":8,"title":3},"212":{"body":58,"breadcrumbs":10,"title":6},"213":{"body":42,"breadcrumbs":7,"title":3},"214":{"body":17,"breadcrumbs":8,"title":4},"215":{"body":54,"breadcrumbs":9,"title":5},"216":{"body":14,"breadcrumbs":6,"title":2},"217":{"body":0,"breadcrumbs":6,"title":2},"218":{"body":20,"breadcrumbs":5,"title":1},"219":{"body":24,"breadcrumbs":5,"title":1},"22":{"body":34,"breadcrumbs":5,"title":2},"220":{"body":20,"breadcrumbs":8,"title":4},"221":{"body":27,"breadcrumbs":6,"title":1},"222":{"body":16,"breadcrumbs":7,"title":2},"223":{"body":158,"breadcrumbs":8,"title":3},"224":{"body":19,"breadcrumbs":8,"title":3},"225":{"body":10,"breadcrumbs":8,"title":3},"226":{"body":39,"breadcrumbs":8,"title":3},"227":{"body":69,"breadcrumbs":8,"title":3},"228":{"body":48,"breadcrumbs":8,"title":3},"229":{"body":348,"breadcrumbs":8,"title":3},"23":{"body":71,"breadcrumbs":6,"title":3},"230":{"body":31,"breadcrumbs":8,"title":3},"231":{"body":11,"breadcrumbs":10,"title":4},"232":{"body":101,"breadcrumbs":10,"title":4},"233":{"body":75,"breadcrumbs":10,"title":4},"234":{"body":34,"breadcrumbs":8,"title":3},"235":{"body":6,"breadcrumbs":12,"title":4},"236":{"body":6,"breadcrumbs":12,"title":4},"237":{"body":0,"breadcrumbs":6,"title":2},"238":{"body":70,"breadcrumbs":6,"title":2},"239":{"body":18,"breadcrumbs":7,"title":3},"24":{"body":92,"breadcrumbs":6,"title":3},"240":{"body":137,"breadcrumbs":7,"title":3},"241":{"body":31,"breadcrumbs":8,"title":3},"242":{"body":42,"breadcrumbs":6,"title":1},"243":{"body":15,"breadcrumbs":7,"title":2},"244":{"body":56,"breadcrumbs":7,"title":2},"245":{"body":61,"breadcrumbs":7,"title":2},"246":{"body":0,"breadcrumbs":8,"title":4},"247":{"body":89,"breadcrumbs":6,"title":2},"248":{"body":68,"breadcrumbs":4,"title":2},"249":{"body":110,"breadcrumbs":4,"title":2},"25":{"body":86,"breadcrumbs":4,"title":1},"250":{"body":28,"breadcrumbs":5,"title":3},"251":{"body":100,"breadcrumbs":4,"title":2},"252":{"body":38,"breadcrumbs":4,"title":2},"253":{"body":162,"breadcrumbs":5,"title":3},"254":{"body":28,"breadcrumbs":5,"title":3},"255":{"body":90,"breadcrumbs":6,"title":4},"256":{"body":10,"breadcrumbs":5,"title":3},"257":{"body":35,"breadcrumbs":5,"title":3},"258":{"body":38,"breadcrumbs":6,"title":4},"259":{"body":119,"breadcrumbs":5,"title":3},"26":{"body":153,"breadcrumbs":5,"title":2},"260":{"body":46,"breadcrumbs":7,"title":5},"261":{"body":69,"breadcrumbs":5,"title":3},"262":{"body":69,"breadcrumbs":6,"title":4},"263":{"body":70,"breadcrumbs":9,"title":4},"264":{"body":33,"breadcrumbs":8,"title":3},"265":{"body":25,"breadcrumbs":8,"title":3},"266":{"body":40,"breadcrumbs":8,"title":3},"267":{"body":56,"breadcrumbs":8,"title":3},"268":{"body":252,"breadcrumbs":9,"title":4},"269":{"body":102,"breadcrumbs":7,"title":2},"27":{"body":71,"breadcrumbs":5,"title":2},"270":{"body":37,"breadcrumbs":12,"title":7},"271":{"body":130,"breadcrumbs":8,"title":3},"272":{"body":115,"breadcrumbs":4,"title":2},"273":{"body":399,"breadcrumbs":9,"title":7},"274":{"body":4,"breadcrumbs":7,"title":2},"275":{"body":42,"breadcrumbs":7,"title":2},"276":{"body":23,"breadcrumbs":8,"title":3},"277":{"body":119,"breadcrumbs":6,"title":1},"278":{"body":210,"breadcrumbs":11,"title":6},"279":{"body":26,"breadcrumbs":8,"title":3},"28":{"body":100,"breadcrumbs":6,"title":3},"280":{"body":94,"breadcrumbs":10,"title":5},"281":{"body":10,"breadcrumbs":8,"title":3},"282":{"body":158,"breadcrumbs":11,"title":6},"283":{"body":78,"breadcrumbs":13,"title":8},"284":{"body":166,"breadcrumbs":10,"title":5},"285":{"body":135,"breadcrumbs":7,"title":2},"286":{"body":0,"breadcrumbs":7,"title":2},"287":{"body":90,"breadcrumbs":8,"title":3},"288":{"body":30,"breadcrumbs":8,"title":3},"289":{"body":186,"breadcrumbs":6,"title":1},"29":{"body":154,"breadcrumbs":5,"title":2},"290":{"body":128,"breadcrumbs":6,"title":1},"291":{"body":72,"breadcrumbs":7,"title":2},"292":{"body":187,"breadcrumbs":8,"title":3},"293":{"body":46,"breadcrumbs":4,"title":2},"294":{"body":12,"breadcrumbs":4,"title":2},"295":{"body":44,"breadcrumbs":4,"title":2},"296":{"body":128,"breadcrumbs":4,"title":2},"297":{"body":49,"breadcrumbs":7,"title":5},"298":{"body":53,"breadcrumbs":4,"title":2},"299":{"body":6,"breadcrumbs":4,"title":2},"3":{"body":30,"breadcrumbs":3,"title":1},"30":{"body":31,"breadcrumbs":6,"title":3},"300":{"body":65,"breadcrumbs":4,"title":2},"301":{"body":54,"breadcrumbs":3,"title":1},"302":{"body":242,"breadcrumbs":4,"title":2},"303":{"body":67,"breadcrumbs":6,"title":4},"304":{"body":86,"breadcrumbs":3,"title":1},"305":{"body":127,"breadcrumbs":4,"title":2},"306":{"body":97,"breadcrumbs":3,"title":1},"307":{"body":88,"breadcrumbs":3,"title":1},"308":{"body":252,"breadcrumbs":4,"title":2},"309":{"body":73,"breadcrumbs":4,"title":2},"31":{"body":179,"breadcrumbs":6,"title":3},"310":{"body":5,"breadcrumbs":4,"title":2},"311":{"body":93,"breadcrumbs":4,"title":2},"312":{"body":198,"breadcrumbs":6,"title":4},"313":{"body":5,"breadcrumbs":4,"title":2},"314":{"body":113,"breadcrumbs":4,"title":2},"315":{"body":4,"breadcrumbs":5,"title":3},"316":{"body":25,"breadcrumbs":4,"title":2},"317":{"body":33,"breadcrumbs":3,"title":1},"318":{"body":27,"breadcrumbs":3,"title":1},"319":{"body":159,"breadcrumbs":5,"title":3},"32":{"body":172,"breadcrumbs":7,"title":4},"320":{"body":73,"breadcrumbs":4,"title":2},"321":{"body":71,"breadcrumbs":4,"title":2},"322":{"body":58,"breadcrumbs":4,"title":2},"323":{"body":39,"breadcrumbs":5,"title":3},"324":{"body":160,"breadcrumbs":4,"title":2},"325":{"body":71,"breadcrumbs":3,"title":1},"326":{"body":167,"breadcrumbs":4,"title":2},"327":{"body":30,"breadcrumbs":5,"title":3},"328":{"body":25,"breadcrumbs":6,"title":4},"329":{"body":38,"breadcrumbs":5,"title":3},"33":{"body":81,"breadcrumbs":5,"title":2},"330":{"body":123,"breadcrumbs":5,"title":3},"331":{"body":75,"breadcrumbs":7,"title":5},"332":{"body":17,"breadcrumbs":6,"title":4},"333":{"body":35,"breadcrumbs":4,"title":2},"334":{"body":71,"breadcrumbs":5,"title":3},"335":{"body":57,"breadcrumbs":8,"title":6},"336":{"body":106,"breadcrumbs":5,"title":3},"337":{"body":37,"breadcrumbs":4,"title":2},"338":{"body":220,"breadcrumbs":3,"title":1},"339":{"body":109,"breadcrumbs":6,"title":4},"34":{"body":37,"breadcrumbs":7,"title":4},"340":{"body":0,"breadcrumbs":4,"title":2},"341":{"body":133,"breadcrumbs":4,"title":2},"342":{"body":228,"breadcrumbs":5,"title":3},"343":{"body":74,"breadcrumbs":4,"title":2},"344":{"body":5,"breadcrumbs":4,"title":2},"345":{"body":16,"breadcrumbs":4,"title":2},"346":{"body":31,"breadcrumbs":4,"title":2},"347":{"body":47,"breadcrumbs":6,"title":4},"348":{"body":14,"breadcrumbs":4,"title":2},"349":{"body":33,"breadcrumbs":6,"title":4},"35":{"body":68,"breadcrumbs":6,"title":3},"350":{"body":230,"breadcrumbs":4,"title":2},"351":{"body":108,"breadcrumbs":5,"title":3},"352":{"body":21,"breadcrumbs":5,"title":3},"353":{"body":37,"breadcrumbs":7,"title":5},"354":{"body":58,"breadcrumbs":7,"title":5},"355":{"body":26,"breadcrumbs":4,"title":2},"356":{"body":52,"breadcrumbs":4,"title":2},"357":{"body":128,"breadcrumbs":4,"title":2},"358":{"body":37,"breadcrumbs":3,"title":1},"359":{"body":59,"breadcrumbs":6,"title":3},"36":{"body":212,"breadcrumbs":5,"title":1},"360":{"body":156,"breadcrumbs":4,"title":1},"361":{"body":370,"breadcrumbs":6,"title":3},"362":{"body":342,"breadcrumbs":4,"title":1},"363":{"body":91,"breadcrumbs":5,"title":2},"364":{"body":52,"breadcrumbs":4,"title":1},"365":{"body":46,"breadcrumbs":8,"title":4},"366":{"body":189,"breadcrumbs":7,"title":3},"367":{"body":11,"breadcrumbs":7,"title":3},"368":{"body":25,"breadcrumbs":6,"title":2},"369":{"body":122,"breadcrumbs":5,"title":1},"37":{"body":0,"breadcrumbs":5,"title":1},"370":{"body":45,"breadcrumbs":6,"title":2},"371":{"body":253,"breadcrumbs":6,"title":2},"372":{"body":41,"breadcrumbs":4,"title":2},"373":{"body":155,"breadcrumbs":3,"title":1},"374":{"body":15,"breadcrumbs":3,"title":1},"375":{"body":83,"breadcrumbs":3,"title":1},"376":{"body":11,"breadcrumbs":3,"title":1},"377":{"body":41,"breadcrumbs":3,"title":1},"378":{"body":23,"breadcrumbs":3,"title":1},"379":{"body":38,"breadcrumbs":3,"title":1},"38":{"body":4,"breadcrumbs":5,"title":1},"380":{"body":82,"breadcrumbs":5,"title":3},"381":{"body":50,"breadcrumbs":3,"title":1},"382":{"body":88,"breadcrumbs":3,"title":1},"383":{"body":9,"breadcrumbs":3,"title":1},"384":{"body":72,"breadcrumbs":3,"title":1},"385":{"body":47,"breadcrumbs":4,"title":2},"386":{"body":88,"breadcrumbs":4,"title":2},"387":{"body":82,"breadcrumbs":5,"title":3},"388":{"body":30,"breadcrumbs":3,"title":1},"389":{"body":57,"breadcrumbs":4,"title":2},"39":{"body":164,"breadcrumbs":5,"title":1},"390":{"body":65,"breadcrumbs":6,"title":4},"391":{"body":63,"breadcrumbs":7,"title":5},"392":{"body":80,"breadcrumbs":7,"title":5},"393":{"body":21,"breadcrumbs":4,"title":2},"394":{"body":8,"breadcrumbs":5,"title":3},"395":{"body":32,"breadcrumbs":5,"title":3},"396":{"body":63,"breadcrumbs":5,"title":3},"397":{"body":16,"breadcrumbs":4,"title":2},"398":{"body":19,"breadcrumbs":4,"title":2},"399":{"body":70,"breadcrumbs":5,"title":3},"4":{"body":18,"breadcrumbs":3,"title":1},"40":{"body":71,"breadcrumbs":7,"title":2},"400":{"body":32,"breadcrumbs":5,"title":3},"401":{"body":45,"breadcrumbs":6,"title":4},"402":{"body":32,"breadcrumbs":4,"title":2},"403":{"body":25,"breadcrumbs":4,"title":2},"404":{"body":4,"breadcrumbs":5,"title":3},"405":{"body":6,"breadcrumbs":4,"title":2},"406":{"body":39,"breadcrumbs":5,"title":3},"407":{"body":49,"breadcrumbs":9,"title":7},"408":{"body":4,"breadcrumbs":5,"title":3},"409":{"body":117,"breadcrumbs":4,"title":2},"41":{"body":67,"breadcrumbs":9,"title":4},"410":{"body":36,"breadcrumbs":4,"title":2},"411":{"body":58,"breadcrumbs":6,"title":3},"412":{"body":110,"breadcrumbs":4,"title":1},"413":{"body":62,"breadcrumbs":6,"title":3},"414":{"body":97,"breadcrumbs":5,"title":2},"415":{"body":49,"breadcrumbs":5,"title":2},"416":{"body":316,"breadcrumbs":7,"title":4},"417":{"body":71,"breadcrumbs":4,"title":1},"418":{"body":246,"breadcrumbs":5,"title":2},"419":{"body":56,"breadcrumbs":6,"title":3},"42":{"body":109,"breadcrumbs":7,"title":2},"420":{"body":153,"breadcrumbs":6,"title":3},"421":{"body":216,"breadcrumbs":5,"title":2},"422":{"body":51,"breadcrumbs":7,"title":4},"423":{"body":86,"breadcrumbs":6,"title":3},"424":{"body":62,"breadcrumbs":2,"title":1},"425":{"body":0,"breadcrumbs":2,"title":1},"426":{"body":63,"breadcrumbs":2,"title":1},"427":{"body":100,"breadcrumbs":2,"title":1},"428":{"body":72,"breadcrumbs":3,"title":2},"429":{"body":86,"breadcrumbs":3,"title":2},"43":{"body":0,"breadcrumbs":9,"title":4},"430":{"body":61,"breadcrumbs":2,"title":1},"431":{"body":106,"breadcrumbs":3,"title":2},"432":{"body":30,"breadcrumbs":3,"title":2},"433":{"body":63,"breadcrumbs":4,"title":2},"434":{"body":14,"breadcrumbs":5,"title":3},"435":{"body":46,"breadcrumbs":7,"title":5},"436":{"body":78,"breadcrumbs":5,"title":3},"437":{"body":92,"breadcrumbs":6,"title":4},"438":{"body":67,"breadcrumbs":6,"title":3},"439":{"body":51,"breadcrumbs":5,"title":2},"44":{"body":47,"breadcrumbs":8,"title":3},"440":{"body":67,"breadcrumbs":7,"title":4},"441":{"body":58,"breadcrumbs":6,"title":3},"442":{"body":58,"breadcrumbs":6,"title":3},"443":{"body":22,"breadcrumbs":6,"title":3},"444":{"body":64,"breadcrumbs":8,"title":4},"445":{"body":71,"breadcrumbs":8,"title":4},"446":{"body":58,"breadcrumbs":6,"title":3},"447":{"body":58,"breadcrumbs":7,"title":4},"448":{"body":88,"breadcrumbs":6,"title":3},"449":{"body":25,"breadcrumbs":4,"title":3},"45":{"body":101,"breadcrumbs":10,"title":5},"450":{"body":96,"breadcrumbs":3,"title":2},"451":{"body":54,"breadcrumbs":2,"title":1},"452":{"body":49,"breadcrumbs":2,"title":1},"453":{"body":40,"breadcrumbs":3,"title":2},"454":{"body":15,"breadcrumbs":4,"title":3},"455":{"body":219,"breadcrumbs":4,"title":3},"456":{"body":133,"breadcrumbs":3,"title":2},"457":{"body":55,"breadcrumbs":2,"title":1},"458":{"body":37,"breadcrumbs":3,"title":2},"459":{"body":28,"breadcrumbs":2,"title":1},"46":{"body":108,"breadcrumbs":11,"title":6},"460":{"body":204,"breadcrumbs":3,"title":2},"461":{"body":172,"breadcrumbs":4,"title":3},"462":{"body":71,"breadcrumbs":3,"title":2},"463":{"body":46,"breadcrumbs":3,"title":2},"464":{"body":0,"breadcrumbs":4,"title":3},"465":{"body":39,"breadcrumbs":2,"title":1},"466":{"body":94,"breadcrumbs":4,"title":3},"467":{"body":172,"breadcrumbs":5,"title":4},"468":{"body":54,"breadcrumbs":3,"title":2},"469":{"body":73,"breadcrumbs":3,"title":2},"47":{"body":52,"breadcrumbs":8,"title":3},"470":{"body":137,"breadcrumbs":2,"title":1},"471":{"body":0,"breadcrumbs":3,"title":2},"472":{"body":128,"breadcrumbs":2,"title":1},"473":{"body":64,"breadcrumbs":6,"title":5},"474":{"body":9,"breadcrumbs":7,"title":6},"475":{"body":89,"breadcrumbs":6,"title":5},"476":{"body":18,"breadcrumbs":6,"title":5},"477":{"body":50,"breadcrumbs":3,"title":2},"478":{"body":93,"breadcrumbs":3,"title":2},"479":{"body":0,"breadcrumbs":4,"title":3},"48":{"body":221,"breadcrumbs":6,"title":1},"480":{"body":202,"breadcrumbs":2,"title":1},"481":{"body":64,"breadcrumbs":4,"title":3},"482":{"body":115,"breadcrumbs":3,"title":2},"483":{"body":74,"breadcrumbs":4,"title":3},"484":{"body":335,"breadcrumbs":2,"title":1},"485":{"body":87,"breadcrumbs":6,"title":5},"486":{"body":83,"breadcrumbs":3,"title":2},"487":{"body":134,"breadcrumbs":5,"title":4},"488":{"body":12,"breadcrumbs":5,"title":4},"489":{"body":8,"breadcrumbs":4,"title":3},"49":{"body":51,"breadcrumbs":6,"title":1},"490":{"body":57,"breadcrumbs":4,"title":3},"491":{"body":21,"breadcrumbs":2,"title":1},"492":{"body":89,"breadcrumbs":3,"title":2},"493":{"body":28,"breadcrumbs":3,"title":2},"494":{"body":106,"breadcrumbs":6,"title":3},"495":{"body":17,"breadcrumbs":4,"title":2},"496":{"body":260,"breadcrumbs":4,"title":2},"497":{"body":7,"breadcrumbs":4,"title":2},"498":{"body":364,"breadcrumbs":5,"title":3},"499":{"body":99,"breadcrumbs":5,"title":3},"5":{"body":48,"breadcrumbs":5,"title":3},"50":{"body":28,"breadcrumbs":6,"title":1},"500":{"body":29,"breadcrumbs":4,"title":2},"501":{"body":22,"breadcrumbs":5,"title":3},"502":{"body":25,"breadcrumbs":5,"title":3},"503":{"body":98,"breadcrumbs":4,"title":2},"504":{"body":16,"breadcrumbs":4,"title":2},"505":{"body":11,"breadcrumbs":9,"title":7},"506":{"body":11,"breadcrumbs":7,"title":5},"507":{"body":9,"breadcrumbs":10,"title":8},"508":{"body":9,"breadcrumbs":9,"title":7},"509":{"body":69,"breadcrumbs":5,"title":4},"51":{"body":31,"breadcrumbs":6,"title":1},"510":{"body":54,"breadcrumbs":4,"title":2},"511":{"body":13,"breadcrumbs":4,"title":2},"512":{"body":62,"breadcrumbs":3,"title":1},"513":{"body":240,"breadcrumbs":4,"title":2},"514":{"body":79,"breadcrumbs":4,"title":2},"515":{"body":75,"breadcrumbs":4,"title":2},"516":{"body":60,"breadcrumbs":4,"title":2},"517":{"body":200,"breadcrumbs":2,"title":0},"518":{"body":307,"breadcrumbs":4,"title":2},"519":{"body":269,"breadcrumbs":3,"title":1},"52":{"body":77,"breadcrumbs":9,"title":4},"520":{"body":37,"breadcrumbs":3,"title":1},"521":{"body":71,"breadcrumbs":3,"title":1},"522":{"body":38,"breadcrumbs":3,"title":1},"523":{"body":224,"breadcrumbs":3,"title":1},"524":{"body":36,"breadcrumbs":8,"title":5},"525":{"body":76,"breadcrumbs":5,"title":2},"526":{"body":139,"breadcrumbs":4,"title":1},"527":{"body":209,"breadcrumbs":5,"title":2},"528":{"body":22,"breadcrumbs":4,"title":1},"529":{"body":12,"breadcrumbs":4,"title":1},"53":{"body":84,"breadcrumbs":7,"title":2},"530":{"body":31,"breadcrumbs":5,"title":2},"531":{"body":20,"breadcrumbs":5,"title":2},"532":{"body":37,"breadcrumbs":3,"title":0},"533":{"body":196,"breadcrumbs":8,"title":4},"534":{"body":18,"breadcrumbs":6,"title":2},"535":{"body":33,"breadcrumbs":7,"title":3},"536":{"body":164,"breadcrumbs":5,"title":1},"537":{"body":119,"breadcrumbs":7,"title":3},"538":{"body":206,"breadcrumbs":7,"title":3},"539":{"body":30,"breadcrumbs":6,"title":2},"54":{"body":77,"breadcrumbs":9,"title":4},"540":{"body":38,"breadcrumbs":12,"title":4},"541":{"body":177,"breadcrumbs":9,"title":1},"542":{"body":66,"breadcrumbs":9,"title":1},"543":{"body":104,"breadcrumbs":10,"title":2},"544":{"body":141,"breadcrumbs":12,"title":4},"545":{"body":98,"breadcrumbs":9,"title":1},"546":{"body":125,"breadcrumbs":10,"title":2},"547":{"body":36,"breadcrumbs":8,"title":2},"548":{"body":210,"breadcrumbs":8,"title":2},"549":{"body":158,"breadcrumbs":10,"title":4},"55":{"body":59,"breadcrumbs":9,"title":4},"550":{"body":108,"breadcrumbs":8,"title":2},"551":{"body":72,"breadcrumbs":9,"title":3},"552":{"body":15,"breadcrumbs":7,"title":1},"553":{"body":8,"breadcrumbs":7,"title":1},"554":{"body":110,"breadcrumbs":10,"title":3},"555":{"body":195,"breadcrumbs":12,"title":5},"556":{"body":99,"breadcrumbs":12,"title":5},"557":{"body":277,"breadcrumbs":12,"title":5},"558":{"body":115,"breadcrumbs":13,"title":6},"559":{"body":203,"breadcrumbs":14,"title":7},"56":{"body":45,"breadcrumbs":8,"title":3},"560":{"body":224,"breadcrumbs":13,"title":6},"561":{"body":216,"breadcrumbs":12,"title":5},"562":{"body":122,"breadcrumbs":12,"title":5},"563":{"body":130,"breadcrumbs":11,"title":4},"564":{"body":295,"breadcrumbs":9,"title":2},"565":{"body":137,"breadcrumbs":10,"title":3},"566":{"body":4,"breadcrumbs":10,"title":3},"567":{"body":23,"breadcrumbs":11,"title":4},"568":{"body":29,"breadcrumbs":10,"title":3},"569":{"body":0,"breadcrumbs":9,"title":3},"57":{"body":40,"breadcrumbs":8,"title":3},"570":{"body":95,"breadcrumbs":9,"title":3},"571":{"body":0,"breadcrumbs":9,"title":3},"572":{"body":147,"breadcrumbs":8,"title":2},"573":{"body":95,"breadcrumbs":10,"title":4},"574":{"body":61,"breadcrumbs":7,"title":2},"575":{"body":82,"breadcrumbs":6,"title":1},"576":{"body":193,"breadcrumbs":6,"title":1},"577":{"body":0,"breadcrumbs":8,"title":3},"578":{"body":22,"breadcrumbs":6,"title":1},"579":{"body":81,"breadcrumbs":6,"title":1},"58":{"body":114,"breadcrumbs":10,"title":5},"580":{"body":302,"breadcrumbs":7,"title":2},"581":{"body":28,"breadcrumbs":6,"title":3},"582":{"body":51,"breadcrumbs":5,"title":2},"583":{"body":162,"breadcrumbs":5,"title":2},"584":{"body":42,"breadcrumbs":6,"title":3},"585":{"body":82,"breadcrumbs":5,"title":2},"586":{"body":54,"breadcrumbs":4,"title":2},"587":{"body":129,"breadcrumbs":5,"title":3},"588":{"body":99,"breadcrumbs":7,"title":5},"589":{"body":57,"breadcrumbs":4,"title":2},"59":{"body":40,"breadcrumbs":7,"title":2},"590":{"body":39,"breadcrumbs":3,"title":1},"591":{"body":71,"breadcrumbs":3,"title":1},"592":{"body":22,"breadcrumbs":3,"title":1},"593":{"body":83,"breadcrumbs":4,"title":2},"594":{"body":31,"breadcrumbs":4,"title":2},"595":{"body":97,"breadcrumbs":4,"title":2},"596":{"body":52,"breadcrumbs":3,"title":1},"597":{"body":225,"breadcrumbs":4,"title":2},"598":{"body":128,"breadcrumbs":4,"title":2},"599":{"body":16,"breadcrumbs":3,"title":1},"6":{"body":41,"breadcrumbs":4,"title":2},"60":{"body":46,"breadcrumbs":6,"title":1},"600":{"body":20,"breadcrumbs":3,"title":1},"601":{"body":36,"breadcrumbs":4,"title":2},"602":{"body":243,"breadcrumbs":4,"title":2},"603":{"body":257,"breadcrumbs":8,"title":6},"604":{"body":181,"breadcrumbs":4,"title":2},"605":{"body":184,"breadcrumbs":10,"title":8},"606":{"body":90,"breadcrumbs":5,"title":3},"607":{"body":44,"breadcrumbs":4,"title":2},"608":{"body":8,"breadcrumbs":3,"title":1},"609":{"body":54,"breadcrumbs":5,"title":2},"61":{"body":31,"breadcrumbs":7,"title":2},"610":{"body":300,"breadcrumbs":6,"title":3},"611":{"body":211,"breadcrumbs":7,"title":4},"612":{"body":181,"breadcrumbs":6,"title":3},"613":{"body":176,"breadcrumbs":5,"title":2},"614":{"body":77,"breadcrumbs":5,"title":2},"615":{"body":131,"breadcrumbs":5,"title":2},"616":{"body":158,"breadcrumbs":5,"title":2},"617":{"body":178,"breadcrumbs":5,"title":2},"618":{"body":300,"breadcrumbs":6,"title":3},"619":{"body":58,"breadcrumbs":8,"title":3},"62":{"body":12,"breadcrumbs":8,"title":3},"620":{"body":174,"breadcrumbs":7,"title":2},"621":{"body":44,"breadcrumbs":5,"title":0},"622":{"body":28,"breadcrumbs":6,"title":1},"623":{"body":22,"breadcrumbs":6,"title":1},"624":{"body":15,"breadcrumbs":6,"title":1},"625":{"body":14,"breadcrumbs":6,"title":1},"626":{"body":50,"breadcrumbs":6,"title":1},"627":{"body":8,"breadcrumbs":6,"title":1},"628":{"body":44,"breadcrumbs":6,"title":1},"629":{"body":60,"breadcrumbs":8,"title":3},"63":{"body":65,"breadcrumbs":7,"title":2},"630":{"body":109,"breadcrumbs":6,"title":1},"631":{"body":37,"breadcrumbs":6,"title":1},"632":{"body":57,"breadcrumbs":10,"title":4},"633":{"body":6,"breadcrumbs":10,"title":4},"634":{"body":74,"breadcrumbs":2,"title":2},"635":{"body":38,"breadcrumbs":4,"title":1},"636":{"body":115,"breadcrumbs":5,"title":2},"637":{"body":138,"breadcrumbs":7,"title":4},"638":{"body":94,"breadcrumbs":7,"title":4},"639":{"body":61,"breadcrumbs":6,"title":3},"64":{"body":106,"breadcrumbs":7,"title":2},"640":{"body":61,"breadcrumbs":7,"title":4},"641":{"body":65,"breadcrumbs":8,"title":5},"642":{"body":80,"breadcrumbs":8,"title":5},"643":{"body":120,"breadcrumbs":8,"title":5},"644":{"body":131,"breadcrumbs":10,"title":7},"645":{"body":50,"breadcrumbs":9,"title":6},"646":{"body":134,"breadcrumbs":6,"title":3},"647":{"body":43,"breadcrumbs":6,"title":3},"648":{"body":26,"breadcrumbs":6,"title":2},"649":{"body":98,"breadcrumbs":6,"title":2},"65":{"body":147,"breadcrumbs":7,"title":2},"650":{"body":75,"breadcrumbs":6,"title":2},"651":{"body":0,"breadcrumbs":6,"title":2},"652":{"body":52,"breadcrumbs":6,"title":2},"653":{"body":18,"breadcrumbs":6,"title":2},"654":{"body":25,"breadcrumbs":6,"title":2},"655":{"body":45,"breadcrumbs":6,"title":2},"656":{"body":37,"breadcrumbs":6,"title":2},"657":{"body":24,"breadcrumbs":6,"title":2},"658":{"body":42,"breadcrumbs":4,"title":3},"659":{"body":69,"breadcrumbs":4,"title":2},"66":{"body":117,"breadcrumbs":7,"title":2},"660":{"body":55,"breadcrumbs":6,"title":2},"661":{"body":100,"breadcrumbs":5,"title":1},"662":{"body":86,"breadcrumbs":5,"title":1},"663":{"body":43,"breadcrumbs":7,"title":3},"664":{"body":113,"breadcrumbs":6,"title":2},"665":{"body":253,"breadcrumbs":7,"title":3},"666":{"body":38,"breadcrumbs":6,"title":2},"667":{"body":42,"breadcrumbs":6,"title":2},"668":{"body":106,"breadcrumbs":6,"title":2},"669":{"body":63,"breadcrumbs":6,"title":2},"67":{"body":81,"breadcrumbs":7,"title":2},"670":{"body":295,"breadcrumbs":6,"title":2},"671":{"body":53,"breadcrumbs":7,"title":3},"672":{"body":208,"breadcrumbs":7,"title":3},"673":{"body":38,"breadcrumbs":7,"title":3},"674":{"body":8,"breadcrumbs":6,"title":2},"675":{"body":104,"breadcrumbs":7,"title":3},"676":{"body":32,"breadcrumbs":6,"title":2},"677":{"body":129,"breadcrumbs":5,"title":1},"678":{"body":403,"breadcrumbs":6,"title":2},"679":{"body":71,"breadcrumbs":6,"title":2},"68":{"body":13,"breadcrumbs":6,"title":1},"680":{"body":6,"breadcrumbs":6,"title":2},"681":{"body":28,"breadcrumbs":8,"title":4},"682":{"body":132,"breadcrumbs":6,"title":2},"683":{"body":141,"breadcrumbs":5,"title":1},"684":{"body":69,"breadcrumbs":5,"title":1},"685":{"body":209,"breadcrumbs":6,"title":2},"686":{"body":62,"breadcrumbs":6,"title":2},"687":{"body":62,"breadcrumbs":7,"title":3},"688":{"body":47,"breadcrumbs":6,"title":2},"689":{"body":9,"breadcrumbs":4,"title":1},"69":{"body":102,"breadcrumbs":6,"title":1},"690":{"body":59,"breadcrumbs":5,"title":2},"691":{"body":129,"breadcrumbs":6,"title":3},"692":{"body":114,"breadcrumbs":6,"title":2},"693":{"body":138,"breadcrumbs":8,"title":4},"694":{"body":67,"breadcrumbs":8,"title":4},"695":{"body":96,"breadcrumbs":9,"title":5},"696":{"body":18,"breadcrumbs":7,"title":3},"697":{"body":15,"breadcrumbs":6,"title":2},"698":{"body":29,"breadcrumbs":9,"title":5},"699":{"body":151,"breadcrumbs":7,"title":3},"7":{"body":25,"breadcrumbs":4,"title":2},"70":{"body":69,"breadcrumbs":10,"title":5},"700":{"body":127,"breadcrumbs":7,"title":3},"701":{"body":105,"breadcrumbs":8,"title":4},"702":{"body":44,"breadcrumbs":6,"title":2},"703":{"body":61,"breadcrumbs":5,"title":1},"704":{"body":3,"breadcrumbs":8,"title":3},"705":{"body":152,"breadcrumbs":6,"title":2},"706":{"body":62,"breadcrumbs":7,"title":3},"707":{"body":28,"breadcrumbs":7,"title":3},"708":{"body":100,"breadcrumbs":5,"title":1},"709":{"body":152,"breadcrumbs":9,"title":5},"71":{"body":8,"breadcrumbs":7,"title":2},"710":{"body":125,"breadcrumbs":6,"title":2},"711":{"body":83,"breadcrumbs":6,"title":2},"712":{"body":39,"breadcrumbs":6,"title":2},"713":{"body":203,"breadcrumbs":9,"title":2},"714":{"body":58,"breadcrumbs":7,"title":2},"715":{"body":515,"breadcrumbs":6,"title":1},"716":{"body":66,"breadcrumbs":8,"title":4},"717":{"body":24,"breadcrumbs":6,"title":2},"718":{"body":545,"breadcrumbs":7,"title":3},"719":{"body":133,"breadcrumbs":7,"title":3},"72":{"body":42,"breadcrumbs":8,"title":3},"720":{"body":113,"breadcrumbs":6,"title":2},"721":{"body":65,"breadcrumbs":7,"title":3},"722":{"body":145,"breadcrumbs":5,"title":1},"723":{"body":6,"breadcrumbs":6,"title":2},"724":{"body":123,"breadcrumbs":8,"title":2},"725":{"body":123,"breadcrumbs":8,"title":2},"726":{"body":95,"breadcrumbs":10,"title":4},"727":{"body":59,"breadcrumbs":8,"title":2},"728":{"body":15,"breadcrumbs":9,"title":3},"729":{"body":26,"breadcrumbs":7,"title":1},"73":{"body":98,"breadcrumbs":6,"title":1},"730":{"body":19,"breadcrumbs":8,"title":2},"731":{"body":25,"breadcrumbs":8,"title":2},"732":{"body":109,"breadcrumbs":9,"title":2},"733":{"body":20,"breadcrumbs":8,"title":1},"734":{"body":152,"breadcrumbs":12,"title":3},"735":{"body":167,"breadcrumbs":12,"title":3},"736":{"body":86,"breadcrumbs":10,"title":1},"737":{"body":154,"breadcrumbs":10,"title":1},"738":{"body":74,"breadcrumbs":10,"title":1},"739":{"body":13,"breadcrumbs":4,"title":2},"74":{"body":67,"breadcrumbs":8,"title":3},"740":{"body":205,"breadcrumbs":3,"title":1},"741":{"body":38,"breadcrumbs":3,"title":1},"742":{"body":38,"breadcrumbs":3,"title":1},"743":{"body":34,"breadcrumbs":4,"title":2},"744":{"body":22,"breadcrumbs":3,"title":1},"745":{"body":33,"breadcrumbs":3,"title":1},"746":{"body":138,"breadcrumbs":3,"title":1},"747":{"body":86,"breadcrumbs":6,"title":4},"748":{"body":20,"breadcrumbs":3,"title":1},"749":{"body":26,"breadcrumbs":6,"title":3},"75":{"body":32,"breadcrumbs":9,"title":4},"750":{"body":95,"breadcrumbs":4,"title":1},"751":{"body":0,"breadcrumbs":4,"title":2},"752":{"body":55,"breadcrumbs":3,"title":1},"753":{"body":99,"breadcrumbs":3,"title":1},"754":{"body":0,"breadcrumbs":10,"title":4},"755":{"body":0,"breadcrumbs":7,"title":1},"756":{"body":8,"breadcrumbs":7,"title":1},"757":{"body":66,"breadcrumbs":11,"title":5},"758":{"body":53,"breadcrumbs":11,"title":5},"759":{"body":11,"breadcrumbs":8,"title":2},"76":{"body":45,"breadcrumbs":9,"title":3},"760":{"body":8,"breadcrumbs":10,"title":5},"761":{"body":205,"breadcrumbs":8,"title":3},"762":{"body":7,"breadcrumbs":10,"title":5},"763":{"body":191,"breadcrumbs":7,"title":2},"764":{"body":79,"breadcrumbs":4,"title":2},"765":{"body":220,"breadcrumbs":4,"title":2},"766":{"body":87,"breadcrumbs":5,"title":3},"767":{"body":112,"breadcrumbs":6,"title":4},"768":{"body":151,"breadcrumbs":6,"title":4},"769":{"body":109,"breadcrumbs":4,"title":2},"77":{"body":63,"breadcrumbs":9,"title":3},"770":{"body":297,"breadcrumbs":4,"title":2},"771":{"body":0,"breadcrumbs":5,"title":3},"772":{"body":121,"breadcrumbs":5,"title":3},"773":{"body":33,"breadcrumbs":3,"title":1},"774":{"body":195,"breadcrumbs":4,"title":2},"775":{"body":233,"breadcrumbs":3,"title":1},"776":{"body":56,"breadcrumbs":5,"title":3},"777":{"body":6,"breadcrumbs":3,"title":1},"778":{"body":193,"breadcrumbs":4,"title":2},"779":{"body":66,"breadcrumbs":5,"title":3},"78":{"body":103,"breadcrumbs":10,"title":4},"780":{"body":237,"breadcrumbs":4,"title":2},"781":{"body":37,"breadcrumbs":5,"title":3},"782":{"body":24,"breadcrumbs":5,"title":3},"783":{"body":189,"breadcrumbs":5,"title":3},"784":{"body":29,"breadcrumbs":5,"title":3},"785":{"body":73,"breadcrumbs":4,"title":2},"786":{"body":101,"breadcrumbs":5,"title":3},"787":{"body":344,"breadcrumbs":5,"title":3},"788":{"body":134,"breadcrumbs":3,"title":1},"789":{"body":231,"breadcrumbs":3,"title":1},"79":{"body":30,"breadcrumbs":9,"title":3},"790":{"body":78,"breadcrumbs":3,"title":1},"791":{"body":44,"breadcrumbs":8,"title":3},"792":{"body":388,"breadcrumbs":7,"title":2},"793":{"body":240,"breadcrumbs":6,"title":1},"794":{"body":304,"breadcrumbs":6,"title":1},"795":{"body":210,"breadcrumbs":6,"title":1},"796":{"body":90,"breadcrumbs":4,"title":1},"797":{"body":69,"breadcrumbs":6,"title":3},"798":{"body":171,"breadcrumbs":4,"title":1},"799":{"body":39,"breadcrumbs":6,"title":3},"8":{"body":16,"breadcrumbs":4,"title":2},"80":{"body":136,"breadcrumbs":9,"title":3},"800":{"body":43,"breadcrumbs":7,"title":4},"801":{"body":46,"breadcrumbs":8,"title":5},"802":{"body":9,"breadcrumbs":4,"title":1},"803":{"body":105,"breadcrumbs":4,"title":1},"804":{"body":60,"breadcrumbs":4,"title":1},"805":{"body":173,"breadcrumbs":4,"title":1},"806":{"body":27,"breadcrumbs":4,"title":1},"807":{"body":106,"breadcrumbs":7,"title":4},"808":{"body":0,"breadcrumbs":4,"title":1},"809":{"body":194,"breadcrumbs":6,"title":3},"81":{"body":113,"breadcrumbs":8,"title":2},"810":{"body":46,"breadcrumbs":9,"title":6},"811":{"body":35,"breadcrumbs":6,"title":2},"812":{"body":87,"breadcrumbs":6,"title":2},"813":{"body":141,"breadcrumbs":7,"title":3},"814":{"body":12,"breadcrumbs":8,"title":4},"815":{"body":36,"breadcrumbs":6,"title":2},"816":{"body":61,"breadcrumbs":7,"title":3},"817":{"body":99,"breadcrumbs":7,"title":3},"818":{"body":79,"breadcrumbs":6,"title":2},"819":{"body":44,"breadcrumbs":7,"title":3},"82":{"body":35,"breadcrumbs":8,"title":2},"820":{"body":25,"breadcrumbs":7,"title":3},"821":{"body":26,"breadcrumbs":8,"title":4},"822":{"body":22,"breadcrumbs":6,"title":2},"823":{"body":22,"breadcrumbs":6,"title":2},"824":{"body":27,"breadcrumbs":6,"title":2},"825":{"body":116,"breadcrumbs":4,"title":1},"826":{"body":64,"breadcrumbs":2,"title":1},"827":{"body":36,"breadcrumbs":6,"title":3},"828":{"body":109,"breadcrumbs":4,"title":1},"829":{"body":350,"breadcrumbs":9,"title":3},"83":{"body":26,"breadcrumbs":14,"title":8},"830":{"body":283,"breadcrumbs":8,"title":4},"831":{"body":99,"breadcrumbs":8,"title":2},"832":{"body":133,"breadcrumbs":9,"title":3},"833":{"body":142,"breadcrumbs":8,"title":2},"834":{"body":396,"breadcrumbs":9,"title":3},"835":{"body":143,"breadcrumbs":8,"title":2},"836":{"body":61,"breadcrumbs":10,"title":5},"837":{"body":303,"breadcrumbs":10,"title":5},"838":{"body":0,"breadcrumbs":11,"title":6},"839":{"body":328,"breadcrumbs":11,"title":6},"84":{"body":44,"breadcrumbs":8,"title":3},"840":{"body":459,"breadcrumbs":10,"title":5},"841":{"body":121,"breadcrumbs":10,"title":5},"842":{"body":0,"breadcrumbs":9,"title":4},"843":{"body":27,"breadcrumbs":7,"title":2},"844":{"body":222,"breadcrumbs":7,"title":2},"845":{"body":106,"breadcrumbs":8,"title":3},"846":{"body":38,"breadcrumbs":8,"title":4},"847":{"body":30,"breadcrumbs":5,"title":1},"848":{"body":494,"breadcrumbs":7,"title":3},"849":{"body":73,"breadcrumbs":6,"title":2},"85":{"body":54,"breadcrumbs":8,"title":3},"850":{"body":54,"breadcrumbs":7,"title":3},"851":{"body":238,"breadcrumbs":6,"title":2},"852":{"body":166,"breadcrumbs":6,"title":2},"853":{"body":34,"breadcrumbs":6,"title":2},"854":{"body":153,"breadcrumbs":6,"title":2},"855":{"body":79,"breadcrumbs":8,"title":4},"856":{"body":11,"breadcrumbs":10,"title":3},"857":{"body":77,"breadcrumbs":9,"title":2},"858":{"body":57,"breadcrumbs":9,"title":2},"859":{"body":88,"breadcrumbs":11,"title":4},"86":{"body":28,"breadcrumbs":7,"title":2},"860":{"body":167,"breadcrumbs":9,"title":2},"861":{"body":94,"breadcrumbs":8,"title":2},"862":{"body":220,"breadcrumbs":8,"title":2},"863":{"body":93,"breadcrumbs":8,"title":2},"864":{"body":346,"breadcrumbs":4,"title":2},"865":{"body":59,"breadcrumbs":4,"title":2},"866":{"body":88,"breadcrumbs":3,"title":1},"867":{"body":162,"breadcrumbs":6,"title":4},"868":{"body":159,"breadcrumbs":4,"title":2},"869":{"body":10,"breadcrumbs":4,"title":2},"87":{"body":28,"breadcrumbs":7,"title":2},"870":{"body":84,"breadcrumbs":4,"title":2},"871":{"body":0,"breadcrumbs":3,"title":1},"872":{"body":91,"breadcrumbs":6,"title":4},"873":{"body":154,"breadcrumbs":5,"title":3},"874":{"body":81,"breadcrumbs":3,"title":1},"875":{"body":286,"breadcrumbs":5,"title":3},"876":{"body":34,"breadcrumbs":5,"title":3},"877":{"body":11,"breadcrumbs":8,"title":6},"878":{"body":29,"breadcrumbs":4,"title":2},"879":{"body":74,"breadcrumbs":4,"title":2},"88":{"body":54,"breadcrumbs":7,"title":2},"880":{"body":37,"breadcrumbs":5,"title":3},"881":{"body":25,"breadcrumbs":5,"title":3},"882":{"body":71,"breadcrumbs":9,"title":7},"883":{"body":266,"breadcrumbs":6,"title":4},"884":{"body":15,"breadcrumbs":4,"title":2},"885":{"body":63,"breadcrumbs":4,"title":2},"886":{"body":0,"breadcrumbs":4,"title":2},"887":{"body":201,"breadcrumbs":3,"title":1},"888":{"body":209,"breadcrumbs":4,"title":2},"889":{"body":358,"breadcrumbs":4,"title":2},"89":{"body":230,"breadcrumbs":8,"title":3},"890":{"body":45,"breadcrumbs":4,"title":2},"891":{"body":74,"breadcrumbs":4,"title":2},"892":{"body":32,"breadcrumbs":4,"title":2},"893":{"body":36,"breadcrumbs":5,"title":3},"894":{"body":142,"breadcrumbs":4,"title":2},"895":{"body":109,"breadcrumbs":5,"title":3},"896":{"body":46,"breadcrumbs":4,"title":2},"897":{"body":73,"breadcrumbs":3,"title":1},"898":{"body":94,"breadcrumbs":4,"title":2},"899":{"body":68,"breadcrumbs":4,"title":2},"9":{"body":61,"breadcrumbs":7,"title":5},"90":{"body":55,"breadcrumbs":4,"title":2},"900":{"body":115,"breadcrumbs":5,"title":3},"901":{"body":35,"breadcrumbs":5,"title":3},"902":{"body":43,"breadcrumbs":6,"title":4},"903":{"body":130,"breadcrumbs":4,"title":2},"904":{"body":81,"breadcrumbs":3,"title":1},"905":{"body":119,"breadcrumbs":3,"title":1},"906":{"body":319,"breadcrumbs":4,"title":2},"907":{"body":72,"breadcrumbs":3,"title":1},"908":{"body":74,"breadcrumbs":5,"title":3},"909":{"body":25,"breadcrumbs":10,"title":4},"91":{"body":13,"breadcrumbs":4,"title":2},"910":{"body":241,"breadcrumbs":10,"title":4},"911":{"body":130,"breadcrumbs":10,"title":4},"912":{"body":36,"breadcrumbs":8,"title":4},"913":{"body":110,"breadcrumbs":5,"title":1},"914":{"body":88,"breadcrumbs":9,"title":5},"915":{"body":38,"breadcrumbs":6,"title":2},"916":{"body":75,"breadcrumbs":7,"title":3},"917":{"body":12,"breadcrumbs":7,"title":3},"918":{"body":73,"breadcrumbs":9,"title":5},"919":{"body":68,"breadcrumbs":8,"title":4},"92":{"body":42,"breadcrumbs":3,"title":1},"920":{"body":177,"breadcrumbs":4,"title":1},"921":{"body":23,"breadcrumbs":5,"title":2},"922":{"body":110,"breadcrumbs":10,"title":4},"923":{"body":36,"breadcrumbs":8,"title":2},"924":{"body":57,"breadcrumbs":10,"title":2},"925":{"body":192,"breadcrumbs":11,"title":3},"926":{"body":139,"breadcrumbs":12,"title":4},"927":{"body":183,"breadcrumbs":15,"title":7},"928":{"body":8,"breadcrumbs":9,"title":1},"929":{"body":53,"breadcrumbs":10,"title":2},"93":{"body":124,"breadcrumbs":4,"title":2},"930":{"body":89,"breadcrumbs":12,"title":4},"931":{"body":421,"breadcrumbs":10,"title":2},"932":{"body":176,"breadcrumbs":10,"title":2},"933":{"body":10,"breadcrumbs":10,"title":2},"934":{"body":54,"breadcrumbs":10,"title":2},"935":{"body":165,"breadcrumbs":12,"title":4},"936":{"body":153,"breadcrumbs":11,"title":3},"937":{"body":339,"breadcrumbs":9,"title":1},"938":{"body":163,"breadcrumbs":8,"title":1},"939":{"body":110,"breadcrumbs":9,"title":2},"94":{"body":23,"breadcrumbs":3,"title":1},"940":{"body":157,"breadcrumbs":9,"title":2},"941":{"body":153,"breadcrumbs":10,"title":3},"942":{"body":137,"breadcrumbs":11,"title":4},"943":{"body":18,"breadcrumbs":9,"title":3},"944":{"body":161,"breadcrumbs":8,"title":2},"945":{"body":68,"breadcrumbs":12,"title":3},"946":{"body":16,"breadcrumbs":12,"title":3},"947":{"body":36,"breadcrumbs":16,"title":7},"948":{"body":36,"breadcrumbs":15,"title":6},"949":{"body":57,"breadcrumbs":13,"title":4},"95":{"body":46,"breadcrumbs":3,"title":1},"950":{"body":57,"breadcrumbs":18,"title":9},"951":{"body":34,"breadcrumbs":14,"title":5},"952":{"body":46,"breadcrumbs":16,"title":7},"953":{"body":88,"breadcrumbs":12,"title":3},"954":{"body":58,"breadcrumbs":14,"title":5},"955":{"body":22,"breadcrumbs":16,"title":7},"956":{"body":17,"breadcrumbs":14,"title":5},"957":{"body":12,"breadcrumbs":8,"title":1},"958":{"body":71,"breadcrumbs":9,"title":2},"959":{"body":0,"breadcrumbs":11,"title":4},"96":{"body":28,"breadcrumbs":5,"title":3},"960":{"body":45,"breadcrumbs":8,"title":1},"961":{"body":59,"breadcrumbs":9,"title":2},"962":{"body":18,"breadcrumbs":10,"title":3},"963":{"body":34,"breadcrumbs":9,"title":2},"964":{"body":28,"breadcrumbs":9,"title":2},"965":{"body":53,"breadcrumbs":8,"title":1},"966":{"body":16,"breadcrumbs":10,"title":3},"967":{"body":42,"breadcrumbs":9,"title":2},"968":{"body":55,"breadcrumbs":12,"title":5},"969":{"body":29,"breadcrumbs":10,"title":3},"97":{"body":14,"breadcrumbs":5,"title":3},"970":{"body":35,"breadcrumbs":10,"title":3},"971":{"body":33,"breadcrumbs":8,"title":1},"972":{"body":71,"breadcrumbs":10,"title":3},"973":{"body":12,"breadcrumbs":8,"title":1},"974":{"body":90,"breadcrumbs":9,"title":2},"975":{"body":20,"breadcrumbs":9,"title":2},"976":{"body":139,"breadcrumbs":9,"title":2},"977":{"body":23,"breadcrumbs":9,"title":2},"978":{"body":48,"breadcrumbs":13,"title":6},"979":{"body":29,"breadcrumbs":10,"title":3},"98":{"body":16,"breadcrumbs":4,"title":2},"980":{"body":85,"breadcrumbs":11,"title":4},"981":{"body":323,"breadcrumbs":12,"title":5},"982":{"body":12,"breadcrumbs":11,"title":4},"983":{"body":46,"breadcrumbs":9,"title":2},"984":{"body":99,"breadcrumbs":9,"title":2},"985":{"body":118,"breadcrumbs":9,"title":2},"986":{"body":104,"breadcrumbs":10,"title":3},"987":{"body":35,"breadcrumbs":9,"title":2},"988":{"body":54,"breadcrumbs":10,"title":2},"989":{"body":98,"breadcrumbs":11,"title":3},"99":{"body":78,"breadcrumbs":4,"title":2},"990":{"body":42,"breadcrumbs":10,"title":2},"991":{"body":15,"breadcrumbs":12,"title":4},"992":{"body":77,"breadcrumbs":11,"title":3},"993":{"body":186,"breadcrumbs":10,"title":2},"994":{"body":45,"breadcrumbs":13,"title":5},"995":{"body":35,"breadcrumbs":12,"title":4},"996":{"body":29,"breadcrumbs":14,"title":6},"997":{"body":10,"breadcrumbs":10,"title":2},"998":{"body":54,"breadcrumbs":12,"title":4},"999":{"body":31,"breadcrumbs":12,"title":3}},"docs":{"0":{"body":"Thank you for your interest in contributing to Rust! There are many ways to contribute, and we appreciate all of them. Asking Questions Experts Etiquette What should I work on? Easy or mentored issues Recurring work Clippy issues Diagnostic issues Picking up abandoned pull requests Writing tests Contributing to std (standard library) Contributing code to other Rust projects Other ways to contribute Cloning and Building Contributor Procedures Other Resources If this is your first time contributing, the walkthrough chapter can give you a good example of how a typical contribution would go. This documentation is not intended to be comprehensive; it is meant to be a quick guide for the most useful things. For more information, see this chapter on how to build and run the compiler .","breadcrumbs":"Getting Started » Getting Started","id":"0","title":"Getting Started"},"1":{"body":"If you have questions, please make a post on the Rust Zulip server or internals.rust-lang.org . If you are contributing to Rustup, be aware they are not on Zulip - you can ask questions in #wg-rustup on Discord . See the list of teams and working groups and the Community page on the official website for more resources. As a reminder, all contributors are expected to follow our Code of Conduct . The compiler team (or t-compiler) usually hangs out in Zulip in this \"stream\" ; it will be easiest to get questions answered there. Please ask questions! A lot of people report feeling that they are \"wasting expert time\", but nobody on t-compiler feels this way. Contributors are important to us. Also, if you feel comfortable, prefer public topics, as this means others can see the questions and answers, and perhaps even integrate them back into this guide :)","breadcrumbs":"Getting Started » Asking Questions","id":"1","title":"Asking Questions"},"10":{"body":"Issues that have been resolved but do not have a regression test are marked with the E-needs-test label. Writing unit tests is a low-risk, lower-priority task that offers new contributors a great opportunity to familiarize themselves with the testing infrastructure and contribution workflow.","breadcrumbs":"Getting Started » Writing tests","id":"10","title":"Writing tests"},"100":{"body":"Rust tests integration with real-world code to catch regressions and make informed decisions about the evolution of the language. There are several kinds of ecosystem tests, including Crater. See the Ecosystem testing chapter for more details.","breadcrumbs":"Testing the compiler » Ecosystem testing","id":"100","title":"Ecosystem testing"},"1000":{"body":"The new solver uses canonicalization when evaluating nested goals. In case there are possibly multiple candidates, each candidate is eagerly canonicalized. We then attempt to merge their canonical responses. This differs from the old implementation which does not use canonicalization inside of the trait system. This has a some major impacts on the design of both solvers. Without using canonicalization to stash the constraints of candidates, candidate selection has to discard the constraints of each candidate, only applying the constraints by reevaluating the candidate after it has been selected: source . Without canonicalization it is also not possible to cache the inference constraints from evaluating a goal. This causes the old implementation to have two systems: evaluate and fulfill . Evaluation is cached, does not apply inference constraints and is used when selecting candidates. Fulfillment applies inference and region constraints is not cached and applies inference constraints. By using canonicalization, the new implementation is able to merge evaluation and fulfillment , avoiding complexity and subtle differences in behavior. It greatly simplifies caching and prevents accidentally relying on untracked information. It allows us to avoid reevaluating candidates after selection and enables us to merge the responses of multiple candidates. However, canonicalizing goals during evaluation forces the new implementation to use a fixpoint algorithm when encountering cycles during trait solving: source .","breadcrumbs":"Trait solving » Next-gen trait solving » Significant changes and quirks » Canonicalization","id":"1000","title":"Canonicalization"},"1001":{"body":"The new implementation emits AliasRelate goals when relating aliases while the old implementation structurally relates the aliases instead. This enables the new solver to stall equality until it is able to normalize the related aliases. The behavior of the old solver is incomplete and relies on eager normalization which replaces ambiguous aliases with inference variables. As this is not possible for aliases containing bound variables, the old implementation does not handle aliases inside of binders correctly, e.g. #102048 . See the chapter on normalization for more details.","breadcrumbs":"Trait solving » Next-gen trait solving » Significant changes and quirks » Deferred alias equality","id":"1001","title":"Deferred alias equality"},"1002":{"body":"The new implementation eagerly handles nested goals instead of returning them to the caller. The old implementation does both. In evaluation nested goals are eagerly handled , while fulfillment simply returns them for later processing . As the new implementation has to be able to eagerly handle nested goals for candidate selection, always doing so reduces complexity. It may also enable us to merge more candidates in the future.","breadcrumbs":"Trait solving » Next-gen trait solving » Significant changes and quirks » Eagerly evaluating nested goals","id":"1002","title":"Eagerly evaluating nested goals"},"1003":{"body":"The new implementation always evaluates goals in a loop until reaching a fixpoint. The old implementation only does so in fulfillment , but not in evaluation . Always doing so strengthens inference and is reduces the order dependence of the trait solver. See trait-system-refactor-initiative#102 .","breadcrumbs":"Trait solving » Next-gen trait solving » Significant changes and quirks » Nested goals are evaluated until reaching a fixpoint","id":"1003","title":"Nested goals are evaluated until reaching a fixpoint"},"1004":{"body":"The new implementation does not track diagnostics information directly, instead providing proof trees which are used to lazily compute the relevant information. This is not yet fully fleshed out and somewhat hacky. The goal is to avoid tracking this information in the happy path to improve performance and to avoid accidentally relying on diagnostics data for behavior.","breadcrumbs":"Trait solving » Next-gen trait solving » Significant changes and quirks » Proof trees and providing diagnostics information","id":"1004","title":"Proof trees and providing diagnostics information"},"1005":{"body":"","breadcrumbs":"Trait solving » Next-gen trait solving » Significant changes and quirks » Major quirks of the new implementation","id":"1005","title":"Major quirks of the new implementation"},"1006":{"body":"If there is at least one ParamEnv or AliasBound candidate to prove some Trait goal, we discard all impl candidates for both Trait and Projection goals: source . This prevents users from using an impl which is entirely covered by a where-bound, matching the behavior of the old implementation and avoiding some weird errors, e.g. trait-system-refactor-initiative#76 .","breadcrumbs":"Trait solving » Next-gen trait solving » Significant changes and quirks » Hiding impls if there are any env candidates","id":"1006","title":"Hiding impls if there are any env candidates"},"1007":{"body":"See the normalization chapter. We replace the expected term with an unconstrained inference variable before computing NormalizesTo goals to prevent it from affecting normalization. This means that NormalizesTo goals are handled somewhat differently from all other goal kinds and need some additional solver support. Most notably, their ambiguous nested goals are returned to the caller which then evaluates them. See #122687 for more details.","breadcrumbs":"Trait solving » Next-gen trait solving » Significant changes and quirks » NormalizesTo goals are a function","id":"1007","title":"NormalizesTo goals are a function"},"1008":{"body":"CoerceUnsized is primarily concerned with data containers. When a struct (typically, a smart pointer) implements CoerceUnsized, that means that the data it points to is being unsized. Some implementors of CoerceUnsized include: &T Arc Box This trait is (eventually) intended to be implemented by user-written smart pointers, and there are rules about when a type is allowed to implement CoerceUnsized that are explained in the trait's documentation.","breadcrumbs":"Trait solving » Unsize and CoerceUnsized traits » CoerceUnsized","id":"1008","title":"CoerceUnsized"},"1009":{"body":"To contrast, the Unsize trait is concerned the actual types that are allowed to be unsized. This is not intended to be implemented by users ever, since Unsize does not instruct the compiler (namely codegen) how to unsize a type, just whether it is allowed to be unsized. This is paired somewhat intimately with codegen which must understand how types are represented and unsized.","breadcrumbs":"Trait solving » Unsize and CoerceUnsized traits » Unsize","id":"1009","title":"Unsize"},"101":{"body":"A separate infrastructure is used for testing and tracking performance of the compiler. See the Performance testing chapter for more details.","breadcrumbs":"Testing the compiler » Performance testing","id":"101","title":"Performance testing"},"1010":{"body":"Built-in implementations are provided for: T -> dyn Trait + 'a when T: Trait (and T: Sized + 'a, and Trait is dyn-compatible [1] ). [T; N] -> [T]","breadcrumbs":"Trait solving » Unsize and CoerceUnsized traits » Primitive unsizing implementations","id":"1010","title":"Primitive unsizing implementations"},"1011":{"body":"There is one implementation of Unsize which can be thought of as structural: Struct<.., Pi, .., Pj, ..>: Unsize> given TailField: Unsize, which allows the tail field of a struct to be unsized if it is the only field that mentions generic parameters Pi, .., Pj (which don't need to be contiguous). The rules for struct unsizing are slightly complicated, since they may allow more than one parameter to be changed (not necessarily unsized) and are best stated in terms of the tail field of the struct. (Tuple unsizing was previously implemented behind the feature gate unsized_tuple_coercion, but the implementation was removed by #137728 .)","breadcrumbs":"Trait solving » Unsize and CoerceUnsized traits » Structural implementations","id":"1011","title":"Structural implementations"},"1012":{"body":"Two things are called \"upcasting\" internally: True upcasting dyn SubTrait -> dyn SuperTrait (this also allows dropping auto traits and adjusting lifetimes, as below). Dropping auto traits and adjusting the lifetimes of dyn trait without changing the principal [2] : dyn Trait + AutoTraits... + 'a -> dyn Trait + NewAutoTraits... + 'b when AutoTraits ⊇ NewAutoTraits, and 'a: 'b. These may seem like different operations, since (1.) includes adjusting the vtable of a dyn trait, while (2.) is a no-op. However, to the type system, these are handled with much the same code. This built-in implementation of Unsize is the most involved, particularly after it was reworked to support the complexities of associated types. Specifically, the upcasting algorithm involves: For each supertrait of the source dyn trait's principal (including itself)... Unify the super trait ref with the principal of the target (making sure we only ever upcast to a true supertrait, and never via an impl ). For every auto trait in the target, check that it's present in the source (allowing us to drop auto traits, but never gain new ones). For every projection in the target, check that it unifies with a single projection in the source (since there may be more than one given trait Sub: Sup<.., A = i32> + Sup<.., A = u32>). Specifically, (3.) prevents a choice of projection bound to guide inference unnecessarily, though it may guide inference when it is unambiguous. The principal is the one non-auto trait of a dyn Trait. Formerly known as \"object safe\".","breadcrumbs":"Trait solving » Unsize and CoerceUnsized traits » Upcasting implementations","id":"1012","title":"Upcasting implementations"},"1013":{"body":"The hir_analysis crate contains the source for \"type collection\" as well as a bunch of related functionality. Checking the bodies of functions is implemented in the hir_typeck crate. These crates draw heavily on the type inference and trait solving .","breadcrumbs":"Type checking » Type checking","id":"1013","title":"Type checking"},"1014":{"body":"Type \"collection\" is the process of converting the types found in the HIR (hir::Ty), which represent the syntactic things that the user wrote, into the internal representation used by the compiler (Ty<'tcx>) – we also do similar conversions for where-clauses and other bits of the function signature. To try and get a sense of the difference, consider this function: struct Foo { }\nfn foo(x: Foo, y: self::Foo) { ... }\n// ^^^ ^^^^^^^^^ Those two parameters x and y each have the same type: but they will have distinct hir::Ty nodes. Those nodes will have different spans, and of course they encode the path somewhat differently. But once they are \"collected\" into Ty<'tcx> nodes, they will be represented by the exact same internal type. Collection is defined as a bundle of queries for computing information about the various functions, traits, and other items in the crate being compiled. Note that each of these queries is concerned with interprocedural things – for example, for a function definition, collection will figure out the type and signature of the function, but it will not visit the body of the function in any way, nor examine type annotations on local variables (that's the job of type checking ). For more details, see the collect module. TODO : actually talk about type checking... #1161","breadcrumbs":"Type checking » Type collection","id":"1014","title":"Type collection"},"1015":{"body":"Method lookup can be rather complex due to the interaction of a number of factors, such as self types, autoderef, trait lookup, etc. This file provides an overview of the process. More detailed notes are in the code itself, naturally. One way to think of method lookup is that we convert an expression of the form receiver.method(...) into a more explicit fully-qualified syntax (formerly called UFCS ): Trait::method(ADJ(receiver), ...) for a trait call ReceiverType::method(ADJ(receiver), ...) for an inherent method call Here ADJ is some kind of adjustment, which is typically a series of autoderefs and then possibly an autoref (e.g., &**receiver). However we sometimes do other adjustments and coercions along the way, in particular unsizing (e.g., converting from [T; n] to [T]). Method lookup is divided into two major phases: Probing ( probe.rs ). The probe phase is when we decide what method to call and how to adjust the receiver. Confirmation ( confirm.rs ). The confirmation phase \"applies\" this selection, updating the side-tables, unifying type variables, and otherwise doing side-effectful things. One reason for this division is to be more amenable to caching. The probe phase produces a \"pick\" (probe::Pick), which is designed to be cacheable across method-call sites. Therefore, it does not include inference variables or other information.","breadcrumbs":"Type checking » Method lookup » Method lookup","id":"1015","title":"Method lookup"},"1016":{"body":"","breadcrumbs":"Type checking » Method lookup » The Probe phase","id":"1016","title":"The Probe phase"},"1017":{"body":"The first thing that the probe phase does is to create a series of steps . This is done by progressively dereferencing the receiver type until it cannot be deref'd anymore, as well as applying an optional \"unsize\" step. So if the receiver has type Rc>, this might yield: Rc> Box<[T; 3]> [T; 3] [T]","breadcrumbs":"Type checking » Method lookup » Steps","id":"1017","title":"Steps"},"1018":{"body":"We then search along those steps to create a list of candidates . A Candidate is a method item that might plausibly be the method being invoked. For each candidate, we'll derive a \"transformed self type\" that takes into account explicit self. Candidates are grouped into two kinds, inherent and extension. Inherent candidates are those that are derived from the type of the receiver itself. So, if you have a receiver of some nominal type Foo (e.g., a struct), any methods defined within an impl like impl Foo are inherent methods. Nothing needs to be imported to use an inherent method, they are associated with the type itself (note that inherent impls can only be defined in the same crate as the type itself). Extension candidates are derived from imported traits. If I have the trait ToString imported, and I call to_string() as a method, then we will list the to_string() definition in each impl of ToString as a candidate. These kinds of method calls are called \"extension methods\". So, let's continue our example. Imagine that we were calling a method foo with the receiver Rc> and there is a trait Foo that defines it with &self for the type Rc as well as a method on the type Box that defines foo but with &mut self. Then we might have two candidates: &Rc as an extension candidate &mut Box as an inherent candidate","breadcrumbs":"Type checking » Method lookup » Candidate assembly","id":"1018","title":"Candidate assembly"},"1019":{"body":"Finally, to actually pick the method, we will search down the steps, trying to match the receiver type against the candidate types. At each step, we also consider an auto-ref and auto-mut-ref to see whether that makes any of the candidates match. For each resulting receiver type, we consider inherent candidates before extension candidates. If there are multiple matching candidates in a group, we report an error, except that multiple impls of the same trait are treated as a single match. Otherwise we pick the first match we find. In the case of our example, the first step is Rc>, which does not itself match any candidate. But when we autoref it, we get the type &Rc> which matches &Rc. We would then recursively consider all where-clauses that appear on the impl: if those match (or we cannot rule out that they do), then this is the method we would pick. Otherwise, we would continue down the series of steps.","breadcrumbs":"Type checking » Method lookup » Candidate search","id":"1019","title":"Candidate search"},"102":{"body":"See Codegen backend testing .","breadcrumbs":"Testing the compiler » Codegen backend testing","id":"102","title":"Codegen backend testing"},"1020":{"body":"The algorithm Constraints Dependency graph management Addendum: Variance on traits Variance and object types Trait variance and vtable resolution Variance and associated types For a more general background on variance, see the background appendix. During type checking we must infer the variance of type and lifetime parameters. The algorithm is taken from Section 4 of the paper \"Taming the Wildcards: Combining Definition- and Use-Site Variance\" published in PLDI'11 and written by Altidor et al., and hereafter referred to as The Paper. This inference is explicitly designed not to consider the uses of types within code. To determine the variance of type parameters defined on type X, we only consider the definition of the type X and the definitions of any types it references. We only infer variance for type parameters found on data types like structs and enums. In these cases, there is a fairly straightforward explanation for what variance means. The variance of the type or lifetime parameters defines whether T is a subtype of T (resp. T<'a> and T<'b>) based on the relationship of A and B (resp. 'a and 'b). We do not infer variance for type parameters found on traits, functions, or impls. Variance on trait parameters can indeed make sense (and we used to compute it) but it is actually rather subtle in meaning and not that useful in practice, so we removed it. See the addendum for some details. Variances on function/impl parameters, on the other hand, doesn't make sense because these parameters are instantiated and then forgotten, they don't persist in types or compiled byproducts. Notation We use the notation of The Paper throughout this chapter: + is covariance . - is contravariance . * is bivariance . o is invariance .","breadcrumbs":"Type checking » Variance » Variance of type and lifetime parameters","id":"1020","title":"Variance of type and lifetime parameters"},"1021":{"body":"The basic idea is quite straightforward. We iterate over the types defined and, for each use of a type parameter X, accumulate a constraint indicating that the variance of X must be valid for the variance of that use site. We then iteratively refine the variance of X until all constraints are met. There is always a solution, because at the limit we can declare all type parameters to be invariant and all constraints will be satisfied. As a simple example, consider: enum Option { Some(A), None }\nenum OptionalFn { Some(|B|), None }\nenum OptionalMap { Some(|C| -> C), None } Here, we will generate the constraints: 1. V(A) <= +\n2. V(B) <= -\n3. V(C) <= +\n4. V(C) <= - These indicate that (1) the variance of A must be at most covariant; (2) the variance of B must be at most contravariant; and (3, 4) the variance of C must be at most covariant and contravariant. All of these results are based on a variance lattice defined as follows: * Top (bivariant)\n- + o Bottom (invariant) Based on this lattice, the solution V(A)=+, V(B)=-, V(C)=o is the optimal solution. Note that there is always a naive solution which just declares all variables to be invariant. You may be wondering why fixed-point iteration is required. The reason is that the variance of a use site may itself be a function of the variance of other type parameters. In full generality, our constraints take the form: V(X) <= Term\nTerm := + | - | * | o | V(X) | Term x Term Here the notation V(X) indicates the variance of a type/region parameter X with respect to its defining class. Term x Term represents the \"variance transform\" as defined in the paper: If the variance of a type variable X in type expression E is V2 and the definition-site variance of the corresponding type parameter of a class C is V1, then the variance of X in the type expression C is V3 = V1.xform(V2).","breadcrumbs":"Type checking » Variance » The algorithm","id":"1021","title":"The algorithm"},"1022":{"body":"If I have a struct or enum with where clauses: struct Foo { ... } you might wonder whether the variance of T with respect to Bar affects the variance T with respect to Foo. I claim no. The reason: assume that T is invariant with respect to Bar but covariant with respect to Foo. And then we have a Foo that is upcast to Foo, where X <: Y. However, while X : Bar, Y : Bar does not hold. In that case, the upcast will be illegal, but not because of a variance failure, but rather because the target type Foo is itself just not well-formed. Basically we get to assume well-formedness of all types involved before considering variance.","breadcrumbs":"Type checking » Variance » Constraints","id":"1022","title":"Constraints"},"1023":{"body":"Because variance is a whole-crate inference, its dependency graph can become quite muddled if we are not careful. To resolve this, we refactor into two queries: crate_variances computes the variance for all items in the current crate. variances_of accesses the variance for an individual reading; it works by requesting crate_variances and extracting the relevant data. If you limit yourself to reading variances_of, your code will only depend then on the inference of that particular item. Ultimately, this setup relies on the red-green algorithm . In particular, every variance query effectively depends on all type definitions in the entire crate (through crate_variances), but since most changes will not result in a change to the actual results from variance inference, the variances_of query will wind up being considered green after it is re-evaluated.","breadcrumbs":"Type checking » Variance » Dependency graph management","id":"1023","title":"Dependency graph management"},"1024":{"body":"As mentioned above, we used to permit variance on traits. This was computed based on the appearance of trait type parameters in method signatures and was used to represent the compatibility of vtables in trait objects (and also \"virtual\" vtables or dictionary in trait bounds). One complication was that variance for associated types is less obvious, since they can be projected out and put to myriad uses, so it's not clear when it is safe to allow X::Bar to vary (or indeed just what that means). Moreover (as covered below) all inputs on any trait with an associated type had to be invariant, limiting the applicability. Finally, the annotations (MarkerTrait, PhantomFn) needed to ensure that all trait type parameters had a variance were confusing and annoying for little benefit. Just for historical reference, I am going to preserve some text indicating how one could interpret variance and trait matching.","breadcrumbs":"Type checking » Variance » Addendum: Variance on traits","id":"1024","title":"Addendum: Variance on traits"},"1025":{"body":"Just as with structs and enums, we can decide the subtyping relationship between two object types &Trait and &Trait based on the relationship of A and B. Note that for object types we ignore the Self type parameter – it is unknown, and the nature of dynamic dispatch ensures that we will always call a function that is expected the appropriate Self type. However, we must be careful with the other type parameters, or else we could end up calling a function that is expecting one type but provided another. To see what I mean, consider a trait like so: trait ConvertTo { fn convertTo(&self) -> A;\n} Intuitively, If we had one object O=&ConvertTo and another S=&ConvertTo, then S <: O because String <: Object (presuming Java-like \"string\" and \"object\" types, my go to examples for subtyping). The actual algorithm would be to compare the (explicit) type parameters pairwise respecting their variance: here, the type parameter A is covariant (it appears only in a return position), and hence we require that String <: Object. You'll note though that we did not consider the binding for the (implicit) Self type parameter: in fact, it is unknown, so that's good. The reason we can ignore that parameter is precisely because we don't need to know its value until a call occurs, and at that time (as you said) the dynamic nature of virtual dispatch means the code we run will be correct for whatever value Self happens to be bound to for the particular object whose method we called. Self is thus different from A, because the caller requires that A be known in order to know the return type of the method convertTo(). (As an aside, we have rules preventing methods where Self appears outside of the receiver position from being called via an object.)","breadcrumbs":"Type checking » Variance » Variance and object types","id":"1025","title":"Variance and object types"},"1026":{"body":"But traits aren't only used with objects. They're also used when deciding whether a given impl satisfies a given trait bound. To set the scene here, imagine I had a function: fn convertAll>(v: &[T]) { ... } Now imagine that I have an implementation of ConvertTo for Object: impl ConvertTo for Object { ... } And I want to call convertAll on an array of strings. Suppose further that for whatever reason I specifically supply the value of String for the type parameter T: let mut vector = vec![\"string\", ...];\nconvertAll::(vector); Is this legal? To put another way, can we apply the impl for Object to the type String? The answer is yes, but to see why we have to expand out what will happen: convertAll will create a pointer to one of the entries in the vector, which will have type &String It will then call the impl of convertTo() that is intended for use with objects. This has the type fn(self: &Object) -> i32. It is OK to provide a value for self of type &String because &String <: &Object. OK, so intuitively we want this to be legal, so let's bring this back to variance and see whether we are computing the correct result. We must first figure out how to phrase the question \"is an impl for Object,i32 usable where an impl for String,i32 is expected?\" Maybe it's helpful to think of a dictionary-passing implementation of type classes. In that case, convertAll() takes an implicit parameter representing the impl. In short, we have an impl of type: V_O = ConvertTo for Object and the function prototype expects an impl of type: V_S = ConvertTo for String As with any argument, this is legal if the type of the value given (V_O) is a subtype of the type expected (V_S). So is V_O <: V_S? The answer will depend on the variance of the various parameters. In this case, because the Self parameter is contravariant and A is covariant, it means that: V_O <: V_S iff i32 <: i32 String <: Object These conditions are satisfied and so we are happy.","breadcrumbs":"Type checking » Variance » Trait variance and vtable resolution","id":"1026","title":"Trait variance and vtable resolution"},"1027":{"body":"Traits with associated types – or at minimum projection expressions – must be invariant with respect to all of their inputs. To see why this makes sense, consider what subtyping for a trait reference means: <: means that if I know that T as Trait, I also know that U as Trait. Moreover, if you think of it as dictionary passing style, it means that a dictionary for is safe to use where a dictionary for is expected. The problem is that when you can project types out from , the relationship to types projected out of is completely unknown unless T==U (see #21726 for more details). Making Trait invariant ensures that this is true. Another related reason is that if we didn't make traits with associated types invariant, then projection is no longer a function with a single result. Consider: trait Identity { type Out; fn foo(&self); }\nimpl Identity for T { type Out = T; ... } Now if I have <&'static () as Identity>::Out, this can be validly derived as &'a () for any 'a: <&'a () as Identity> <: <&'static () as Identity>\nif &'static () < : &'a () -- Identity is contravariant in Self\nif 'static : 'a -- Subtyping rules for relations This change otoh means that <'static () as Identity>::Out is always &'static () (which might then be upcast to 'a (), separately). This was helpful in solving #21750.","breadcrumbs":"Type checking » Variance » Variance and associated types","id":"1027","title":"Variance and associated types"},"1028":{"body":"NOTE: this is based on notes by @lcnr Coherence checking is what detects both of trait impls and inherent impls overlapping with others. (reminder: inherent impls are impls of concrete types like impl MyStruct {}) Overlapping trait impls always produce an error, while overlapping inherent impls result in an error only if they have methods with the same name. Checking for overlaps is split in two parts. First there's the overlap check(s) , which finds overlaps between traits and inherent implementations that the compiler currently knows about. However, Coherence also results in an error if any other impls could exist, even if they are currently unknown. This affects impls which may get added to upstream crates in a backwards compatible way, and impls from downstream crates. This is called the Orphan check.","breadcrumbs":"Type checking » Coherence checking » Coherence","id":"1028","title":"Coherence"},"1029":{"body":"Overlap checks are performed for both inherent impls, and for trait impls. This uses the same overlap checking code, really done as two separate analyses. Overlap checks always consider pairs of implementations, comparing them to each other. Overlap checking for inherent impl blocks is done through fn check_item (in coherence/inherent_impls_overlap.rs), where you can very clearly see that (at least for small n), the check really performs n^2 comparisons between impls. In the case of traits, this check is currently done as part of building the specialization graph , to handle specializing impls overlapping with their parent, but this may change in the future. In both cases, all pairs of impls are checked for overlap. Overlapping is sometimes partially allowed: for marker traits under specialization but normally isn't. The overlap check has various modes (see OverlapMode ). Importantly, there's the explicit negative impl check, and the implicit negative impl check. Both try to prove that an overlap is definitely impossible.","breadcrumbs":"Type checking » Coherence checking » Overlap checks","id":"1029","title":"Overlap checks"},"103":{"body":"There are some other useful testing-related info at Misc info .","breadcrumbs":"Testing the compiler » Miscellaneous information","id":"103","title":"Miscellaneous information"},"1030":{"body":"This check is done in impl_intersection_has_negative_obligation . This check tries to find a negative trait implementation. For example: struct MyCustomErrorType; // both in your own crate\nimpl From<&str> for MyCustomErrorType {}\nimpl From for MyCustomErrorType where E: Error {} In this example, we'd get: MyCustomErrorType: From<&str> and MyCustomErrorType: From, giving ?E = &str. And thus, these two implementations would overlap. However, libstd provides &str: !Error, and therefore guarantees that there will never be a positive implementation of &str: Error, and thus there is no overlap. Note that for this kind of negative impl check, we must have explicit negative implementations provided. This is not currently stable.","breadcrumbs":"Type checking » Coherence checking » The explicit negative impl check","id":"1030","title":"The explicit negative impl check"},"1031":{"body":"This check is done in impl_intersection_has_impossible_obligation , and does not rely on negative trait implementations and is stable. Let's say there's a impl From for Box {} // in your own crate\nimpl From for Box where E: Error {} // in std This would give: Box: From, and Box: From, giving ?E = MyLocalType. In your crate there's no MyLocalType: Error, downstream crates cannot implement Error (a remote trait) for MyLocalType (a remote type). Therefore, these two impls do not overlap. Importantly, this works even if there isn't a impl !Error for MyLocalType.","breadcrumbs":"Type checking » Coherence checking » The implicit negative impl check","id":"1031","title":"The implicit negative impl check"},"1032":{"body":"Opaque types are syntax to declare an opaque type alias that only exposes a specific set of traits as their interface; the concrete type in the background is inferred from a certain set of use sites of the opaque type. This is expressed by using impl Trait within type aliases, for example: type Foo = impl Bar; This declares an opaque type named Foo, of which the only information is that it implements Bar. Therefore, any of Bar's interface can be used on a Foo, but nothing else (regardless of whether it implements any other traits). Since there needs to be a concrete background type, you can (as of January 2021) express that type by using the opaque type in a \"defining use site\". struct Struct;\nimpl Bar for Struct { /* stuff */ }\nfn foo() -> Foo { Struct\n} Any other \"defining use site\" needs to produce the exact same type.","breadcrumbs":"Type checking » Opaque types » Opaque types (type alias impl Trait)","id":"1032","title":"Opaque types (type alias impl Trait)"},"1033":{"body":"Currently only the return value of a function can be a defining use site of an opaque type (and only if the return type of that function contains the opaque type). The defining use of an opaque type can be any code within the parent of the opaque type definition. This includes any siblings of the opaque type and all children of the siblings. The initiative for \"not causing fatal brain damage to developers due to accidentally running infinite loops in their brain while trying to comprehend what the type system is doing\" has decided to disallow children of opaque types to be defining use sites.","breadcrumbs":"Type checking » Opaque types » Defining use site(s)","id":"1033","title":"Defining use site(s)"},"1034":{"body":"Associated opaque types can be defined by any other associated item on the same trait impl or a child of these associated items. For instance: trait Baz { type Foo; fn foo() -> Self::Foo;\n} struct Quux; impl Baz for Quux { type Foo = impl Bar; fn foo() -> Self::Foo { ... }\n}","breadcrumbs":"Type checking » Opaque types » Associated opaque types","id":"1034","title":"Associated opaque types"},"1035":{"body":"This page describes how the compiler infers the hidden type for an opaque type . This kind of type inference is particularly complex because, unlike other kinds of type inference, it can work across functions and function bodies.","breadcrumbs":"Type checking » Opaque types » Inference details » Inference of opaque types (impl Trait)","id":"1035","title":"Inference of opaque types (impl Trait)"},"1036":{"body":"To help explain how it works, let's consider an example. #![feature(type_alias_impl_trait)]\nmod m { pub type Seq = impl IntoIterator; #[define_opaque(Seq)] pub fn produce_singleton(t: T) -> Seq { vec![t] } #[define_opaque(Seq)] pub fn produce_doubleton(t: T, u: T) -> Seq { vec![t, u] }\n} fn is_send(_: &T) {} pub fn main() { let elems = m::produce_singleton(22); is_send(&elems); for elem in elems { println!(\"elem = {:?}\", elem); }\n} In this code, the opaque type is Seq. Its defining scope is the module m. Its hidden type is Vec, which is inferred from m::produce_singleton and m::produce_doubleton. In the main function, the opaque type is out of its defining scope. When main calls m::produce_singleton, it gets back a reference to the opaque type Seq. The is_send call checks that Seq: Send. Send is not listed amongst the bounds of the impl trait, but because of auto-trait leakage, we are able to infer that it holds. The for loop desugaring requires that Seq: IntoIterator, which is provable from the bounds declared on Seq.","breadcrumbs":"Type checking » Opaque types » Inference details » Running example","id":"1036","title":"Running example"},"1037":{"body":"Let's start by looking what happens when we type-check main. Initially we invoke produce_singleton and the return type is an opaque type OpaqueTy . Type-checking the for loop The for loop desugars the in elems part to IntoIterator::into_iter(elems). elems is of type Seq, so the type checker registers a Seq: IntoIterator obligation. This obligation is trivially satisfied, because Seq is an opaque type (impl IntoIterator) that has a bound for the trait. Similar to how a U: Foo where bound allows U to trivially satisfy Foo, opaque types' bounds are available to the type checker and are used to fulfill obligations. The type of elem in the for loop is inferred to be as IntoIterator>::Item, which is T. At no point is the type checker interested in the hidden type. Type-checking the is_send call When trying to prove auto trait bounds, we first repeat the process as above, to see if the auto trait is in the bound list of the opaque type. If that fails, we reveal the hidden type of the opaque type, but only to prove this specific trait bound, not in general. Revealing is done by invoking the type_of query on the DefId of the opaque type. The query will internally request the hidden types from the defining function(s) and return that (see the section on type_of for more details). Flowchart of type checking steps flowchart TD TypeChecking[\"type checking `main`\"] subgraph TypeOfSeq[\"type_of(Seq<T>) query\"] WalkModuleHir[\"Walk the HIR for the module `m`\\nto find the hidden types from each\\nfunction/const/static within\"] VisitProduceSingleton[\"visit `produce_singleton`\"] InterimType[\"`produce_singleton` hidden type is `Vec<T>`\\nkeep searching\"] VisitProduceDoubleton[\"visit `produce_doubleton`\"] CompareType[\"`produce_doubleton` hidden type is also Vec<T>\\nthis matches what we saw before ✅\"] Done[\"No more items to look at in scope\\nReturn `Vec<T>`\"] end BorrowCheckProduceSingleton[\"`borrow_check(produce_singleton)`\"] TypeCheckProduceSingleton[\"`type_check(produce_singleton)`\"] BorrowCheckProduceDoubleton[\"`borrow_check(produce_doubleton)`\"] TypeCheckProduceDoubleton[\"`type_check(produce_doubleton)`\"] Substitute[\"Substitute `T => u32`,\\nyielding `Vec<i32>` as the hidden type\"] CheckSend[\"Check that `Vec<i32>: Send` ✅\"] TypeChecking -- trait code for auto traits --> TypeOfSeq TypeOfSeq --> WalkModuleHir WalkModuleHir --> VisitProduceSingleton VisitProduceSingleton --> BorrowCheckProduceSingleton BorrowCheckProduceSingleton --> TypeCheckProduceSingleton TypeCheckProduceSingleton --> InterimType InterimType --> VisitProduceDoubleton VisitProduceDoubleton --> BorrowCheckProduceDoubleton BorrowCheckProduceDoubleton --> TypeCheckProduceDoubleton TypeCheckProduceDoubleton --> CompareType --> Done Done --> Substitute --> CheckSend","breadcrumbs":"Type checking » Opaque types » Inference details » Type-checking main","id":"1037","title":"Type-checking main"},"1038":{"body":"The type_of query, when applied to an opaque type O, returns the hidden type. That hidden type is computed by combining the results from each constraining function within the defining scope of O. flowchart TD TypeOf[\"type_of query\"] TypeOf -- find_opaque_ty_constraints --> FindOpaqueTyConstraints FindOpaqueTyConstraints --> Iterate Iterate[\"Iterate over each item in defining scope\"] Iterate -- For each item --> TypeCheck TypeCheck[\"Check typeck(I) to see if it constraints O\"] TypeCheck -- I does not\\nconstrain O --> Iterate TypeCheck -- I constrains O --> BorrowCheck BorrowCheck[\"Invoke mir_borrowck(I) to get hidden type\\nfor O computed by I\"] BorrowCheck --> PreviousType PreviousType[\"Hidden type from I\\nsame as any previous hidden type\\nfound so far?\"] PreviousType -- Yes --> Complete PreviousType -- No --> ReportError ReportError[\"Report an error\"] ReportError --> Complete[\"Item I complete\"] Complete --> Iterate FindOpaqueTyConstraints -- All constraints found --> Done Done[\"Done\"]","breadcrumbs":"Type checking » Opaque types » Inference details » Within the type_of query","id":"1038","title":"Within the type_of query"},"1039":{"body":"There is one central place where an opaque type gets its hidden type constrained, and that is the handle_opaque_type function. Amusingly it takes two types, so you can pass any two types, but one of them should be an opaque type. The order is only important for diagnostics. flowchart TD subgraph typecheck[\"type check comparison routines\"] equate.rs sub.rs lub.rs end typecheck --> TwoSimul subgraph handleopaquetype[\"infcx.handle_opaque_type\"] TwoSimul[\"Defining two opaque types simultaneously?\"] TwoSimul -- Yes --> ReportError[\"Report error\"] TwoSimul -- No --> MayDefine -- Yes --> RegisterOpaqueType --> AlreadyHasValue MayDefine -- No --> ReportError MayDefine[\"In defining scope OR in query?\"] AlreadyHasValue[\"Opaque type X already has\\na registered value?\"] AlreadyHasValue -- No --> Obligations[\"Register opaque type bounds\\nas obligations for hidden type\"] RegisterOpaqueType[\"Register opaque type with\\nother type as value\"] AlreadyHasValue -- Yes --> EquateOpaqueTypes[\"Equate new hidden type\\nwith old hidden type\"] end","breadcrumbs":"Type checking » Opaque types » Inference details » Relating an opaque type to another type","id":"1039","title":"Relating an opaque type to another type"},"104":{"body":"The following blog posts may also be of interest: brson's classic \"How Rust is tested\"","breadcrumbs":"Testing the compiler » Further reading","id":"104","title":"Further reading"},"1040":{"body":"When queries handle opaque types, they cannot figure out whether they are in a defining scope, so they just assume they are. The registered hidden types are stored into the QueryResponse struct in the opaque_types field (the function take_opaque_types_for_query_response reads them out). When the QueryResponse is instantiated into the surrounding infcx in query_response_substitution_guess, we convert each hidden type constraint by invoking handle_opaque_type (as above). There is one bit of \"weirdness\". The instantiated opaque types have an order (if one opaque type was compared with another, and we have to pick one opaque type to use as the one that gets its hidden type assigned). We use the one that is considered \"expected\". But really both of the opaque types may have defining uses. When the query result is instantiated, that will be re-evaluated from the context that is using the query. The final context (typeck of a function, mir borrowck or wf-checks) will know which opaque type can actually be instantiated and then handle it correctly.","breadcrumbs":"Type checking » Opaque types » Inference details » Interactions with queries","id":"1040","title":"Interactions with queries"},"1041":{"body":"The MIR borrow checker relates things via nll_relate and only cares about regions. Any type relation will trigger the binding of hidden types, so the borrow checker is doing the same thing as the type checker, but ignores obviously dead code (e.g. after a panic). The borrow checker is also the source of truth when it comes to hidden types, as it is the only one who can properly figure out what lifetimes on the hidden type correspond to which lifetimes on the opaque type declaration.","breadcrumbs":"Type checking » Opaque types » Inference details » Within the MIR borrow checker","id":"1041","title":"Within the MIR borrow checker"},"1042":{"body":"impl Trait in return position has various quirks that were not part of any RFCs and are likely accidental stabilization. To support these, the replace_opaque_types_with_inference_vars is being used to reintroduce the previous behaviour. There are three backwards compatibility hacks: All return sites share the same inference variable, so some return sites may only compile if another return site uses a concrete type. fn foo() -> impl Debug { if false { return std::iter::empty().collect(); } vec![42]\n} Associated type equality constraints for impl Trait can be used as long as the hidden type satisfies the trait bounds on the associated type. The opaque impl Trait signature does not need to satisfy them. trait Duh {} impl Duh for i32 {} trait Trait { type Assoc: Duh;\n} // the fact that `R` is the `::Output` projection on `F` causes\n// an intermediate inference var to be generated which is then later\n// compared against the actually found `Assoc` type.\nimpl R> Trait for F { type Assoc = R;\n} // The `impl Send` here is then later compared against the inference var\n// created, causing the inference var to be set to `impl Send` instead of\n// the hidden type. We already have obligations registered on the inference\n// var to make it uphold the `: Duh` bound on `Trait::Assoc`. The opaque\n// type does not implement `Duh`, even if its hidden type does.\n// Lazy TAIT would error out, but we inserted a hack to make it work again,\n// keeping backwards compatibility.\nfn foo() -> impl Trait { || 42\n} Closures cannot create hidden types for their parent function's impl Trait. This point is mostly moot, because of point 1 introducing inference vars, so the closure only ever sees the inference var, but should we fix 1, this will become a problem.","breadcrumbs":"Type checking » Opaque types » Inference details » Backwards compatibility hacks","id":"1042","title":"Backwards compatibility hacks"},"1043":{"body":"Return-position impl trait in trait (RPITIT) is conceptually (and as of #112988 , literally) sugar that turns RPITs in trait methods into generic associated types (GATs) without the user having to define that GAT either on the trait side or impl side. RPITIT was originally implemented in #101224 , which added support for async fn in trait (AFIT), since the implementation for RPITIT came for free as a part of implementing AFIT which had been RFC'd previously. It was then RFC'd independently in RFC 3425 , which was recently approved by T-lang.","breadcrumbs":"Type checking » Opaque types » Return Position Impl Trait In Trait » Return Position Impl Trait In Trait","id":"1043","title":"Return Position Impl Trait In Trait"},"1044":{"body":"This doc is ordered mostly via the compilation pipeline: AST lowering (AST -> HIR) HIR ty lowering (HIR -> rustc_middle::ty data types) typeck","breadcrumbs":"Type checking » Opaque types » Return Position Impl Trait In Trait » How does it work?","id":"1044","title":"How does it work?"},"1045":{"body":"AST lowering for RPITITs is almost the same as lowering RPITs. We still lower them as hir::ItemKind::OpaqueTy . The two differences are that: We record in_trait for the opaque. This will signify that the opaque is an RPITIT for HIR ty lowering, diagnostics that deal with HIR, etc. We record lifetime_mappings for the opaque type, described below. Aside: Opaque lifetime duplication All opaques (not just RPITITs) end up duplicating their captured lifetimes into new lifetime parameters local to the opaque. The main reason we do this is because RPITs need to be able to \"reify\" [1] any captured late-bound arguments, or make them into early-bound ones. This is so they can be used as generic args for the opaque, and later to instantiate hidden types. Since we don't know which lifetimes are early- or late-bound during AST lowering, we just do this for all lifetimes. This is compiler-errors terminology, I'm not claiming it's accurate :^) The main addition for RPITITs is that during lowering we track the relationship between the captured lifetimes and the corresponding duplicated lifetimes in an additional field, OpaqueTy::lifetime_mapping . We use this lifetime mapping later on in predicates_of to install bounds that enforce equality between these duplicated lifetimes and their source lifetimes in order to properly typecheck these GATs, which will be discussed below. Note It may be better if we were able to lower without duplicates and for that I think we would need to stop distinguishing between early and late bound lifetimes. So we would need a solution like Account for late-bound lifetimes in generics #103448 and then also a PR similar to Inherit function lifetimes for impl-trait #103449 .","breadcrumbs":"Type checking » Opaque types » Return Position Impl Trait In Trait » AST lowering","id":"1045","title":"AST lowering"},"1046":{"body":"The main change to HIR ty lowering is that we lower hir::TyKind::OpaqueDef for an RPITIT to a projection instead of an opaque, using a newly synthesized def-id for a new associated type in the trait. We'll describe how exactly we get this def-id in the next section. This means that any time we call lower_ty on the RPITIT, we end up getting a projection back instead of an opaque. This projection can then be normalized to the right value -- either the original opaque if we're in the trait, or the inferred type of the RPITIT if we're in an impl. Lowering to synthetic associated types Using query feeding, we synthesize new associated types on both the trait side and impl side for RPITITs that show up in methods. Lowering RPITITs in traits When tcx.associated_item_def_ids(trait_def_id) is called on a trait to gather all of the trait's associated types, the query previously just returned the def-ids of the HIR items that are children of the trait. After #112988 , additionally, for each method in the trait, we add the def-ids returned by tcx.associated_types_for_impl_traits_in_associated_fn(trait_method_def_id), which walks through each trait method, gathers any RPITITs that show up in the signature, and then calls associated_type_for_impl_trait_in_trait for each RPITIT, which synthesizes a new associated type. Lowering RPITITs in impls Similarly, along with the impl's HIR items, for each impl method, we additionally add all of the associated_types_for_impl_traits_in_associated_fn for the impl method. This calls associated_type_for_impl_trait_in_impl, which will synthesize an associated type definition for each RPITIT that comes from the corresponding trait method. Synthesizing new associated types We use query feeding ( TyCtxtAt::create_def ) to synthesize a new def-id for the synthetic GATs for each RPITIT. Locally, most of rustc's queries match on the HIR of an item to compute their values. Since the RPITIT doesn't really have HIR associated with it, or at least not HIR that corresponds to an associated type, we must compute many queries eagerly and feed them, like opt_def_kind, associated_item, visibility, anddefaultness. The values for most of these queries is obvious, since the RPITIT conceptually inherits most of its information from the parent function (e.g. visibility), or because it's trivially knowable because it's an associated type (opt_def_kind). Some other queries are more involved, or cannot be fed, and we document the interesting ones of those below: generics_of for the trait The GAT for an RPITIT conceptually inherits the same generics as the RPIT it comes from. However, instead of having the method as the generics' parent, the trait is the parent. Currently we get away with taking the RPIT's generics and method generics and flattening them both into a new generics list, preserving the def-id of each of the parameters. (This may cause issues with def-ids having the wrong parents, but in the worst case this will cause diagnostics issues. If this ends up being an issue, we can synthesize new def-ids for generic params whose parent is the GAT.) An illustrated example trait Foo { fn method<'early: 'early, 'late, T>() -> impl Sized + Captures<'early, 'late>;\n} Would desugar to... trait Foo { // vvvvvvvvv method's generics // vvvvvvvvvvvvvvvvvvvvvvvv opaque's generics type Gat<'early, T, 'early_duplicated, 'late>: Sized + Captures<'early_duplicated, 'late>; fn method<'early: 'early, 'late, T>() -> Self::Gat<'early, T, 'early, 'late>;\n} generics_of for the impl The generics for an impl's GAT are a bit more interesting. They are composed of RPITIT's own generics (from the trait definition), appended onto the impl's methods generics. This has the same issue as above, where the generics for the GAT have parameters whose def-ids have the wrong parent, but this should only cause issues in diagnostics. We could fix this similarly if we were to synthesize new generics def-ids, but this can be done later in a forwards-compatible way, perhaps by a interested new contributor. opt_rpitit_info Some queries rely on computing information that would result in cycles if we were to feed them eagerly, like explicit_predicates_of. Therefore we defer to the predicates_of provider to return the right value for our RPITIT's GAT. We do this by detecting early on in the query if the associated type is synthetic by using opt_rpitit_info , which returns Some if the associated type is synthetic. Then, during a query like explicit_predicates_of, we can detect if an associated type is synthetic like: fn explicit_predicates_of(tcx: TyCtxt<'_>, def_id: LocalDefId) -> ... { if let Some(rpitit_info) = tcx.opt_rpitit_info(def_id) { // Do something special for RPITITs... return ...; } // The regular computation which relies on access to the HIR of `def_id`.\n} explicit_predicates_of RPITITs begin by copying the predicates of the method that defined it, both on the trait and impl side. Additionally, we install \"bidirectional outlives\" predicates. Specifically, we add region-outlives predicates in both directions for each captured early-bound lifetime that constrains it to be equal to the duplicated early-bound lifetime that results from lowering. This is best illustrated in an example: trait Foo<'a> { fn bar() -> impl Sized + 'a;\n} // Desugars into... trait Foo<'a> { type Gat<'a_duplicated>: Sized + 'a where 'a: 'a_duplicated, 'a_duplicated: 'a; //~^ Specifically, we should be able to assume that the // duplicated `'a_duplicated` lifetime always stays in // sync with the `'a` lifetime. fn bar() -> Self::Gat<'a>;\n} assumed_wf_types The GATs in both the trait and impl inherit the assumed_wf_types of the trait method that defines the RPITIT. This is to make sure that the following code is well formed when lowered. trait Foo { fn iter<'a, T>(x: &'a [T]) -> impl Iterator;\n} // which is lowered to... trait FooDesugared { type Iter<'a, T>: Iterator; //~^ assumed wf: `&'a [T]` // Without assumed wf types, the GAT would not be well-formed on its own. fn iter<'a, T>(x: &'a [T]) -> Self::Iter<'a, T>;\n} Because assumed_wf_types is only defined for local def ids, in order to properly implement assumed_wf_types for impls of foreign traits with RPITs, we need to encode the assumed wf types of RPITITs in an extern query assumed_wf_types_for_rpitit .","breadcrumbs":"Type checking » Opaque types » Return Position Impl Trait In Trait » HIR ty lowering","id":"1046","title":"HIR ty lowering"},"1047":{"body":"The RPITIT inference algorithm The RPITIT inference algorithm is implemented in collect_return_position_impl_trait_in_trait_tys . High-level: Given a impl method and a trait method, we take the trait method and instantiate each RPITIT in the signature with an infer var. We then equate this trait method signature with the impl method signature, and process all obligations that fall out in order to infer the type of all of the RPITITs in the method. The method is also responsible for making sure that the hidden types for each RPITIT actually satisfy the bounds of the impl Trait, i.e. that if we infer impl Trait = Foo, that Foo: Trait holds. An example... #![feature(return_position_impl_trait_in_trait)] use std::ops::Deref; trait Foo { fn bar() -> impl Deref; // ^- RPITIT ?0 ^- RPITIT ?1\n} impl Foo for () { fn bar() -> Box { Box::new(String::new()) }\n} We end up with the trait signature that looks like fn() -> ?0, and nested obligations ?0: Deref, ?1: Sized. The impl signature is fn() -> Box. Equating these signatures gives us ?0 = Box, which then after processing the obligation Box: Deref gives us ?1 = String, and the other obligation String: Sized evaluates to true. By the end of the algorithm, we end up with a mapping between associated type def-ids to concrete types inferred from the signature. We can then use this mapping to implement type_of for the synthetic associated types in the impl, since this mapping describes the type that should come after the = in type Assoc = ... for each RPITIT. Implied bounds in RPITIT hidden type inference Since collect_return_position_impl_trait_in_trait_tys does fulfillment and region resolution, we must provide it assumed_wf_types so that we can prove region obligations with the same expected implied bounds as compare_method_predicate_entailment does. Since the return type of a method is understood to be one of the assumed WF types, and we eagerly fold the return type with inference variables to do opaque type inference, after opaque type inference, the return type will resolve to contain the hidden types of the RPITITs. this would mean that the hidden types of the RPITITs would be assumed to be well-formed without having independently proven that they are. This resulted in a subtle unsoundness bug . In order to prevent this cyclic reasoning, we instead replace the hidden types of the RPITITs in the return type of the method with placeholders , which lead to no implied well-formedness bounds. Default trait body Type-checking a default trait body, like: trait Foo { fn bar() -> impl Sized { 1i32 }\n} requires one interesting hack. We need to install a projection predicate into the param-env of Foo::bar allowing us to assume that the RPITIT's GAT normalizes to the RPITIT's opaque type. This relies on the observation that a trait method and RPITIT's GAT will always be \"in sync\". That is, one will only ever be overridden if the other one is as well. Compare this to a similar desugaring of the code above, which would fail because we cannot rely on this same assumption: #![feature(impl_trait_in_assoc_type)]\n#![feature(associated_type_defaults)] trait Foo { type RPITIT = impl Sized; fn bar() -> Self::RPITIT { 01i32 }\n} Failing because a down-stream impl could theoretically provide an implementation for RPITIT without providing an implementation of bar: error[E0308]: mismatched types\n--> src/lib.rs:8:9 |\n5 | type RPITIT = impl Sized; | ------------------------- associated type defaults can't be assumed inside the trait defining them\n6 |\n7 | fn bar() -> Self::RPITIT { | ------------ expected `::RPITIT` because of return type\n8 | 01i32 | ^^^^^ expected associated type, found `i32` | = note: expected associated type `::RPITIT` found type `i32` Well-formedness checking We check well-formedness of RPITITs just like regular associated types. Since we added lifetime bounds in predicates_of that link the duplicated early-bound lifetimes to their original lifetimes, and we implemented assumed_wf_types which inherits the WF types of the method from which the RPITIT originates ( #113704 ), we have no issues WF-checking the GAT as if it were a regular GAT.","breadcrumbs":"Type checking » Opaque types » Return Position Impl Trait In Trait » Typechecking","id":"1047","title":"Typechecking"},"1048":{"body":"Specialization is super busted The \"default trait methods\" described above does not interact well with specialization, because we only install those projection bounds in trait default methods, and not in impl methods. Given that specialization is already pretty busted, I won't go into detail, but it's currently a bug tracked in: * tests/ui/impl-trait/in-trait/specialization-broken.rs Projections don't have variances This code fails because projections don't have variances: #![feature(return_position_impl_trait_in_trait)] trait Foo { // Note that the RPITIT below does *not* capture `'lt`. fn bar<'lt: 'lt>() -> impl Eq;\n} fn test<'a, 'b, T: Foo>() -> bool { ::bar::<'a>() == ::bar::<'b>() //~^ ERROR // (requires that `'a == 'b`)\n} This is because we can't relate ::Rpitit<'a> and ::Rpitit<'b>, even if they don't capture their lifetime. If we were using regular opaque types, this would work, because they would be bivariant in that lifetime parameter: #![feature(return_position_impl_trait_in_trait)] fn bar<'lt: 'lt>() -> impl Eq { ()\n} fn test<'a, 'b>() -> bool { bar::<'a>() == bar::<'b>()\n} This is probably okay though, since RPITITs will likely have their captures behavior changed to capture all in-scope lifetimes anyways. This could also be relaxed later in a forwards-compatible way if we were to consider variances of RPITITs when relating projections.","breadcrumbs":"Type checking » Opaque types » Return Position Impl Trait In Trait » What's broken, what's weird, etc.","id":"1048","title":"What's broken, what's weird, etc."},"1049":{"body":"In this chapter we discuss the various restrictions we impose on the generic arguments of opaque types when defining their hidden types Opaque<'a, 'b, .., A, B, ..> := SomeHiddenType. These restrictions are implemented in borrow checking ( Source ) as it is the final step opaque types inference.","breadcrumbs":"Type checking » Opaque types » Region inference restrictions » Opaque types region inference restrictions","id":"1049","title":"Opaque types region inference restrictions"},"105":{"body":"Running a subset of the test suites Run only the tidy script Run tests on the standard library Run the tidy script and tests on the standard library Run tests on the standard library using a stage 1 compiler Run all tests using a stage 2 compiler Run unit tests on the compiler/library Running an individual test Passing arguments to rustc when running tests Editing and updating the reference files Configuring test running Passing --pass $mode Running tests with different \"compare modes\" Running tests manually Running tests on a remote machine Testing on emulators Running rustc_codegen_gcc tests You can run the entire test collection using x. But note that running the entire test collection is almost never what you want to do during local development because it takes a really long time. For local development, see the subsection after on how to run a subset of tests. Running plain ./x test will build the stage 1 compiler and then run the whole test suite. This not only include tests/, but also library/, compiler/, src/tools/ package tests and more. You usually only want to run a subset of the test suites (or even a smaller set of tests than that) which you expect will exercise your changes. PR CI exercises a subset of test collections, and merge queue CI will exercise all of the test collection. ./x test The test results are cached and previously successful tests are ignored during testing. The stdout/stderr contents as well as a timestamp file for every test can be found under build//test/ for the given . To force-rerun a test (e.g. in case the test runner fails to notice a change) you can use the --force-rerun CLI option. Note on requirements of external dependencies Some test suites may require external dependencies. This is especially true of debuginfo tests. Some debuginfo tests require a Python-enabled gdb. You can test if your gdb install supports Python by using the python command from within gdb. Once invoked you can type some Python code (e.g. print(\"hi\")) followed by return and then CTRL+D to execute it. If you are building gdb from source, you will need to configure with --with-python=.","breadcrumbs":"Testing the compiler » Running tests » Running tests","id":"105","title":"Running tests"},"1050":{"body":"For type arguments, two restrictions are necessary: each type argument must be (1) a type parameter and (2) is unique among the generic arguments. The same is applied to const arguments. Example of case (1): type Opaque = impl Sized; // `T` is a type parameter.\n// Opaque := ();\nfn good() -> Opaque {} // `()` is not a type parameter.\n// Opaque<()> := ();\nfn bad() -> Opaque<()> {} //~ ERROR Example of case (2): type Opaque = impl Sized; // `T` and `U` are unique in the generic args.\n// Opaque := T;\nfn good(t: T, _u: U) -> Opaque { t } // `T` appears twice in the generic args.\n// Opaque := T;\nfn bad(t: T) -> Opaque { t } //~ ERROR Motivation: In the first case Opaque<()> := (), the hidden type is ambiguous because it is compatible with two different interpretaions: Opaque := X and Opaque := (). Similarly for the second case Opaque := T, it is ambiguous whether it should be interpreted as Opaque := X or as Opaque := Y. Because of this ambiguity, both cases are rejected as invalid defining uses.","breadcrumbs":"Type checking » Opaque types » Region inference restrictions » Background: type and const generic arguments","id":"1050","title":"Background: type and const generic arguments"},"1051":{"body":"Each lifetime argument must be unique in the arguments list and must not be 'static. This is in order to avoid an ambiguity with hidden type inference similar to the case of type parameters. For example, the invalid defining use below Opaque<'static> := Inv<'static> is compatible with both Opaque<'x> := Inv<'static> and Opaque<'x> := Inv<'x>. type Opaque<'x> = impl Sized + 'x;\ntype Inv<'a> = Option<*mut &'a ()>; fn good<'a>() -> Opaque<'a> { Inv::<'static>::None } fn bad() -> Opaque<'static> { Inv::<'static>::None }\n//~^ ERROR type Opaque<'x, 'y> = impl Trait<'x, 'y>; fn good<'a, 'b>() -> Opaque<'a, 'b> {} fn bad<'a>() -> Opaque<'a, 'a> {}\n//~^ ERROR Semantic lifetime equality: One complexity with lifetimes compared to type parameters is that two lifetimes that are syntactically different may be semantically equal. Therefore, we need to be cautious when verifying that the lifetimes are unique. // This is also invalid because `'a` is *semantically* equal to `'static`.\nfn still_bad_1<'a: 'static>() -> Opaque<'a> {}\n//~^ Should error! // This is also invalid because `'a` and `'b` are *semantically* equal.\nfn still_bad_2<'a: 'b, 'b: 'a>() -> Opaque<'a, 'b> {}\n//~^ Should error!","breadcrumbs":"Type checking » Opaque types » Region inference restrictions » Uniqueness restriction","id":"1051","title":"Uniqueness restriction"},"1052":{"body":"An exception to the uniqueness rule above is when the bounds at the opaque type's definition require a lifetime parameter to be equal to another one or to the 'static lifetime. // The definition requires `'x` to be equal to `'static`.\ntype Opaque<'x: 'static> = impl Sized + 'x; fn good() -> Opaque<'static> {} Motivation: an attempt to implement the uniqueness restriction for RPITs resulted in a breakage found by crater . This can be mitigated by this exception to the rule. An example of the code that would otherwise break: struct Type<'a>(&'a ());\nimpl<'a> Type<'a> { // `'b == 'a` fn do_stuff<'b: 'a>(&'b self) -> impl Trait<'a, 'b> {}\n} Why this is correct: for such a defining use like Opaque<'a, 'a> := &'a str, it can be interpreted in either way—either as Opaque<'x, 'y> := &'x str or as Opaque<'x, 'y> := &'y str and it wouldn't matter because every use of Opaque will guarantee that both parameters are equal as per the well-formedness rules.","breadcrumbs":"Type checking » Opaque types » Region inference restrictions » An exception to uniqueness rule","id":"1052","title":"An exception to uniqueness rule"},"1053":{"body":"Only universally quantified lifetimes are allowed in the opaque type arguments. This includes lifetime parameters and placeholders. type Opaque<'x> = impl Sized + 'x; fn test<'a>() -> Opaque<'a> { // `Opaque<'empty> := ()` let _: Opaque<'_> = (); //~^ ERROR\n} Motivation: This makes the lifetime and type arguments behave consistently but this is only as a bonus. The real reason behind this restriction is purely technical, as the member constraints algorithm faces a fundamental limitation: When encountering an opaque type definition Opaque<'?1> := &'?2 u8, a member constraint '?2 member-of ['static, '?1] is registered. In order for the algorithm to pick the right choice, the complete set of \"outlives\" relationships between the choice regions ['static, '?1] must already be known before doing the region inference. This can be satisfied only if each choice region is either: a universal region, i.e. RegionKind::Re{EarlyParam,LateParam,Placeholder,Static}, because the relations between universal regions are completely known, prior to region inference, from the explicit and implied bounds. or an existential region that is \"strictly equal\" to a universal region. Strict lifetime equality is defined below and is required here because it is the only type of equality that can be evaluated prior to full region inference. Strict lifetime equality: We say that two lifetimes are strictly equal if there are bidirectional outlives constraints between them. In NLL terms, this means the lifetimes are part of the same SCC . Importantly this type of equality can be evaluated prior to full region inference (but of course after constraint collection). The other type of equality is when region inference ends up giving two lifetimes variables the same value even if they are not strictly equal. See #113971 for how we used to conflate the difference. interaction with \"once modulo regions\" restriction In the example above, note the opaque type in the signature is Opaque<'a> and the one in the invalid defining use is Opaque<'empty>. In the proposed MiniTAIT plan, namely the \"once modulo regions\" rule, we already disallow this. Although it might appear that \"universal lifetimes\" restriction becomes redundant as it logically follows from \"MiniTAIT\" restrictions, the subsequent related discussion on lifetime equality and closures remains relevant.","breadcrumbs":"Type checking » Opaque types » Region inference restrictions » Universal lifetimes restriction","id":"1053","title":"Universal lifetimes restriction"},"1054":{"body":"When the opaque type is defined in a closure/coroutine/inline-const body, universal lifetimes that are \"external\" to the closure are not allowed in the opaque type arguments. External regions are defined in RegionClassification::External Example: (This one happens to compile in the current nightly but more practical examples are already rejected with confusing errors.) type Opaque<'x> = impl Sized + 'x; fn test<'a>() -> Opaque<'a> { let _ = || { // `'a` is external to the closure let _: Opaque<'a> = (); //~^ Should be an error! }; ()\n} Motivation: In closure bodies, external lifetimes, although being categorized as \"universal\" lifetimes, behave more like existential lifetimes in that the relations between them are not known ahead of time, instead their values are inferred just like existential lifetimes and the requirements are propagated back to the parent fn. This breaks the member constraints algorithm as described above: In order for the algorithm to pick the right choice, the complete set of “outlives” relationships between the choice regions ['static, '?1] must already be known before doing the region inference Here is an example that details how : type Opaque<'x, 'y> = impl Sized; // fn test<'a, 'b>(s: &'a str) -> impl FnOnce() -> Opaque<'a, 'b> { move || { s } //~^ ERROR hidden type for `Opaque<'_, '_>` captures lifetime that does not appear in bounds\n} // The above closure body is desugared into something like:\nfn test::{closure#0}(_upvar: &'?8 str) -> Opaque<'?6, '?7> { return _upvar\n} // where `['?8, '?6, ?7]` are universal lifetimes *external* to the closure.\n// There are no known relations between them *inside* the closure.\n// But in the parent fn it is known that `'?6: '?8`.\n//\n// When encountering an opaque definition `Opaque<'?6, '?7> := &'8 str`,\n// The member constraints algorithm does not know enough to safely make `?8 = '?6`.\n// For this reason, it errors with a sensible message:\n// \"hidden type captures lifetime that does not appear in bounds\". Without these restrictions, error messages are confusing and, more importantly, there is a risk that we accept code that would likely break in the future because member constraints are super broken in closures. Output types: I believe the most common scenario where this causes issues in real-world code is with closure/async-block output types. It is worth noting that there is a discrepancy between closures and async blocks that further demonstrates this issue and is attributed to the hack of replace_opaque_types_with_inference_vars , which is applied to futures only. type Opaque<'x> = impl Sized + 'x;\nfn test<'a>() -> impl FnOnce() -> Opaque<'a> { // Output type of the closure is Opaque<'a> // -> hidden type definition happens *inside* the closure // -> rejected. move || {} //~^ ERROR expected generic lifetime parameter, found `'_`\n} use std::future::Future;\ntype Opaque<'x> = impl Sized + 'x;\nfn test<'a>() -> impl Future> { // Output type of the async block is unit `()` // -> hidden type definition happens in the parent fn // -> accepted. async move {}\n}","breadcrumbs":"Type checking » Opaque types » Region inference restrictions » Closure restrictions","id":"1054","title":"Closure restrictions"},"1055":{"body":"","breadcrumbs":"Const condition checking » Effects and const condition checking","id":"1055","title":"Effects and const condition checking"},"1056":{"body":"HostEffectPredicate s are a kind of predicate from ~const Tr or const Tr bounds. It has a trait reference, and a constness which could be Maybe or Const depending on the bound. Because ~const Tr, or rather Maybe bounds apply differently based on whichever contexts they are in, they have different behavior than normal bounds. Where normal trait bounds on a function such as T: Tr are collected within the predicates_of query to be proven when a function is called and to be assumed within the function, bounds such as T: ~const Tr will behave as a normal trait bound and add T: Tr to the result from predicates_of, but also adds a HostEffectPredicate to the const_conditions query. On the other hand, T: const Tr bounds do not change meaning across contexts, therefore they will result in HostEffect(T: Tr, const) being added to predicates_of, and not const_conditions.","breadcrumbs":"Const condition checking » The HostEffect predicate","id":"1056","title":"The HostEffect predicate"},"1057":{"body":"predicates_of represents a set of predicates that need to be proven to use an item. For example, to use foo in the example below: fn foo() where T: Default {} We must be able to prove that T implements Default. In a similar vein, const_conditions represents a set of predicates that need to be proven to use an item in const contexts . If we adjust the example above to use const trait bounds: const fn foo() where T: ~const Default {} Then foo would get a HostEffect(T: Default, maybe) in the const_conditions query, suggesting that in order to call foo from const contexts, one must prove that T has a const implementation of Default.","breadcrumbs":"Const condition checking » The const_conditions query","id":"1057","title":"The const_conditions query"},"1058":{"body":"const_conditions are currently checked in various places. Every call in HIR from a const context (which includes const fn and const items) will check that const_conditions of the function we are calling hold. This is done in FnCtxt::enforce_context_effects . Note that we don't check if the function is only referred to but not called, as the following code needs to compile: const fn hi() -> T { T::default()\n}\nconst X: fn() -> u32 = hi::; For a trait impl to be well-formed, we must be able to prove the const_conditions of the trait from the impl's environment. This is checked in wfcheck::check_impl . Here's an example: #[const_trait]\ntrait Bar {}\n#[const_trait]\ntrait Foo: ~const Bar {}\n// `const_conditions` contains `HostEffect(Self: Bar, maybe)` impl const Bar for () {}\nimpl const Foo for () {}\n// ^ here we check `const_conditions` for the impl to be well-formed Methods of trait impls must not have stricter bounds than the method of the trait that they are implementing. To check that the methods are compatible, a hybrid environment is constructed with the predicates of the impl plus the predicates of the trait method, and we attempt to prove the predicates of the impl method. We do the same for const_conditions: #[const_trait]\ntrait Foo { fn hi();\n} impl Foo for Vec { fn hi(); // ^ we can't prove `T: ~const PartialEq` given `T: ~const Clone` and // `T: ~const Default`, therefore we know that the method on the impl // is stricter than the method on the trait.\n} These checks are done in compare_method_predicate_entailment . A similar function that does the same check for associated types is called compare_type_predicate_entailment . Both of these need to consider const_conditions when in const contexts. In MIR, as part of const checking, const_conditions of items that are called are revalidated again in Checker::revalidate_conditional_constness .","breadcrumbs":"Const condition checking » Enforcement of const_conditions","id":"1058","title":"Enforcement of const_conditions"},"1059":{"body":"Bounds on associated types, opaque types, and supertraits such as trait Foo: ~const PartialEq { type X: ~const PartialEq;\n} fn foo() -> impl ~const PartialEq { // ^ unimplemented syntax\n} Have their bounds represented differently. Unlike const_conditions which need to be proved for callers, and can be assumed inside the definition (e.g. trait bounds on functions), these bounds need to be proved at definition (at the impl, or when returning the opaque) but can be assumed for callers. The non-const equivalent of these bounds are called explicit_item_bounds . These bounds are checked in compare_impl_item::check_type_bounds for HIR typeck, evaluate_host_effect_from_item_bounds in the old solver and consider_additional_alias_assumptions in the new solver.","breadcrumbs":"Const condition checking » explicit_implied_const_bounds on associated types and traits","id":"1059","title":"explicit_implied_const_bounds on associated types and traits"},"106":{"body":"When working on a specific PR, you will usually want to run a smaller set of tests. For example, a good \"smoke test\" that can be used after modifying rustc to see if things are generally working correctly would be to exercise the ui test suite ( tests/ui ): ./x test tests/ui Of course, the choice of test suites is somewhat arbitrary, and may not suit the task you are doing. For example, if you are hacking on debuginfo, you may be better off with the debuginfo test suite: ./x test tests/debuginfo If you only need to test a specific subdirectory of tests for any given test suite, you can pass that directory as a filter to ./x test: ./x test tests/ui/const-generics Note for MSYS2 On MSYS2 the paths seem to be strange and ./x test neither recognizes tests/ui/const-generics nor tests\\ui\\const-generics. In that case, you can workaround it by using e.g. ./x test ui --test-args=\"tests/ui/const-generics\". Likewise, you can test a single file by passing its path: ./x test tests/ui/const-generics/const-test.rs x doesn't support running a single tool test by passing its path yet. You'll have to use the --test-args argument as described below . ./x test src/tools/miri --test-args tests/fail/uninit/padding-enum.rs","breadcrumbs":"Testing the compiler » Running tests » Running a subset of the test suites","id":"106","title":"Running a subset of the test suites"},"1060":{"body":"HostEffectPredicates are implemented both in the old solver and the new trait solver . In general, we can prove a HostEffect predicate when either of these conditions are met: The predicate can be assumed from caller bounds; The type has a const impl for the trait, and that const conditions on the impl holds, and that the explicit_implied_const_bounds on the trait holds; or The type has a built-in implementation for the trait in const contexts. For example, Fn may be implemented by function items if their const conditions are satisfied, or Destruct is implemented in const contexts if the type can be dropped at compile time.","breadcrumbs":"Const condition checking » Proving HostEffectPredicates","id":"1060","title":"Proving HostEffectPredicates"},"1061":{"body":"In Rust, pattern matching and bindings have a few very helpful properties. The compiler will check that bindings are irrefutable when made and that match arms are exhaustive.","breadcrumbs":"Pattern and exhaustiveness checking » Pattern and exhaustiveness checking","id":"1061","title":"Pattern and exhaustiveness checking"},"1062":{"body":"The central question that usefulness checking answers is: \"in this match expression, is that branch redundant?\". More precisely, it boils down to computing whether, given a list of patterns we have already seen, a given new pattern might match any new value. For example, in the following match expression, we ask in turn whether each pattern might match something that wasn't matched by the patterns above it. Here we see the 4th pattern is redundant with the 1st; that branch will get an \"unreachable\" warning. The 3rd pattern may or may not be useful, depending on whether Foo has other variants than Bar. Finally, we can ask whether the whole match is exhaustive by asking whether the wildcard pattern (_) is useful relative to the list of all the patterns in that match. Here we can see that _ is useful (it would catch (false, None)); this expression would therefore get a \"non-exhaustive match\" error. // x: (bool, Option)\nmatch x { (true, _) => {} // 1 (false, Some(Foo::Bar)) => {} // 2 (false, Some(_)) => {} // 3 (true, None) => {} // 4\n} Thus usefulness is used for two purposes: detecting unreachable code (which is useful to the user), and ensuring that matches are exhaustive (which is important for soundness, because a match expression can return a value).","breadcrumbs":"Pattern and exhaustiveness checking » Pattern usefulness","id":"1062","title":"Pattern usefulness"},"1063":{"body":"This check is done anywhere you can write a pattern: match expressions, if let, let else, plain let, and function arguments. // `match`\n// Usefulness can detect unreachable branches and forbid non-exhaustive matches.\nmatch foo() { Ok(x) => x, Err(_) => panic!(),\n} // `if let`\n// Usefulness can detect unreachable branches.\nif let Some(x) = foo() { // ...\n} // `while let`\n// Usefulness can detect infinite loops and dead loops.\nwhile let Some(x) = it.next() { // ...\n} // Destructuring `let`\n// Usefulness can forbid non-exhaustive patterns.\nlet Foo::Bar(x, y) = foo(); // Destructuring function arguments\n// Usefulness can forbid non-exhaustive patterns.\nfn foo(Foo { x, y }: Foo) { // ...\n}","breadcrumbs":"Pattern and exhaustiveness checking » Where it happens","id":"1063","title":"Where it happens"},"1064":{"body":"Exhaustiveness checking is run before MIR building in check_match . It is implemented in the rustc_pattern_analysis crate, with the core of the algorithm in the usefulness module. That file contains a detailed description of the algorithm.","breadcrumbs":"Pattern and exhaustiveness checking » The algorithm","id":"1064","title":"The algorithm"},"1065":{"body":"","breadcrumbs":"Pattern and exhaustiveness checking » Important concepts","id":"1065","title":"Important concepts"},"1066":{"body":"In the value Pair(Some(0), true), Pair is called the constructor of the value, and Some(0) and true are its fields. Every matchable value can be decomposed in this way. Examples of constructors are: Some, None, (,) (the 2-tuple constructor), Foo {..} (the constructor for a struct Foo), and 2 (the constructor for the number 2). Each constructor takes a fixed number of fields; this is called its arity. Pair and (,) have arity 2, Some has arity 1, None and 42 have arity 0. Each type has a known set of constructors. Some types have many constructors (like u64) or even an infinitely many (like &str and &[T]). Patterns are similar: Pair(Some(_), _) has constructor Pair and two fields. The difference is that we get some extra pattern-only constructors, namely: the wildcard _, variable bindings, integer ranges like 0..=10, and variable-length slices like [_, .., _]. We treat or-patterns separately. Now to check if a value v matches a pattern p, we check if v's constructor matches p's constructor, then recursively compare their fields if necessary. A few representative examples: matches!(v, _) := true matches!((v0, v1), (p0, p1)) := matches!(v0, p0) && matches!(v1, p1) matches!(Foo { a: v0, b: v1 }, Foo { a: p0, b: p1 }) := matches!(v0, p0) && matches!(v1, p1) matches!(Ok(v0), Ok(p0)) := matches!(v0, p0) matches!(Ok(v0), Err(p0)) := false (incompatible variants) matches!(v, 1..=100) := matches!(v, 1) || ... || matches!(v, 100) matches!([v0], [p0, .., p1]) := false (incompatible lengths) matches!([v0, v1, v2], [p0, .., p1]) := matches!(v0, p0) && matches!(v2, p1) This concept is absolutely central to pattern analysis. The constructor module provides functions to extract, list and manipulate constructors. This is a useful enough concept that variations of it can be found in other places of the compiler, like in the MIR-lowering of a match expression and in some clippy lints.","breadcrumbs":"Pattern and exhaustiveness checking » Constructors and fields","id":"1066","title":"Constructors and fields"},"1067":{"body":"The pattern-only constructors (_, ranges and variable-length slices) each stand for a set of normal constructors, e.g. _: Option stands for the set {None, Some} and [_, .., _] stands for the infinite set {[,], [,,], [,,,], ...} of the slice constructors of arity >= 2. In order to manage these constructors, we keep them as grouped as possible. For example: match (0, false) { (0 ..=100, true) => {} (50..=150, false) => {} (0 ..=200, _) => {}\n} In this example, all of 0, 1, .., 49 match the same arms, and thus can be treated as a group. In fact, in this match, the only ranges we need to consider are: 0..50, 50..=100, 101..=150,151..=200 and 201... Similarly: enum Direction { North, South, East, West }\n# let wind = (Direction::North, 0u8);\nmatch wind { (Direction::North, 50..) => {} (_, _) => {}\n} Here we can treat all the non-North constructors as a group, giving us only two cases to handle: North, and everything else. This is called \"constructor splitting\" and is crucial to having exhaustiveness run in reasonable time.","breadcrumbs":"Pattern and exhaustiveness checking » Constructor grouping and splitting","id":"1067","title":"Constructor grouping and splitting"},"1068":{"body":"This is likely the subtlest aspect of exhaustiveness. To be fully precise, a match doesn't operate on a value, it operates on a place. In certain unsafe circumstances, it is possible for a place to not contain valid data for its type. This has subtle consequences for empty types. Take the following: enum Void {}\nlet x: u8 = 0;\nlet ptr: *const Void = &x as *const u8 as *const Void;\nunsafe { match *ptr { _ => println!(\"Reachable!\"), }\n} In this example, ptr is a valid pointer pointing to a place with invalid data. The _ pattern does not look at the contents of the place *ptr, so this code is ok and the arm is taken. In other words, despite the place we are inspecting being of type Void, there is a reachable arm. If the arm had a binding however: # #[derive(Copy, Clone)]\n# enum Void {}\n# let x: u8 = 0;\n# let ptr: *const Void = &x as *const u8 as *const Void;\n# unsafe {\nmatch *ptr { _a => println!(\"Unreachable!\"),\n}\n# } Here the binding loads the value of type Void from the *ptr place. In this example, this causes UB since the data is not valid. In the general case, this asserts validity of the data at *ptr. Either way, this arm will never be taken. Finally, let's consider the empty match match *ptr {}. If we consider this exhaustive, then having invalid data at *ptr is invalid. In other words, the empty match is semantically equivalent to the _a => ... match. In the interest of explicitness, we prefer the case with an arm, hence we won't tell the user to remove the _a arm. In other words, the _a arm is unreachable yet not redundant. This is why we lint on redundant arms rather than unreachable arms, despite the fact that the lint says \"unreachable\". These considerations only affects certain places, namely those that can contain non-valid data without UB. These are: pointer dereferences, reference dereferences, and union field accesses. We track during exhaustiveness checking whether a given place is known to contain valid data. Having said all that, the current implementation of exhaustiveness checking does not follow the above considerations. On stable, empty types are for the most part treated as non-empty. The exhaustive_patterns feature errs on the other end: it allows omitting arms that could be reachable in unsafe situations. The never_patterns experimental feature aims to fix this and permit the correct behavior of empty types in patterns.","breadcrumbs":"Pattern and exhaustiveness checking » Usefulness vs reachability in the presence of empty types","id":"1068","title":"Usefulness vs reachability in the presence of empty types"},"1069":{"body":"Certain expressions in Rust can violate memory safety and as such need to be inside an unsafe block or function. The compiler will also warn if an unsafe block is used without any corresponding unsafe operations.","breadcrumbs":"Unsafety checking » Unsafety checking","id":"1069","title":"Unsafety checking"},"107":{"body":"./x test tidy","breadcrumbs":"Testing the compiler » Running tests » Run only the tidy script","id":"107","title":"Run only the tidy script"},"1070":{"body":"The unsafety check is located in the check_unsafety module. It performs a walk over the THIR of a function and all of its closures and inline constants. It keeps track of the unsafe context: whether it has entered an unsafe block. If an unsafe operation is used outside of an unsafe block, then an error is reported. If an unsafe operation is used in an unsafe block then that block is marked as used for the unused_unsafe lint . The unsafety check needs type information so could potentially be done on the HIR, making use of typeck results, THIR or MIR. THIR is chosen because there are fewer cases to consider than in HIR, for example unsafe function calls and unsafe method calls have the same representation in THIR. The check is not done on MIR because safety checks do not depend on control flow so MIR is not necessary to use and MIR doesn't have as precise spans for some expressions. Most unsafe operations can be identified by checking the ExprKind in THIR and checking the type of the argument. For example, dereferences of a raw pointer correspond to ExprKind::Derefs with an argument that has a raw pointer type. Looking for unsafe Union field accesses is a bit more complex because writing to a field of a union is safe. The checker tracks when it's visiting the left-hand side of an assignment expression and allows union fields to directly appear there, while erroring in all other cases. Union field accesses can also occur in patterns, so those have to be walked as well. The other complicated safety check is for writes to fields of layout constrained structs (such as NonNull ). These are found by looking for the borrow or assignment expression and then visiting the subexpression being borrowed or assigned with a separate visitor.","breadcrumbs":"Unsafety checking » Overview","id":"1070","title":"Overview"},"1071":{"body":"The unused_unsafe lint reports unsafe blocks that can be removed. The unsafety checker records whenever it finds an operation that requires unsafe. The lint is then reported if either: An unsafe block contains no unsafe operations An unsafe block is within another unsafe block, and the outer block isn't considered unused #![deny(unused_unsafe)]\nlet y = 0;\nlet x: *const u8 = core::ptr::addr_of!(y);\nunsafe { // lint reported for this block unsafe { let z = *x; } let safe_expr = 123;\n}\nunsafe { unsafe { // lint reported for this block let z = *x; } let unsafe_expr = *x;\n}","breadcrumbs":"Unsafety checking » The unused_unsafe lint","id":"1071","title":"The unused_unsafe lint"},"1072":{"body":"Unsafe traits require an unsafe impl to be implemented, the check for this is done as part of coherence . The unsafe_code lint is run as a lint pass on the ast that searches for unsafe blocks, functions and implementations, as well as certain unsafe attributes.","breadcrumbs":"Unsafety checking » Other checks involving unsafe","id":"1072","title":"Other checks involving unsafe"},"1073":{"body":"Defining a Dataflow Analysis Transfer Functions and Effects \"Before\" Effects Convergence A Brief Example Inspecting the Results of a Dataflow Analysis Graphviz Diagrams If you work on the MIR, you will frequently come across various flavors of dataflow analysis . rustc uses dataflow to find uninitialized variables, determine what variables are live across a generator yield statement, and compute which Places are borrowed at a given point in the control-flow graph. Dataflow analysis is a fundamental concept in modern compilers, and knowledge of the subject will be helpful to prospective contributors. However, this documentation is not a general introduction to dataflow analysis. It is merely a description of the framework used to define these analyses in rustc. It assumes that the reader is familiar with the core ideas as well as some basic terminology, such as \"transfer function\", \"fixpoint\" and \"lattice\". If you're unfamiliar with these terms, or if you want a quick refresher, Static Program Analysis by Anders Møller and Michael I. Schwartzbach is an excellent, freely available textbook. For those who prefer audiovisual learning, we previously recommended a series of short lectures by the Goethe University Frankfurt on YouTube, but it has since been deleted. See this PR for the context and this comment for the alternative lectures.","breadcrumbs":"MIR dataflow » Dataflow Analysis","id":"1073","title":"Dataflow Analysis"},"1074":{"body":"A dataflow analysis is defined by the Analysis trait. In addition to the type of the dataflow state, this trait defines the initial value of that state at entry to each block, as well as the direction of the analysis, either forward or backward. The domain of your dataflow analysis must be a lattice (strictly speaking a join-semilattice) with a well-behaved join operator. See documentation for the lattice module, as well as the JoinSemiLattice trait, for more information.","breadcrumbs":"MIR dataflow » Defining a Dataflow Analysis","id":"1074","title":"Defining a Dataflow Analysis"},"1075":{"body":"The dataflow framework in rustc allows each statement (and terminator) inside a basic block to define its own transfer function. For brevity, these individual transfer functions are known as \"effects\". Each effect is applied successively in dataflow order, and together they define the transfer function for the entire basic block. It's also possible to define an effect for particular outgoing edges of some terminators (e.g. apply_call_return_effect for the success edge of a Call terminator). Collectively, these are referred to as \"per-edge effects\".","breadcrumbs":"MIR dataflow » Transfer Functions and Effects","id":"1075","title":"Transfer Functions and Effects"},"1076":{"body":"Observant readers of the documentation may notice that there are actually two possible effects for each statement and terminator, the \"before\" effect and the unprefixed (or \"primary\") effect. The \"before\" effects are applied immediately before the unprefixed effect regardless of the direction of the analysis . In other words, a backward analysis will apply the \"before\" effect and then the \"primary\" effect when computing the transfer function for a basic block, just like a forward analysis. The vast majority of analyses should use only the unprefixed effects: Having multiple effects for each statement makes it difficult for consumers to know where they should be looking. However, the \"before\" variants can be useful in some scenarios, such as when the effect of the right-hand side of an assignment statement must be considered separately from the left-hand side.","breadcrumbs":"MIR dataflow » \"Before\" Effects","id":"1076","title":"\"Before\" Effects"},"1077":{"body":"Your analysis must converge to \"fixpoint\", otherwise it will run forever. Converging to fixpoint is just another way of saying \"reaching equilibrium\". In order to reach equilibrium, your analysis must obey some laws. One of the laws it must obey is that the bottom value [1] joined with some other value equals the second value. Or, as an equation: bottom join x = x Another law is that your analysis must have a \"top value\" such that top join x = top Having a top value ensures that your semilattice has a finite height, and the law state above ensures that once the dataflow state reaches top, it will no longer change (the fixpoint will be top). The bottom value's primary purpose is as the initial dataflow state. Each basic block's entry state is initialized to bottom before the analysis starts.","breadcrumbs":"MIR dataflow » Convergence","id":"1077","title":"Convergence"},"1078":{"body":"This section provides a brief example of a simple data-flow analysis at a high level. It doesn't explain everything you need to know, but hopefully it will make the rest of this page clearer. Let's say we want to do a simple analysis to find if mem::transmute may have been called by a certain point in the program. Our analysis domain will just be a bool that records whether transmute has been called so far. The bottom value will be false, since by default transmute has not been called. The top value will be true, since our analysis is done as soon as we determine that transmute has been called. Our join operator will just be the boolean OR (||) operator. We use OR and not AND because of this case: # unsafe fn example(some_cond: bool) {\nlet x = if some_cond { std::mem::transmute::(0_i32) // transmute was called!\n} else { 1_u32 // transmute was not called\n}; // Has transmute been called by this point? We conservatively approximate that\n// as yes, and that is why we use the OR operator.\nprintln!(\"x: {}\", x);\n# }","breadcrumbs":"MIR dataflow » A Brief Example","id":"1078","title":"A Brief Example"},"1079":{"body":"Once you have constructed an analysis, you must call iterate_to_fixpoint which will return a Results, which contains the dataflow state at fixpoint upon entry of each block. Once you have a Results, you can inspect the dataflow state at fixpoint at any point in the CFG. If you only need the state at a few locations (e.g., each Drop terminator) use a ResultsCursor . If you need the state at every location, a ResultsVisitor will be more efficient. Analysis | | iterate_to_fixpoint() | Results / \\ into_results_cursor(…) / \\ visit_with(…) / \\ ResultsCursor ResultsVisitor For example, the following code uses a ResultsVisitor ... // Assuming `MyVisitor` implements `ResultsVisitor`...\nlet mut my_visitor = MyVisitor::new(); // inspect the fixpoint state for every location within every block in RPO.\nlet results = MyAnalysis::new() .iterate_to_fixpoint(tcx, body, None);\nresults.visit_with(body, &mut my_visitor);` whereas this code uses ResultsCursor : let mut results = MyAnalysis::new() .iterate_to_fixpoint(tcx, body, None); .into_results_cursor(body); // Inspect the fixpoint state immediately before each `Drop` terminator.\nfor (bb, block) in body.basic_blocks().iter_enumerated() { if let TerminatorKind::Drop { .. } = block.terminator().kind { results.seek_before_primary_effect(body.terminator_loc(bb)); let state = results.get(); println!(\"state before drop: {:#?}\", state); }\n}","breadcrumbs":"MIR dataflow » Inspecting the Results of a Dataflow Analysis","id":"1079","title":"Inspecting the Results of a Dataflow Analysis"},"108":{"body":"./x test --stage 0 library/std Note that this only runs tests on std; if you want to test core or other crates, you have to specify those explicitly.","breadcrumbs":"Testing the compiler » Running tests » Run tests on the standard library","id":"108","title":"Run tests on the standard library"},"1080":{"body":"When the results of a dataflow analysis are not what you expect, it often helps to visualize them. This can be done with the -Z dump-mir flags described in Debugging MIR . Start with -Z dump-mir=F -Z dump-mir-dataflow, where F is either \"all\" or the name of the MIR body you are interested in. These .dot files will be saved in your mir_dump directory and will have the NAME of the analysis (e.g. maybe_inits) as part of their filename. Each visualization will display the full dataflow state at entry and exit of each block, as well as any changes that occur in each statement and terminator. See the example below: A graphviz diagram for a dataflow analysis","breadcrumbs":"MIR dataflow » Graphviz Diagrams","id":"1080","title":"Graphviz Diagrams"},"1081":{"body":"Dynamic drops Drop obligations Drop elaboration Drop elaboration in rustc Open drops Cleanup paths Aside: drop elaboration and const-eval","breadcrumbs":"Drop elaboration » Drop elaboration","id":"1081","title":"Drop elaboration"},"1082":{"body":"According to the reference : When an initialized variable or temporary goes out of scope, its destructor is run, or it is dropped. Assignment also runs the destructor of its left-hand operand, if it's initialized. If a variable has been partially initialized, only its initialized fields are dropped. When building the MIR, the Drop and DropAndReplace terminators represent places where drops may occur. However, in this phase, the presence of these terminators does not guarantee that a destructor will run. That's because the target of a drop may be uninitialized (usually because it has been moved from) before the terminator is reached. In general, we cannot know at compile-time whether a variable is initialized. let mut y = vec![]; { let x = vec![1, 2, 3]; if std::process::id() % 2 == 0 { y = x; // conditionally move `x` into `y` }\n} // `x` goes out of scope here. Should it be dropped? In these cases, we need to keep track of whether a variable is initialized dynamically . The rules are laid out in detail in RFC 320: Non-zeroing dynamic drops .","breadcrumbs":"Drop elaboration » Dynamic drops","id":"1082","title":"Dynamic drops"},"1083":{"body":"From the RFC: When a local variable becomes initialized, it establishes a set of \"drop obligations\": a set of structural paths (e.g. a local a, or a path to a field b.f.y) that need to be dropped. The drop obligations for a local variable x of struct-type T are computed from analyzing the structure of T. If T itself implements Drop, then x is a drop obligation. If T does not implement Drop, then the set of drop obligations is the union of the drop obligations of the fields of T. When a structural path is moved from (and thus becomes uninitialized), any drop obligations for that path or its descendants (path.f, path.f.g.h, etc.) are released. Types with Drop implementations do not permit moves from individual fields, so there is no need to track initializedness through them. When a local variable goes out of scope (Drop), or when a structural path is overwritten via assignment (DropAndReplace), we check for any drop obligations for that variable or path. Unless that obligation has been released by this point, its associated Drop implementation will be called. For enum types, only fields corresponding to the \"active\" variant need to be dropped. When processing drop obligations for such types, we first check the discriminant to determine the active variant. All drop obligations for variants besides the active one are ignored. Here are a few interesting types to help illustrate these rules: struct NoDrop(u8); // No `Drop` impl. No fields with `Drop` impls. struct NeedsDrop(Vec); // No `Drop` impl but has fields with `Drop` impls. struct ThinVec(*const u8); // Custom `Drop` impl. Individual fields cannot be moved from. impl Drop for ThinVec { fn drop(&mut self) { /* ... */ }\n} enum MaybeDrop { Yes(NeedsDrop), No(NoDrop),\n}","breadcrumbs":"Drop elaboration » Drop obligations","id":"1083","title":"Drop obligations"},"1084":{"body":"One valid model for these rules is to keep a boolean flag (a \"drop flag\") for every structural path that is used at any point in the function. This flag is set when its path is initialized and is cleared when the path is moved from. When a Drop occurs, we check the flags for every obligation associated with the target of the Drop and call the associated Drop impl for those that are still applicable. This process—transforming the newly built MIR with its imprecise Drop and DropAndReplace terminators into one with drop flags—is known as drop elaboration. When a MIR statement causes a variable to become initialized (or uninitialized), drop elaboration inserts code that sets (or clears) the drop flag for that variable. It wraps Drop terminators in conditionals that check the newly inserted drop flags. Drop elaboration also splits DropAndReplace terminators into a Drop of the target and a write of the newly dropped place. This is somewhat unrelated to what we've discussed above. Once this is complete, Drop terminators in the MIR correspond to a call to the \"drop glue\" or \"drop shim\" for the type of the dropped place. The drop glue for a type calls the Drop impl for that type (if one exists), and then recursively calls the drop glue for all fields of that type.","breadcrumbs":"Drop elaboration » Drop elaboration","id":"1084","title":"Drop elaboration"},"1085":{"body":"The approach described above is more expensive than necessary. One can imagine a few optimizations: Only paths that are the target of a Drop (or have the target as a prefix) need drop flags. Some variables are known to be initialized (or uninitialized) when they are dropped. These do not need drop flags. If a set of paths are only dropped or moved from via a shared prefix, those paths can share a single drop flag. A subset of these are implemented in rustc. In the compiler, drop elaboration is split across several modules. The pass itself is defined here , but the main logic is defined elsewhere since it is also used to build drop shims . Drop elaboration designates each Drop in the newly built MIR as one of four kinds: Static, the target is always initialized. Dead, the target is always un initialized. Conditional, the target is either wholly initialized or wholly uninitialized. It is not partly initialized. Open, the target may be partly initialized. For this, it uses a pair of dataflow analyses, MaybeInitializedPlaces and MaybeUninitializedPlaces. If a place is in one but not the other, then the initializedness of the target is known at compile-time (Dead or Static). In this case, drop elaboration does not add a flag for the target. It simply removes (Dead) or preserves (Static) the Drop terminator. For Conditional drops, we know that the initializedness of the variable as a whole is the same as the initializedness of its fields. Therefore, once we generate a drop flag for the target of that drop, it's safe to call the drop glue for that target.","breadcrumbs":"Drop elaboration » Drop elaboration in rustc","id":"1085","title":"Drop elaboration in rustc"},"1086":{"body":"Open drops are the most complex, since we need to break down a single Drop terminator into several different ones, one for each field of the target whose type has drop glue (Ty::needs_drop). We cannot call the drop glue for the target itself because that requires all fields of the target to be initialized. Remember, variables whose type has a custom Drop impl do not allow Open drops because their fields cannot be moved from. This is accomplished by recursively categorizing each field as Dead, Static, Conditional or Open. Fields whose type does not have drop glue are automatically Dead and need not be considered during the recursion. When we reach a field whose kind is not Open, we handle it as we did above. If the field is also Open, the recursion continues. It's worth noting how we handle Open drops of enums. Inside drop elaboration, each variant of the enum is treated like a field, with the invariant that only one of those \"variant fields\" can be initialized at any given time. In the general case, we do not know which variant is the active one, so we will have to call the drop glue for the enum (which checks the discriminant) or check the discriminant ourselves as part of an elaborated Open drop. However, in certain cases (within a match arm, for example) we do know which variant of an enum is active. This information is encoded in the MaybeInitializedPlaces and MaybeUninitializedPlaces dataflow analyses by marking all places corresponding to inactive variants as uninitialized.","breadcrumbs":"Drop elaboration » Open drops","id":"1086","title":"Open drops"},"1087":{"body":"TODO: Discuss drop elaboration and unwinding.","breadcrumbs":"Drop elaboration » Cleanup paths","id":"1087","title":"Cleanup paths"},"1088":{"body":"In Rust, functions that are eligible for evaluation at compile-time must be marked explicitly using the const keyword. This includes implementations of the Drop trait, which may or may not be const. Code that is eligible for compile-time evaluation may only call const functions, so any calls to non-const Drop implementations in such code must be forbidden. A call to a Drop impl is encoded as a Drop terminator in the MIR. However, as we discussed above, a Drop terminator in newly built MIR does not necessarily result in a call to Drop::drop. The drop target may be uninitialized at that point. This means that checking for non-const Drops on the newly built MIR can result in spurious errors. Instead, we wait until after drop elaboration runs, which eliminates Dead drops (ones where the target is known to be uninitialized) to run these checks.","breadcrumbs":"Drop elaboration » Aside: drop elaboration and const-eval","id":"1088","title":"Aside: drop elaboration and const-eval"},"1089":{"body":"The borrow check is Rust's \"secret sauce\" – it is tasked with enforcing a number of properties: That all variables are initialized before they are used. That you can't move the same value twice. That you can't move a value while it is borrowed. That you can't access a place while it is mutably borrowed (except through the reference). That you can't mutate a place while it is immutably borrowed. etc The borrow checker operates on the MIR. An older implementation operated on the HIR. Doing borrow checking on MIR has several advantages: The MIR is far less complex than the HIR; the radical desugaring helps prevent bugs in the borrow checker. (If you're curious, you can see a list of bugs that the MIR-based borrow checker fixes here .) Even more importantly, using the MIR enables \"non-lexical lifetimes\" , which are regions derived from the control-flow graph.","breadcrumbs":"The borrow checker » MIR borrow check","id":"1089","title":"MIR borrow check"},"109":{"body":"./x test --stage 0 tidy library/std","breadcrumbs":"Testing the compiler » Running tests » Run the tidy script and tests on the standard library","id":"109","title":"Run the tidy script and tests on the standard library"},"1090":{"body":"The borrow checker source is found in the rustc_borrowck crate . The main entry point is the mir_borrowck query. We first create a local copy of the MIR. In the coming steps, we will modify this copy in place to modify the types and things to include references to the new regions that we are computing. We then invoke replace_regions_in_mir to modify our local MIR. Among other things, this function will replace all of the regions in the MIR with fresh inference variables . Next, we perform a number of dataflow analyses that compute what data is moved and when. We then do a second type check across the MIR: the purpose of this type check is to determine all of the constraints between different regions. Next, we do region inference , which computes the values of each region — basically, the points in the control-flow graph where each lifetime must be valid according to the constraints we collected. At this point, we can compute the \"borrows in scope\" at each point. Finally, we do a second walk over the MIR, looking at the actions it does and reporting errors. For example, if we see a statement like *a + 1, then we would check that the variable a is initialized and that it is not mutably borrowed, as either of those would require an error to be reported. Doing this check requires the results of all the previous analyses.","breadcrumbs":"The borrow checker » Major phases of the borrow checker","id":"1090","title":"Major phases of the borrow checker"},"1091":{"body":"Part of the borrow checker's job is to track which variables are \"initialized\" at any given point in time -- this also requires figuring out where moves occur and tracking those.","breadcrumbs":"The borrow checker » Tracking moves and initialization » Tracking moves and initialization","id":"1091","title":"Tracking moves and initialization"},"1092":{"body":"From a user's perspective, initialization -- giving a variable some value -- and moves -- transferring ownership to another place -- might seem like distinct topics. Indeed, our borrow checker error messages often talk about them differently. But within the borrow checker , they are not nearly as separate. Roughly speaking, the borrow checker tracks the set of \"initialized places\" at any point in the source code. Assigning to a previously uninitialized local variable adds it to that set; moving from a local variable removes it from that set. Consider this example: fn foo() { let a: Vec; // a is not initialized yet a = vec![22]; // a is initialized here std::mem::drop(a); // a is moved here // a is no longer initialized here let l = a.len(); //~ ERROR\n} Here you can see that a starts off as uninitialized; once it is assigned, it becomes initialized. But when drop(a) is called, that moves a into the call, and hence it becomes uninitialized again.","breadcrumbs":"The borrow checker » Tracking moves and initialization » Initialization and moves","id":"1092","title":"Initialization and moves"},"1093":{"body":"To make it easier to peruse, this section is broken into a number of subsections: Move paths the move path concept that we use to track which local variables (or parts of local variables, in some cases) are initialized. TODO Rest not yet written =)","breadcrumbs":"The borrow checker » Tracking moves and initialization » Subsections","id":"1093","title":"Subsections"},"1094":{"body":"Move path indices Building move paths Illegal move paths Looking up a move-path Cross-references In reality, it's not enough to track initialization at the granularity of local variables. Rust also allows us to do moves and initialization at the field granularity: fn foo() { let a: (Vec, Vec) = (vec![22], vec![44]); // a.0 and a.1 are both initialized let b = a.0; // moves a.0 // a.0 is not initialized, but a.1 still is let c = a.0; // ERROR let d = a.1; // OK\n} To handle this, we track initialization at the granularity of a move path . A MovePath represents some location that the user can initialize, move, etc. So e.g. there is a move-path representing the local variable a, and there is a move-path representing a.0. Move paths roughly correspond to the concept of a Place from MIR, but they are indexed in ways that enable us to do move analysis more efficiently.","breadcrumbs":"The borrow checker » Tracking moves and initialization » Move paths » Move paths","id":"1094","title":"Move paths"},"1095":{"body":"Although there is a MovePath data structure, they are never referenced directly. Instead, all the code passes around indices of type MovePathIndex . If you need to get information about a move path, you use this index with the move_paths field of the MoveData . For example, to convert a MovePathIndex mpi into a MIR Place , you might access the MovePath::place field like so: move_data.move_paths[mpi].place","breadcrumbs":"The borrow checker » Tracking moves and initialization » Move paths » Move path indices","id":"1095","title":"Move path indices"},"1096":{"body":"One of the first things we do in the MIR borrow check is to construct the set of move paths. This is done as part of the MoveData::gather_moves function. This function uses a MIR visitor called MoveDataBuilder to walk the MIR and look at how each Place within is accessed. For each such Place , it constructs a corresponding MovePathIndex . It also records when/where that particular move path is moved/initialized, but we'll get to that in a later section.","breadcrumbs":"The borrow checker » Tracking moves and initialization » Move paths » Building move paths","id":"1096","title":"Building move paths"},"1097":{"body":"We don't actually create a move-path for every Place that gets used. In particular, if it is illegal to move from a Place , then there is no need for a MovePathIndex . Some examples: You cannot move from a static variable, so we do not create a MovePathIndex for static variables. You cannot move an individual element of an array, so if we have e.g. foo: [String; 3], there would be no move-path for foo[1]. You cannot move from inside of a borrowed reference, so if we have e.g. foo: &String, there would be no move-path for *foo. These rules are enforced by the move_path_for function, which converts a Place into a MovePathIndex -- in error cases like those just discussed, the function returns an Err. This in turn means we don't have to bother tracking whether those places are initialized (which lowers overhead).","breadcrumbs":"The borrow checker » Tracking moves and initialization » Move paths » Illegal move paths","id":"1097","title":"Illegal move paths"},"1098":{"body":"If you have a Place and you would like to convert it to a MovePathIndex , you can do that using the MovePathLookup structure found in the rev_lookup field of MoveData . There are two different methods: find_local , which takes a mir::Local representing a local variable. This is the easier method, because we always create a MovePathIndex for every local variable. find , which takes an arbitrary Place . This method is a bit more annoying to use, precisely because we don't have a MovePathIndex for every Place (as we just discussed in the \"illegal move paths\" section). Therefore, find returns a LookupResult indicating the closest path it was able to find that exists (e.g., for foo[1], it might return just the path for foo).","breadcrumbs":"The borrow checker » Tracking moves and initialization » Move paths » Looking up a move-path","id":"1098","title":"Looking up a move-path"},"1099":{"body":"As we noted above, move-paths are stored in a big vector and referenced via their MovePathIndex . However, within this vector, they are also structured into a tree. So for example if you have the MovePathIndex for a.b.c, you can go to its parent move-path a.b. You can also iterate over all children paths: so, from a.b, you might iterate to find the path a.b.c (here you are iterating just over the paths that are actually referenced in the source, not all possible paths that could have been referenced). These references are used for example in the find_in_move_path_or_its_descendants function, which determines whether a move-path (e.g., a.b) or any child of that move-path (e.g.,a.b.c) matches a given predicate.","breadcrumbs":"The borrow checker » Tracking moves and initialization » Move paths » Cross-references","id":"1099","title":"Cross-references"},"11":{"body":"See std-dev-guide .","breadcrumbs":"Getting Started » Contributing to std (standard library)","id":"11","title":"Contributing to std (standard library)"},"110":{"body":"./x test --stage 1 library/std By listing which test suites you want to run, you avoid having to run tests for components you did not change at all. Note that bors only runs the tests with the full stage 2 build; therefore, while the tests usually work fine with stage 1, there are some limitations.","breadcrumbs":"Testing the compiler » Running tests » Run tests on the standard library using a stage 1 compiler","id":"110","title":"Run tests on the standard library using a stage 1 compiler"},"1100":{"body":"A key component of the borrow check is the MIR type-check . This check walks the MIR and does a complete \"type check\" -- the same kind you might find in any other language. In the process of doing this type-check, we also uncover the region constraints that apply to the program. TODO -- elaborate further? Maybe? :)","breadcrumbs":"The borrow checker » MIR type checker » The MIR type-check","id":"1100","title":"The MIR type-check"},"1101":{"body":"At the start of MIR type-check, we replace all regions in the body with new unconstrained regions. However, this would cause us to accept the following program: fn foo<'a>(x: &'a u32) { let y: &'static u32 = x;\n} By erasing the lifetimes in the type of y we no longer know that it is supposed to be 'static, ignoring the intentions of the user. To deal with this we remember all places where the user explicitly mentioned a type during HIR type-check as CanonicalUserTypeAnnotations . There are two different annotations we care about: explicit type ascriptions, e.g. let y: &'static u32 results in UserType::Ty(&'static u32). explicit generic arguments, e.g. x.foo<&'a u32, Vec> results in UserType::TypeOf(foo_def_id, [&'a u32, Vec]). As we do not want the region inference from the HIR type-check to influence MIR typeck, we store the user type right after lowering it from the HIR. This means that it may still contain inference variables, which is why we are using canonical user type annotations. We replace all inference variables with existential bound variables instead. Something like let x: Vec<_> would therefore result in exists UserType::Ty(Vec). A pattern like let Foo(x): Foo<&'a u32> has a user type Foo<&'a u32> but the actual type of x should only be &'a u32. For this, we use a UserTypeProjection . In the MIR, we deal with user types in two slightly different ways. Given a MIR local corresponding to a variable in a pattern which has an explicit type annotation, we require the type of that local to be equal to the type of the UserTypeProjection . This is directly stored in the LocalDecl . We also constrain the type of scrutinee expressions, e.g. the type of x in let _: &'a u32 = x;. Here T_x only has to be a subtype of the user type, so we instead use StatementKind::AscribeUserType for that. Note that we do not directly use the user type as the MIR typechecker doesn't really deal with type and const inference variables. We instead store the final inferred_type from the HIR type-checker. During MIR typeck, we then replace its regions with new nll inference vars and relate it with the actual UserType to get the correct region constraints again. After the MIR type-check, all user type annotations get discarded, as they aren't needed anymore.","breadcrumbs":"The borrow checker » MIR type checker » User types","id":"1101","title":"User types"},"1102":{"body":"We generally require the type of locals to be well-formed whenever the local is used. This includes proving the where-bounds of the local and also requires all regions used by it to be live. The only exception to this is when implicitly dropping values when they go out of scope. This does not necessarily require the value to be live: fn main() { let x = vec![]; { let y = String::from(\"I am temporary\"); x.push(&y); } // `x` goes out of scope here, after the reference to `y` // is invalidated. This means that while dropping `x` its type // is not well-formed as it contain regions which are not live.\n} This is only sound if dropping the value does not try to access any dead region. We check this by requiring the type of the value to be drop-live. The requirements for which are computed in fn dropck_outlives. The rest of this section uses the following type definition for a type which requires its region parameter to be live: struct PrintOnDrop<'a>(&'a str);\nimpl<'a> Drop for PrintOnDrop<'_> { fn drop(&mut self) { println!(\"{}\", self.0); }\n}","breadcrumbs":"The borrow checker » Drop check » Drop Check","id":"1102","title":"Drop Check"},"1103":{"body":"At its core, a value of type T is dropped by executing its \"drop glue\". Drop glue is compiler generated and first calls ::drop and then recursively calls the drop glue of any recursively owned values. If T has an explicit Drop impl, call ::drop. Regardless of whether T implements Drop, recurse into all values owned by T: references, raw pointers, function pointers, function items, trait objects [1] , and scalars do not own anything. tuples, slices, and arrays consider their elements to be owned. For arrays of length zero we do not own any value of the element type. all fields (of all variants) of ADTs are considered owned. We consider all variants for enums. The exception here is ManuallyDrop which is not considered to own U. PhantomData also does not own anything. closures and generators own their captured upvars. Whether a type has drop glue is returned by fn Ty::needs_drop .","breadcrumbs":"The borrow checker » Drop check » How values are dropped","id":"1103","title":"How values are dropped"},"1104":{"body":"For types which do not implement Drop themselves, we can also partially move parts of the value before dropping the rest. In this case only the drop glue for the not-yet moved values is called, e.g. fn main() { let mut x = (PrintOnDrop(\"third\"), PrintOnDrop(\"first\")); drop(x.1); println!(\"second\")\n} During MIR building we assume that a local may get dropped whenever it goes out of scope as long as its type needs drop . Computing the exact drop glue for a variable happens after borrowck in the ElaborateDrops pass. This means that even if some part of the local have been dropped previously, dropck still requires this value to be live. This is the case even if we completely moved a local. fn main() { let mut x; { let temp = String::from(\"I am temporary\"); x = PrintOnDrop(&temp); drop(x); }\n} //~ ERROR `temp` does not live long enough. It should be possible to add some amount of drop elaboration before borrowck, allowing this example to compile. There is an unstable feature to move drop elaboration before const checking: #73255 . Such a feature gate does not exist for doing some drop elaboration before borrowck, although there's a relevant MCP . you can consider trait objects to have a builtin Drop implementation which directly uses the drop_in_place provided by the vtable. This Drop implementation requires all its generic parameters to be live.","breadcrumbs":"The borrow checker » Drop check » Partially dropping a local","id":"1104","title":"Partially dropping a local"},"1105":{"body":"There are two distinct \"liveness\" computations that we perform: a value v is use-live at location L if it may be \"used\" later; a use here is basically anything that is not a drop a value v is drop-live at location L if it maybe dropped later When things are use-live , their entire type must be valid at L. When they are drop-live , all regions that are required by dropck must be valid at L. The values dropped in the MIR are places . The constraints computed by dropck_outlives for a type closely match the generated drop glue for that type. Unlike drop glue, dropck_outlives cares about the types of owned values, not the values itself. For a value of type T if T has an explicit Drop, require all generic arguments to be live, unless they are marked with #[may_dangle] in which case they are fully ignored regardless of whether T has an explicit Drop, recurse into all types owned by T references, raw pointers, function pointers, function items, trait objects [1] , and scalars do not own anything. tuples, slices and arrays consider their element type to be owned. For arrays we currently do not check whether their length is zero . all fields (of all variants) of ADTs are considered owned. The exception here is ManuallyDrop which is not considered to own U. We consider PhantomData to own U . closures and generators own their captured upvars. The sections marked in bold are cases where dropck_outlives considers types to be owned which are ignored by Ty::needs_drop. We only rely on dropck_outlives if Ty::needs_drop for the containing local returned true.This means liveness requirements can change depending on whether a type is contained in a larger local. This is inconsistent, and should be fixed: an example for arrays and for PhantomData . [2] One possible way these inconsistencies can be fixed is by MIR building to be more pessimistic, probably by making Ty::needs_drop weaker, or alternatively, changing dropck_outlives to be more precise, requiring fewer regions to be live. This is the core assumption of #110288 and RFC 3417 .","breadcrumbs":"The borrow checker » Drop check » dropck_outlives","id":"1105","title":"dropck_outlives"},"1106":{"body":"Universal regions Region variables Constraints Inference Overview Example Some details The MIR-based region checking code is located in the rustc_mir::borrow_check module . The MIR-based region analysis consists of two major functions: replace_regions_in_mir , invoked first, has two jobs: First, it finds the set of regions that appear within the signature of the function (e.g., 'a in fn foo<'a>(&'a u32) { ... }). These are called the \"universal\" or \"free\" regions – in particular, they are the regions that appear free in the function body. Second, it replaces all the regions from the function body with fresh inference variables. This is because (presently) those regions are the results of lexical region inference and hence are not of much interest. The intention is that – eventually – they will be \"erased regions\" (i.e., no information at all), since we won't be doing lexical region inference at all. compute_regions , invoked second: this is given as argument the results of move analysis. It has the job of computing values for all the inference variables that replace_regions_in_mir introduced. To do that, it first runs the MIR type checker . This is basically a normal type-checker but specialized to MIR, which is much simpler than full Rust, of course. Running the MIR type checker will however create various constraints between region variables, indicating their potential values and relationships to one another. After this, we perform constraint propagation by creating a RegionInferenceContext and invoking its solve method. The NLL RFC also includes fairly thorough (and hopefully readable) coverage.","breadcrumbs":"The borrow checker » Region inference » Region inference (NLL)","id":"1106","title":"Region inference (NLL)"},"1107":{"body":"The UniversalRegions type represents a collection of universal regions corresponding to some MIR DefId. It is constructed in replace_regions_in_mir when we replace all regions with fresh inference variables. UniversalRegions contains indices for all the free regions in the given MIR along with any relationships that are known to hold between them (e.g. implied bounds, where clauses, etc.). For example, given the MIR for the following function: fn foo<'a>(x: &'a u32) { // ...\n} we would create a universal region for 'a and one for 'static. There may also be some complications for handling closures, but we will ignore those for the moment. TODO: write about how these regions are computed.","breadcrumbs":"The borrow checker » Region inference » Universal regions","id":"1107","title":"Universal regions"},"1108":{"body":"The value of a region can be thought of as a set . This set contains all points in the MIR where the region is valid along with any regions that are outlived by this region (e.g. if 'a: 'b, then end('b) is in the set for 'a); we call the domain of this set a RegionElement. In the code, the value for all regions is maintained in the rustc_borrowck::region_infer module . For each region we maintain a set storing what elements are present in its value (to make this efficient, we give each kind of element an index, the RegionElementIndex, and use sparse bitsets). The kinds of region elements are as follows: Each location in the MIR control-flow graph: a location is just the pair of a basic block and an index. This identifies the point on entry to the statement with that index (or the terminator, if the index is equal to statements.len()). There is an element end('a) for each universal region 'a, corresponding to some portion of the caller's (or caller's caller, etc) control-flow graph. Similarly, there is an element denoted end('static) corresponding to the remainder of program execution after this function returns. There is an element !1 for each placeholder region !1. This corresponds (intuitively) to some unknown set of other elements – for details on placeholders, see the section placeholders and universes .","breadcrumbs":"The borrow checker » Region inference » Region variables","id":"1108","title":"Region variables"},"1109":{"body":"Before we can infer the value of regions, we need to collect constraints on the regions. The full set of constraints is described in the section on constraint propagation , but the two most common sorts of constraints are: Outlives constraints. These are constraints that one region outlives another (e.g. 'a: 'b). Outlives constraints are generated by the MIR type checker . Liveness constraints. Each region needs to be live at points where it can be used.","breadcrumbs":"The borrow checker » Region inference » Constraints","id":"1109","title":"Constraints"},"111":{"body":"./x test --stage 2 You almost never need to do this; CI will run these tests for you.","breadcrumbs":"Testing the compiler » Running tests » Run all tests using a stage 2 compiler","id":"111","title":"Run all tests using a stage 2 compiler"},"1110":{"body":"So how do we compute the contents of a region? This process is called region inference . The high-level idea is pretty simple, but there are some details we need to take care of. Here is the high-level idea: we start off each region with the MIR locations we know must be in it from the liveness constraints. From there, we use all of the outlives constraints computed from the type checker to propagate the constraints: for each region 'a, if 'a: 'b, then we add all elements of 'b to 'a, including end('b). This all happens in propagate_constraints . Then, we will check for errors. We first check that type tests are satisfied by calling check_type_tests . This checks constraints like T: 'a. Second, we check that universal regions are not \"too big\". This is done by calling check_universal_regions . This checks that for each region 'a if 'a contains the element end('b), then we must already know that 'a: 'b holds (e.g. from a where clause). If we don't already know this, that is an error... well, almost. There is some special handling for closures that we will discuss later.","breadcrumbs":"The borrow checker » Region inference » Inference Overview","id":"1110","title":"Inference Overview"},"1111":{"body":"Consider the following example: fn foo<'a, 'b>(x: &'a usize) -> &'b usize { x\n} Clearly, this should not compile because we don't know if 'a outlives 'b (if it doesn't then the return value could be a dangling reference). Let's back up a bit. We need to introduce some free inference variables (as is done in replace_regions_in_mir ). This example doesn't use the exact regions produced, but it (hopefully) is enough to get the idea across. fn foo<'a, 'b>(x: &'a /* '#1 */ usize) -> &'b /* '#3 */ usize { x // '#2, location L1\n} Some notation: '#1, '#3, and '#2 represent the universal regions for the argument, return value, and the expression x, respectively. Additionally, I will call the location of the expression x L1. So now we can use the liveness constraints to get the following starting points: Region Contents '#1 '#2 L1 '#3 L1 Now we use the outlives constraints to expand each region. Specifically, we know that '#2: '#3 ... Region Contents '#1 L1 '#2 L1, end('#3) // add contents of '#3 and end('#3) '#3 L1 ... and '#1: '#2, so ... Region Contents '#1 L1, end('#2), end('#3) // add contents of '#2 and end('#2) '#2 L1, end('#3) '#3 L1 Now, we need to check that no regions were too big (we don't have any type tests to check in this case). Notice that '#1 now contains end('#3), but we have no where clause or implied bound to say that 'a: 'b... that's an error!","breadcrumbs":"The borrow checker » Region inference » Example","id":"1111","title":"Example"},"1112":{"body":"The RegionInferenceContext type contains all of the information needed to do inference, including the universal regions from replace_regions_in_mir and the constraints computed for each region. It is constructed just after we compute the liveness constraints. Here are some of the fields of the struct: constraints : contains all the outlives constraints. liveness_constraints : contains all the liveness constraints. universal_regions : contains the UniversalRegions returned by replace_regions_in_mir . universal_region_relations : contains relations known to be true about universal regions. For example, if we have a where clause that 'a: 'b, that relation is assumed to be true while borrow checking the implementation (it is checked at the caller), so universal_region_relations would contain 'a: 'b. type_tests : contains some constraints on types that we must check after inference (e.g. T: 'a). closure_bounds_mapping : used for propagating region constraints from closures back out to the creator of the closure. TODO: should we discuss any of the others fields? What about the SCCs? Ok, now that we have constructed a RegionInferenceContext, we can do inference. This is done by calling the solve method on the context. This is where we call propagate_constraints and then check the resulting type tests and universal regions, as discussed above.","breadcrumbs":"The borrow checker » Region inference » Some details","id":"1112","title":"Some details"},"1113":{"body":"Notation and high-level concepts Liveness constraints Outlives constraints The outlives constraint graph and SCCs Applying liveness constraints to SCCs Applying outlives constraints The main work of the region inference is constraint propagation , which is done in the propagate_constraints function. There are three sorts of constraints that are used in NLL, and we'll explain how propagate_constraints works by \"layering\" those sorts of constraints on one at a time (each of them is fairly independent from the others): liveness constraints (R live at E), which arise from liveness; outlives constraints (R1: R2), which arise from subtyping; member constraints (member R_m of [R_c...]), which arise from impl Trait. In this chapter, we'll explain the \"heart\" of constraint propagation, covering both liveness and outlives constraints.","breadcrumbs":"The borrow checker » Region inference » Constraint propagation » Constraint propagation","id":"1113","title":"Constraint propagation"},"1114":{"body":"Conceptually, region inference is a \"fixed-point\" computation. It is given some set of constraints {C} and it computes a set of values Values: R -> {E} that maps each region R to a set of elements {E} (see here for more notes on region elements): Initially, each region is mapped to an empty set, so Values(R) = {} for all regions R. Next, we process the constraints repeatedly until a fixed-point is reached: For each constraint C: Update Values as needed to satisfy the constraint As a simple example, if we have a liveness constraint R live at E, then we can apply Values(R) = Values(R) union {E} to make the constraint be satisfied. Similarly, if we have an outlives constraints R1: R2, we can apply Values(R1) = Values(R1) union Values(R2). (Member constraints are more complex and we discuss them in this section .) In practice, however, we are a bit more clever. Instead of applying the constraints in a loop, we can analyze the constraints and figure out the correct order to apply them, so that we only have to apply each constraint once in order to find the final result. Similarly, in the implementation, the Values set is stored in the scc_values field, but they are indexed not by a region but by a strongly connected component (SCC). SCCs are an optimization that avoids a lot of redundant storage and computation. They are explained in the section on outlives constraints.","breadcrumbs":"The borrow checker » Region inference » Constraint propagation » Notation and high-level concepts","id":"1114","title":"Notation and high-level concepts"},"1115":{"body":"A liveness constraint arises when some variable whose type includes a region R is live at some point P. This simply means that the value of R must include the point P. Liveness constraints are computed by the MIR type checker. A liveness constraint R live at E is satisfied if E is a member of Values(R). So to \"apply\" such a constraint to Values, we just have to compute Values(R) = Values(R) union {E}. The liveness values are computed in the type-check and passed to the region inference upon creation in the liveness_constraints argument. These are not represented as individual constraints like R live at E though; instead, we store a (sparse) bitset per region variable (of type LivenessValues ). This way we only need a single bit for each liveness constraint. One thing that is worth mentioning: All lifetime parameters are always considered to be live over the entire function body. This is because they correspond to some portion of the caller's execution, and that execution clearly includes the time spent in this function, since the caller is waiting for us to return.","breadcrumbs":"The borrow checker » Region inference » Constraint propagation » Liveness constraints","id":"1115","title":"Liveness constraints"},"1116":{"body":"An outlives constraint 'a: 'b indicates that the value of 'a must be a superset of the value of 'b. That is, an outlives constraint R1: R2 is satisfied if Values(R1) is a superset of Values(R2). So to \"apply\" such a constraint to Values, we just have to compute Values(R1) = Values(R1) union Values(R2). One observation that follows from this is that if you have R1: R2 and R2: R1, then R1 = R2 must be true. Similarly, if you have: R1: R2\nR2: R3\nR3: R4\nR4: R1 then R1 = R2 = R3 = R4 follows. We take advantage of this to make things much faster, as described shortly. In the code, the set of outlives constraints is given to the region inference context on creation in a parameter of type OutlivesConstraintSet . The constraint set is basically just a list of 'a: 'b constraints.","breadcrumbs":"The borrow checker » Region inference » Constraint propagation » Outlives constraints","id":"1116","title":"Outlives constraints"},"1117":{"body":"In order to work more efficiently with outlives constraints, they are converted into the form of a graph , where the nodes of the graph are region variables ('a, 'b) and each constraint 'a: 'b induces an edge 'a -> 'b. This conversion happens in the RegionInferenceContext::new function that creates the inference context. When using a graph representation, we can detect regions that must be equal by looking for cycles. That is, if you have a constraint like 'a: 'b\n'b: 'c\n'c: 'd\n'd: 'a then this will correspond to a cycle in the graph containing the elements 'a...'d. Therefore, one of the first things that we do in propagating region values is to compute the strongly connected components (SCCs) in the constraint graph. The result is stored in the constraint_sccs field. You can then easily find the SCC that a region r is a part of by invoking constraint_sccs.scc(r). Working in terms of SCCs allows us to be more efficient: if we have a set of regions 'a...'d that are part of a single SCC, we don't have to compute/store their values separately. We can just store one value for the SCC , since they must all be equal. If you look over the region inference code, you will see that a number of fields are defined in terms of SCCs. For example, the scc_values field stores the values of each SCC. To get the value of a specific region 'a then, we first figure out the SCC that the region is a part of, and then find the value of that SCC. When we compute SCCs, we not only figure out which regions are a member of each SCC, we also figure out the edges between them. So for example consider this set of outlives constraints: 'a: 'b\n'b: 'a 'a: 'c 'c: 'd\n'd: 'c Here we have two SCCs: S0 contains 'a and 'b, and S1 contains 'c and 'd. But these SCCs are not independent: because 'a: 'c, that means that S0: S1 as well. That is -- the value of S0 must be a superset of the value of S1. One crucial thing is that this graph of SCCs is always a DAG -- that is, it never has cycles. This is because all the cycles have been removed to form the SCCs themselves.","breadcrumbs":"The borrow checker » Region inference » Constraint propagation » The outlives constraint graph and SCCs","id":"1117","title":"The outlives constraint graph and SCCs"},"1118":{"body":"The liveness constraints that come in from the type-checker are expressed in terms of regions -- that is, we have a map like Liveness: R -> {E}. But we want our final result to be expressed in terms of SCCs -- we can integrate these liveness constraints very easily just by taking the union: for each region R: let S be the SCC that contains R Values(S) = Values(S) union Liveness(R) In the region inferencer, this step is done in RegionInferenceContext::new .","breadcrumbs":"The borrow checker » Region inference » Constraint propagation » Applying liveness constraints to SCCs","id":"1118","title":"Applying liveness constraints to SCCs"},"1119":{"body":"Once we have computed the DAG of SCCs, we use that to structure out entire computation. If we have an edge S1 -> S2 between two SCCs, that means that Values(S1) >= Values(S2) must hold. So, to compute the value of S1, we first compute the values of each successor S2. Then we simply union all of those values together. To use a quasi-iterator-like notation: Values(S1) = s1.successors() .map(|s2| Values(s2)) .union() In the code, this work starts in the propagate_constraints function, which iterates over all the SCCs. For each SCC S1, we compute its value by first computing the value of its successors. Since SCCs form a DAG, we don't have to be concerned about cycles, though we do need to keep a set around to track whether we have already processed a given SCC or not. For each successor S2, once we have computed S2's value, we can union those elements into the value for S1. (Although we have to be careful in this process to properly handle higher-ranked placeholders . Note that the value for S1 already contains the liveness constraints, since they were added in RegionInferenceContext::new . Once that process is done, we now have the \"minimal value\" for S1, taking into account all of the liveness and outlives constraints. However, in order to complete the process, we must also consider member constraints , which are described in a later section .","breadcrumbs":"The borrow checker » Region inference » Constraint propagation » Applying outlives constraints","id":"1119","title":"Applying outlives constraints"},"112":{"body":"You may want to run unit tests on a specific file with following: ./x test compiler/rustc_data_structures/src/thin_vec/tests.rs But unfortunately, it's impossible. You should invoke the following instead: ./x test compiler/rustc_data_structures/ --test-args thin_vec","breadcrumbs":"Testing the compiler » Running tests » Run unit tests on the compiler/library","id":"112","title":"Run unit tests on the compiler/library"},"1120":{"body":"Universal regions and their relationships to one another Everything is a region variable Universal lifetimes as the elements of a region's value The \"value\" of a universal region Liveness and universal regions Propagating outlives constraints for universal regions Detecting errors \"Universal regions\" is the name that the code uses to refer to \"named lifetimes\" -- e.g., lifetime parameters and 'static. The name derives from the fact that such lifetimes are \"universally quantified\" (i.e., we must make sure the code is true for all values of those lifetimes). It is worth spending a bit of discussing how lifetime parameters are handled during region inference. Consider this example: fn foo<'a, 'b>(x: &'a u32, y: &'b u32) -> &'b u32 { x\n} This example is intended not to compile, because we are returning x, which has type &'a u32, but our signature promises that we will return a &'b u32 value. But how are lifetimes like 'a and 'b integrated into region inference, and how this error wind up being detected?","breadcrumbs":"The borrow checker » Region inference » Lifetime parameters » Universal regions","id":"1120","title":"Universal regions"},"1121":{"body":"Early on in region inference, one of the first things we do is to construct a UniversalRegions struct. This struct tracks the various universal regions in scope on a particular function. We also create a UniversalRegionRelations struct, which tracks their relationships to one another. So if you have e.g. where 'a: 'b, then the UniversalRegionRelations struct would track that 'a: 'b is known to hold (which could be tested with the outlives function).","breadcrumbs":"The borrow checker » Region inference » Lifetime parameters » Universal regions and their relationships to one another","id":"1121","title":"Universal regions and their relationships to one another"},"1122":{"body":"One important aspect of how NLL region inference works is that all lifetimes are represented as numbered variables. This means that the only variant of region_kind::RegionKind that we use is the ReVar variant. These region variables are broken into two major categories, based on their index: 0..N: universal regions -- the ones we are discussing here. In this case, the code must be correct with respect to any value of those variables that meets the declared relationships. N..M: existential regions -- inference variables where the region inferencer is tasked with finding some suitable value. In fact, the universal regions can be further subdivided based on where they were brought into scope (see the RegionClassification type). These subdivisions are not important for the topics discussed here, but become important when we consider closure constraint propagation , so we discuss them there.","breadcrumbs":"The borrow checker » Region inference » Lifetime parameters » Everything is a region variable","id":"1122","title":"Everything is a region variable"},"1123":{"body":"As noted previously, the value that we infer for each region is a set {E}. The elements of this set can be points in the control-flow graph, but they can also be an element end('a) corresponding to each universal lifetime 'a. If the value for some region R0 includes end('a), then this implies that R0 must extend until the end of 'a in the caller.","breadcrumbs":"The borrow checker » Region inference » Lifetime parameters » Universal lifetimes as the elements of a region's value","id":"1123","title":"Universal lifetimes as the elements of a region's value"},"1124":{"body":"During region inference, we compute a value for each universal region in the same way as we compute values for other regions. This value represents, effectively, the lower bound on that universal region -- the things that it must outlive. We now describe how we use this value to check for errors.","breadcrumbs":"The borrow checker » Region inference » Lifetime parameters » The \"value\" of a universal region","id":"1124","title":"The \"value\" of a universal region"},"1125":{"body":"All universal regions have an initial liveness constraint that includes the entire function body. This is because lifetime parameters are defined in the caller and must include the entirety of the function call that invokes this particular function. In addition, each universal region 'a includes itself (that is, end('a)) in its liveness constraint (i.e., 'a must extend until the end of itself). In the code, these liveness constraints are setup in init_free_and_bound_regions .","breadcrumbs":"The borrow checker » Region inference » Lifetime parameters » Liveness and universal regions","id":"1125","title":"Liveness and universal regions"},"1126":{"body":"So, consider the first example of this section: fn foo<'a, 'b>(x: &'a u32, y: &'b u32) -> &'b u32 { x\n} Here, returning x requires that &'a u32 <: &'b u32, which gives rise to an outlives constraint 'a: 'b. Combined with our default liveness constraints we get: 'a live at {B, end('a)} // B represents the \"function body\"\n'b live at {B, end('b)}\n'a: 'b When we process the 'a: 'b constraint, therefore, we will add end('b) into the value for 'a, resulting in a final value of {B, end('a), end('b)}.","breadcrumbs":"The borrow checker » Region inference » Lifetime parameters » Propagating outlives constraints for universal regions","id":"1126","title":"Propagating outlives constraints for universal regions"},"1127":{"body":"Once we have finished constraint propagation, we then enforce a constraint that if some universal region 'a includes an element end('b), then 'a: 'b must be declared in the function's bounds. If not, as in our example, that is an error. This check is done in the check_universal_regions function, which simply iterates over all universal regions, inspects their final value, and tests against the declared UniversalRegionRelations .","breadcrumbs":"The borrow checker » Region inference » Lifetime parameters » Detecting errors","id":"1127","title":"Detecting errors"},"1128":{"body":"Detailed example Choices are always lifetime parameters Applying member constraints Lower bounds Upper bounds Minimal choice Collecting upper bounds in the implementation A member constraint 'm member of ['c_1..'c_N] expresses that the region 'm must be equal to some choice regions 'c_i (for some i). These constraints cannot be expressed by users, but they arise from impl Trait due to its lifetime capture rules. Consider a function such as the following: fn make(a: &'a u32, b: &'b u32) -> impl Trait<'a, 'b> { .. } Here, the true return type (often called the \"hidden type\") is only permitted to capture the lifetimes 'a or 'b. You can kind of see this more clearly by desugaring that impl Trait return type into its more explicit form: type MakeReturn<'x, 'y> = impl Trait<'x, 'y>;\nfn make(a: &'a u32, b: &'b u32) -> MakeReturn<'a, 'b> { .. } Here, the idea is that the hidden type must be some type that could have been written in place of the impl Trait<'x, 'y> -- but clearly such a type can only reference the regions 'x or 'y (or 'static!), as those are the only names in scope. This limitation is then translated into a restriction to only access 'a or 'b because we are returning MakeReturn<'a, 'b>, where 'x and 'y have been replaced with 'a and 'b respectively.","breadcrumbs":"The borrow checker » Region inference » Member constraints » Member constraints","id":"1128","title":"Member constraints"},"1129":{"body":"To help us explain member constraints in more detail, let's spell out the make example in a bit more detail. First off, let's assume that you have some dummy trait: trait Trait<'a, 'b> { }\nimpl Trait<'_, '_> for T { } and this is the make function (in desugared form): type MakeReturn<'x, 'y> = impl Trait<'x, 'y>;\nfn make(a: &'a u32, b: &'b u32) -> MakeReturn<'a, 'b> { (a, b)\n} What happens in this case is that the return type will be (&'0 u32, &'1 u32), where '0 and '1 are fresh region variables. We will have the following region constraints: '0 live at {L}\n'1 live at {L}\n'a: '0\n'b: '1\n'0 member of ['a, 'b, 'static]\n'1 member of ['a, 'b, 'static] Here the \"liveness set\" {L} corresponds to that subset of the body where '0 and '1 are live -- basically the point from where the return tuple is constructed to where it is returned (in fact, '0 and '1 might have slightly different liveness sets, but that's not very interesting to the point we are illustrating here). The 'a: '0 and 'b: '1 constraints arise from subtyping. When we construct the (a, b) value, it will be assigned type (&'0 u32, &'1 u32) -- the region variables reflect that the lifetimes of these references could be made smaller. For this value to be created from a and b, however, we do require that: (&'a u32, &'b u32) <: (&'0 u32, &'1 u32) which means in turn that &'a u32 <: &'0 u32 and hence that 'a: '0 (and similarly that &'b u32 <: &'1 u32, 'b: '1). Note that if we ignore member constraints, the value of '0 would be inferred to some subset of the function body (from the liveness constraints, which we did not write explicitly). It would never become 'a, because there is no need for it too -- we have a constraint that 'a: '0, but that just puts a \"cap\" on how large '0 can grow to become. Since we compute the minimal value that we can, we are happy to leave '0 as being just equal to the liveness set. This is where member constraints come in.","breadcrumbs":"The borrow checker » Region inference » Member constraints » Detailed example","id":"1129","title":"Detailed example"},"113":{"body":"Another common thing that people want to do is to run an individual test , often the test they are trying to fix. As mentioned earlier, you may pass the full file path to achieve this, or alternatively one may invoke x with the --test-args option: ./x test tests/ui --test-args issue-1234 Under the hood, the test runner invokes the standard Rust test runner (the same one you get with #[test]), so this command would wind up filtering for tests that include \"issue-1234\" in the name. Thus, --test-args is a good way to run a collection of related tests.","breadcrumbs":"Testing the compiler » Running tests » Running an individual test","id":"113","title":"Running an individual test"},"1130":{"body":"At present, the \"choice\" regions from a member constraint are always lifetime parameters from the current function. As of October 2021, this falls out from the placement of impl Trait, though in the future it may not be the case. We take some advantage of this fact, as it simplifies the current code. In particular, we don't have to consider a case like '0 member of ['1, 'static], in which the value of both '0 and '1 are being inferred and hence changing. See rust-lang/rust#61773 for more information.","breadcrumbs":"The borrow checker » Region inference » Member constraints » Choices are always lifetime parameters","id":"1130","title":"Choices are always lifetime parameters"},"1131":{"body":"Member constraints are a bit more complex than other forms of constraints. This is because they have a \"or\" quality to them -- that is, they describe multiple choices that we must select from. E.g., in our example constraint '0 member of ['a, 'b, 'static], it might be that '0 is equal to 'a, 'b, or 'static. How can we pick the correct one? What we currently do is to look for a minimal choice -- if we find one, then we will grow '0 to be equal to that minimal choice. To find that minimal choice, we take two factors into consideration: lower and upper bounds.","breadcrumbs":"The borrow checker » Region inference » Member constraints » Applying member constraints","id":"1131","title":"Applying member constraints"},"1132":{"body":"The lower bounds are those lifetimes that '0 must outlive -- i.e., that '0 must be larger than. In fact, when it comes time to apply member constraints, we've already computed the lower bounds of '0 because we computed its minimal value (or at least, the lower bounds considering everything but member constraints). Let LB be the current value of '0. We know then that '0: LB must hold, whatever the final value of '0 is. Therefore, we can rule out any choice 'choice where 'choice: LB does not hold. Unfortunately, in our example, this is not very helpful. The lower bound for '0 will just be the liveness set {L}, and we know that all the lifetime parameters outlive that set. So we are left with the same set of choices here. (But in other examples, particularly those with different variance, lower bound constraints may be relevant.)","breadcrumbs":"The borrow checker » Region inference » Member constraints » Lower bounds","id":"1132","title":"Lower bounds"},"1133":{"body":"The upper bounds are those lifetimes that must outlive '0 -- i.e., that '0 must be smaller than. In our example, this would be 'a, because we have the constraint that 'a: '0. In more complex examples, the chain may be more indirect. We can use upper bounds to rule out members in a very similar way to lower bounds. If UB is some upper bound, then we know that UB: '0 must hold, so we can rule out any choice 'choice where UB: 'choice does not hold. In our example, we would be able to reduce our choice set from ['a, 'b, 'static] to just ['a]. This is because '0 has an upper bound of 'a, and neither 'a: 'b nor 'a: 'static is known to hold. (For notes on how we collect upper bounds in the implementation, see the section below .)","breadcrumbs":"The borrow checker » Region inference » Member constraints » Upper bounds","id":"1133","title":"Upper bounds"},"1134":{"body":"After applying lower and upper bounds, we can still sometimes have multiple possibilities. For example, imagine a variant of our example using types with the opposite variance. In that case, we would have the constraint '0: 'a instead of 'a: '0. Hence the current value of '0 would be {L, 'a}. Using this as a lower bound, we would be able to narrow down the member choices to ['a, 'static] because 'b: 'a is not known to hold (but 'a: 'a and 'static: 'a do hold). We would not have any upper bounds, so that would be our final set of choices. In that case, we apply the minimal choice rule -- basically, if one of our choices if smaller than the others, we can use that. In this case, we would opt for 'a (and not 'static). This choice is consistent with the general 'flow' of region propagation, which always aims to compute a minimal value for the region being inferred. However, it is somewhat arbitrary.","breadcrumbs":"The borrow checker » Region inference » Member constraints » Minimal choice","id":"1134","title":"Minimal choice"},"1135":{"body":"In practice, computing upper bounds is a bit inconvenient, because our data structures are setup for the opposite. What we do is to compute the reverse SCC graph (we do this lazily and cache the result) -- that is, a graph where 'a: 'b induces an edge SCC('b) -> SCC('a). Like the normal SCC graph, this is a DAG. We can then do a depth-first search starting from SCC('0) in this graph. This will take us to all the SCCs that must outlive '0. One wrinkle is that, as we walk the \"upper bound\" SCCs, their values will not yet have been fully computed. However, we have already applied their liveness constraints, so we have some information about their value. In particular, for any regions representing lifetime parameters, their value will contain themselves (i.e., the initial value for 'a includes 'a and the value for 'b contains 'b). So we can collect all of the lifetime parameters that are reachable, which is precisely what we are interested in.","breadcrumbs":"The borrow checker » Region inference » Member constraints » Collecting upper bounds in the implementation","id":"1135","title":"Collecting upper bounds in the implementation"},"1136":{"body":"Subtyping and Placeholders What is a universe? Universes and placeholder region elements Placeholders and outlives constraints Extending the \"universal regions\" check Back to our example Another example Final example From time to time we have to reason about regions that we can't concretely know. For example, consider this program: // A function that needs a static reference\nfn foo(x: &'static u32) { } fn bar(f: for<'a> fn(&'a u32)) { // ^^^^^^^^^^^^^^^^^^^ a function that can accept **any** reference let x = 22; f(&x);\n} fn main() { bar(foo);\n} This program ought not to type-check: foo needs a static reference for its argument, and bar wants to be given a function that accepts any reference (so it can call it with something on its stack, for example). But how do we reject it and why ?","breadcrumbs":"The borrow checker » Region inference » Placeholders and universes » Placeholders and universes","id":"1136","title":"Placeholders and universes"},"1137":{"body":"When we type-check main, and in particular the call bar(foo), we are going to wind up with a subtyping relationship like this one: fn(&'static u32) <: for<'a> fn(&'a u32)\n---------------- -------------------\nthe type of `foo` the type `bar` expects We handle this sort of subtyping by taking the variables that are bound in the supertype and replacing them with universally quantified representatives, denoted like !1 here. We call these regions \"placeholder regions\" – they represent, basically, \"some unknown region\". Once we've done that replacement, we have the following relation: fn(&'static u32) <: fn(&'!1 u32) The key idea here is that this unknown region '!1 is not related to any other regions. So if we can prove that the subtyping relationship is true for '!1, then it ought to be true for any region, which is what we wanted. So let's work through what happens next. To check if two functions are subtypes, we check if their arguments have the desired relationship (fn arguments are contravariant , so we swap the left and right here): &'!1 u32 <: &'static u32 According to the basic subtyping rules for a reference, this will be true if '!1: 'static. That is – if \"some unknown region !1\" outlives 'static. Now, this might be true – after all, '!1 could be 'static – but we don't know that it's true. So this should yield up an error (eventually).","breadcrumbs":"The borrow checker » Region inference » Placeholders and universes » Subtyping and Placeholders","id":"1137","title":"Subtyping and Placeholders"},"1138":{"body":"In the previous section, we introduced the idea of a placeholder region, and we denoted it !1. We call this number 1 the universe index . The idea of a \"universe\" is that it is a set of names that are in scope within some type or at some point. Universes are formed into a tree, where each child extends its parents with some new names. So the root universe conceptually contains global names, such as the lifetime 'static or the type i32. In the compiler, we also put generic type parameters into this root universe (in this sense, there is not just one root universe, but one per item). So consider this function bar: struct Foo { } fn bar<'a, T>(t: &'a T) { ...\n} Here, the root universe would consist of the lifetimes 'static and 'a. In fact, although we're focused on lifetimes here, we can apply the same concept to types, in which case the types Foo and T would be in the root universe (along with other global types, like i32). Basically, the root universe contains all the names that appear free in the body of bar. Now let's extend bar a bit by adding a variable x: fn bar<'a, T>(t: &'a T) { let x: for<'b> fn(&'b u32) = ...;\n} Here, the name 'b is not part of the root universe. Instead, when we \"enter\" into this for<'b> (e.g., by replacing it with a placeholder), we will create a child universe of the root, let's call it U1: U0 (root universe)\n│\n└─ U1 (child universe) The idea is that this child universe U1 extends the root universe U0 with a new name, which we are identifying by its universe number: !1. Now let's extend bar a bit by adding one more variable, y: fn bar<'a, T>(t: &'a T) { let x: for<'b> fn(&'b u32) = ...; let y: for<'c> fn(&'c u32) = ...;\n} When we enter this type, we will again create a new universe, which we'll call U2. Its parent will be the root universe, and U1 will be its sibling: U0 (root universe)\n│\n├─ U1 (child universe)\n│\n└─ U2 (child universe) This implies that, while in U2, we can name things from U0 or U2, but not U1. Giving existential variables a universe. Now that we have this notion of universes, we can use it to extend our type-checker and things to prevent illegal names from leaking out. The idea is that we give each inference (existential) variable – whether it be a type or a lifetime – a universe. That variable's value can then only reference names visible from that universe. So for example if a lifetime variable is created in U0, then it cannot be assigned a value of !1 or !2, because those names are not visible from the universe U0. Representing universes with just a counter. You might be surprised to see that the compiler doesn't keep track of a full tree of universes. Instead, it just keeps a counter – and, to determine if one universe can see another one, it just checks if the index is greater. For example, U2 can see U0 because 2 >= 0. But U0 cannot see U2, because 0 >= 2 is false. How can we get away with this? Doesn't this mean that we would allow U2 to also see U1? The answer is that, yes, we would, if that question ever arose . But because of the structure of our type checker etc, there is no way for that to happen. In order for something happening in the universe U1 to \"communicate\" with something happening in U2, they would have to have a shared inference variable X in common. And because everything in U1 is scoped to just U1 and its children, that inference variable X would have to be in U0. And since X is in U0, it cannot name anything from U1 (or U2). This is perhaps easiest to see by using a kind of generic \"logic\" example: exists { forall { ... /* Y is in U1 ... */ } forall { ... /* Z is in U2 ... */ }\n} Here, the only way for the two foralls to interact would be through X, but neither Y nor Z are in scope when X is declared, so its value cannot reference either of them.","breadcrumbs":"The borrow checker » Region inference » Placeholders and universes » What is a universe?","id":"1138","title":"What is a universe?"},"1139":{"body":"But where does that error come from? The way it happens is like this. When we are constructing the region inference context, we can tell from the type inference context how many placeholder variables exist (the InferCtxt has an internal counter). For each of those, we create a corresponding universal region variable !n and a \"region element\" placeholder(n). This corresponds to \"some unknown set of other elements\". The value of !n is {placeholder(n)}. At the same time, we also give each existential variable a universe (also taken from the InferCtxt). This universe determines which placeholder elements may appear in its value: For example, a variable in universe U3 may name placeholder(1), placeholder(2), and placeholder(3), but not placeholder(4). Note that the universe of an inference variable controls what region elements can appear in its value; it does not say region elements will appear.","breadcrumbs":"The borrow checker » Region inference » Placeholders and universes » Universes and placeholder region elements","id":"1139","title":"Universes and placeholder region elements"},"114":{"body":"It can sometimes be useful to run some tests with specific compiler arguments, without using RUSTFLAGS (during development of unstable features, with -Z flags, for example). This can be done with ./x test's --compiletest-rustc-args option, to pass additional arguments to the compiler when building the tests.","breadcrumbs":"Testing the compiler » Running tests » Passing arguments to rustc when running tests","id":"114","title":"Passing arguments to rustc when running tests"},"1140":{"body":"In the region inference engine, outlives constraints have the form: V1: V2 @ P where V1 and V2 are region indices, and hence map to some region variable (which may be universally or existentially quantified). The P here is a \"point\" in the control-flow graph; it's not important for this section. This variable will have a universe, so let's call those universes U(V1) and U(V2) respectively. (Actually, the only one we are going to care about is U(V1).) When we encounter this constraint, the ordinary procedure is to start a DFS from P. We keep walking so long as the nodes we are walking are present in value(V2) and we add those nodes to value(V1). If we reach a return point, we add in any end(X) elements. That part remains unchanged. But then after that we want to iterate over the placeholder placeholder(x) elements in V2 (each of those must be visible to U(V2), but we should be able to just assume that is true, we don't have to check it). We have to ensure that value(V1) outlives each of those placeholder elements. Now there are two ways that could happen. First, if U(V1) can see the universe x (i.e., x <= U(V1)), then we can just add placeholder(x) to value(V1) and be done. But if not, then we have to approximate: we may not know what set of elements placeholder(x) represents, but we should be able to compute some sort of upper bound B for it – some region B that outlives placeholder(x). For now, we'll just use 'static for that (since it outlives everything) – in the future, we can sometimes be smarter here (and in fact we have code for doing this already in other contexts). Moreover, since 'static is in the root universe U0, we know that all variables can see it – so basically if we find that value(V2) contains placeholder(x) for some universe x that V1 can't see, then we force V1 to 'static.","breadcrumbs":"The borrow checker » Region inference » Placeholders and universes » Placeholders and outlives constraints","id":"1140","title":"Placeholders and outlives constraints"},"1141":{"body":"After all constraints have been propagated, the NLL region inference has one final check, where it goes over the values that wound up being computed for each universal region and checks that they did not get 'too large'. In our case, we will go through each placeholder region and check that it contains only the placeholder(u) element it is known to outlive. (Later, we might be able to know that there are relationships between two placeholder regions and take those into account, as we do for universal regions from the fn signature.) Put another way, the \"universal regions\" check can be considered to be checking constraints like: {placeholder(1)}: V1 where {placeholder(1)} is like a constant set, and V1 is the variable we made to represent the !1 region.","breadcrumbs":"The borrow checker » Region inference » Placeholders and universes » Extending the \"universal regions\" check","id":"1141","title":"Extending the \"universal regions\" check"},"1142":{"body":"OK, so far so good. Now let's walk through what would happen with our first example: fn(&'static u32) <: fn(&'!1 u32) @ P // this point P is not imp't here The region inference engine will create a region element domain like this: { CFG; end('static); placeholder(1) } --- ------------ ------- from the universe `!1` | 'static is always in scope all points in the CFG; not especially relevant here It will always create two universal variables, one representing 'static and one representing '!1. Let's call them Vs and V1. They will have initial values like so: Vs = { CFG; end('static) } // it is in U0, so can't name anything else\nV1 = { placeholder(1) } From the subtyping constraint above, we would have an outlives constraint like '!1: 'static @ P To process this, we would grow the value of V1 to include all of Vs: Vs = { CFG; end('static) }\nV1 = { CFG; end('static), placeholder(1) } At that point, constraint propagation is complete, because all the outlives relationships are satisfied. Then we would go to the \"check universal regions\" portion of the code, which would test that no universal region grew too large. In this case, V1 did grow too large – it is not known to outlive end('static), nor any of the CFG – so we would report an error.","breadcrumbs":"The borrow checker » Region inference » Placeholders and universes » Back to our example","id":"1142","title":"Back to our example"},"1143":{"body":"What about this subtyping relationship? for<'a> fn(&'a u32, &'a u32) <:\nfor<'b, 'c> fn(&'b u32, &'c u32) Here we would replace the bound region in the supertype with a placeholder, as before, yielding: for<'a> fn(&'a u32, &'a u32) <:\nfn(&'!1 u32, &'!2 u32) then we instantiate the variable on the left-hand side with an existential in universe U2, yielding the following (?n is a notation for an existential variable): fn(&'?3 u32, &'?3 u32) <:\nfn(&'!1 u32, &'!2 u32) Then we break this down further: &'!1 u32 <: &'?3 u32\n&'!2 u32 <: &'?3 u32 and even further, yield up our region constraints: '!1: '?3\n'!2: '?3 Note that, in this case, both '!1 and '!2 have to outlive the variable '?3, but the variable '?3 is not forced to outlive anything else. Therefore, it simply starts and ends as the empty set of elements, and hence the type-check succeeds here. (This should surprise you a little. It surprised me when I first realized it. We are saying that if we are a fn that needs both of its arguments to have the same region , we can accept being called with arguments with two distinct regions . That seems intuitively unsound. But in fact, it's fine, as I tried to explain in this issue on the Rust issue tracker long ago. The reason is that even if we get called with arguments of two distinct lifetimes, those two lifetimes have some intersection (the call itself), and that intersection can be our value of 'a that we use as the common lifetime of our arguments. -nmatsakis)","breadcrumbs":"The borrow checker » Region inference » Placeholders and universes » Another example","id":"1143","title":"Another example"},"1144":{"body":"Let's look at one last example. We'll extend the previous one to have a return type: for<'a> fn(&'a u32, &'a u32) -> &'a u32 <:\nfor<'b, 'c> fn(&'b u32, &'c u32) -> &'b u32 Despite seeming very similar to the previous example, this case is going to get an error. That's good: the problem is that we've gone from a fn that promises to return one of its two arguments, to a fn that is promising to return the first one. That is unsound. Let's see how it plays out. First, we replace the bound region in the supertype with a placeholder: for<'a> fn(&'a u32, &'a u32) -> &'a u32 <:\nfn(&'!1 u32, &'!2 u32) -> &'!1 u32 Then we instantiate the subtype with existentials (in U2): fn(&'?3 u32, &'?3 u32) -> &'?3 u32 <:\nfn(&'!1 u32, &'!2 u32) -> &'!1 u32 And now we create the subtyping relationships: &'!1 u32 <: &'?3 u32 // arg 1\n&'!2 u32 <: &'?3 u32 // arg 2\n&'?3 u32 <: &'!1 u32 // return type And finally the outlives relationships. Here, let V1, V2, and V3 be the variables we assign to !1, !2, and ?3 respectively: V1: V3\nV2: V3\nV3: V1 Those variables will have these initial values: V1 in U1 = {placeholder(1)}\nV2 in U2 = {placeholder(2)}\nV3 in U2 = {} Now because of the V3: V1 constraint, we have to add placeholder(1) into V3 (and indeed it is visible from V3), so we get: V3 in U2 = {placeholder(1)} then we have this constraint V2: V3, so we wind up having to enlarge V2 to include placeholder(1) (which it can also see): V2 in U2 = {placeholder(1), placeholder(2)} Now constraint propagation is done, but when we check the outlives relationships, we find that V2 includes this new element placeholder(1), so we report an error.","breadcrumbs":"The borrow checker » Region inference » Placeholders and universes » Final example","id":"1144","title":"Final example"},"1145":{"body":"When we are checking the type tests and universal regions, we may come across a constraint that we can't prove yet if we are in a closure body! However, the necessary constraints may actually hold (we just don't know it yet). Thus, if we are inside a closure, we just collect all the constraints we can't prove yet and return them. Later, when we are borrow check the MIR node that created the closure, we can also check that these constraints hold. At that time, if we can't prove they hold, we report an error.","breadcrumbs":"The borrow checker » Region inference » Closure constraints » Propagating closure constraints","id":"1145","title":"Propagating closure constraints"},"1146":{"body":"While borrow-checking a closure inside of RegionInferenceContext::solve we separately try to propagate type-outlives and region-outlives constraints to the parent if we're unable to prove them locally.","breadcrumbs":"The borrow checker » Region inference » Closure constraints » How this is implemented","id":"1146","title":"How this is implemented"},"1147":{"body":"If RegionInferenceContext::check_universal_regions fails to prove some outlives constraint 'longer_fr: 'shorter_fr, we try to propagate it in fn try_propagate_universal_region_error. Both these universal regions are either local to the closure or an external region. In case 'longer_fr is a local universal region, we search for the largest external region 'fr_minus which is outlived by 'longer_fr, i.e. 'longer_fr: 'fr_minus. In case there are multiple such regions, we pick the mutual_immediate_postdominator: the fixpoint of repeatedly computing the GLB of all GLBs, see TransitiveRelation::postdom_upper_bound for more details. If 'fr_minus exists we require it to outlive all non-local upper bounds of 'shorter_fr. There will always be at least one non-local upper bound 'static.","breadcrumbs":"The borrow checker » Region inference » Closure constraints » Region-outlive constraints","id":"1147","title":"Region-outlive constraints"},"1148":{"body":"Type-outlives constraints are proven in check_type_tests. This happens after computing the outlives graph, which is now immutable. For all type tests we fail to prove via fn eval_verify_bound inside of the closure we call try_promote_type_test. A TypeTest represents a type-outlives bound generic_kind: lower_bound together with a verify_bound. If the VerifyBound holds for the lower_bound, the constraint is satisfied. try_promote_type_test does not care about the verify_bound. It starts by calling fn try_promote_type_test_subject. This function takes the GenericKind and tries to transform it to a ClosureOutlivesSubject which is no longer references anything local to the closure. This is done by replacing all free regions in that type with either 'static or region parameters which are equal to that free region. This operation fails if the generic_kind contains a region which cannot be replaced. We then promote the lower_bound into the context of the caller. If the lower bound is equal to a placeholder, we replace it with 'static We then look at all universal regions uv which are required to be outlived by lower_bound, i.e. for which borrow checking added region constraints. For each of these we then emit a ClosureOutlivesRequirement for all non-local universal regions which are known to outlive uv. As we've already built the region graph of the closure at this point and separately check that it is consistent, we are also able to assume the outlive constraints uv: lower_bound here. So if we have a type-outlives bounds we can't prove, e.g. T: 'local_infer, we use the region graph to go to universal variables 'a with 'a: local_infer. In case 'a are local, we then use the assumed outlived constraints to go to non-local ones. We then store the list of promoted type tests in the BorrowCheckResults. We then apply them in while borrow-checking its parent in TypeChecker::prove_closure_bounds. TODO: explain how exactly that works :3","breadcrumbs":"The borrow checker » Region inference » Closure constraints » Type-outlive constraints","id":"1148","title":"Type-outlive constraints"},"1149":{"body":"TODO: we should discuss how to generate errors from the results of these analyses.","breadcrumbs":"The borrow checker » Region inference » Error reporting » Reporting region errors","id":"1149","title":"Reporting region errors"},"115":{"body":"If you have changed the compiler's output intentionally, or you are making a new test, you can pass --bless to the test subcommand. As an example, if some tests in tests/ui are failing, you can run this command: ./x test tests/ui --bless It automatically adjusts the .stderr, .stdout, or .fixed files of all test/ui tests. Of course you can also target just specific tests with the --test-args your_test_name flag, just like when running the tests without the --bless flag.","breadcrumbs":"Testing the compiler » Running tests » Editing and updating the reference files","id":"115","title":"Editing and updating the reference files"},"1150":{"body":"Two-phase borrows are a more permissive version of mutable borrows that allow nested method calls such as vec.push(vec.len()). Such borrows first act as shared borrows in a \"reservation\" phase and can later be \"activated\" into a full mutable borrow. Only certain implicit mutable borrows can be two-phase, any &mut or ref mut in the source code is never a two-phase borrow. The cases where we generate a two-phase borrow are: The autoref borrow when calling a method with a mutable reference receiver. A mutable reborrow in function arguments. The implicit mutable borrow in an overloaded compound assignment operator. To give some examples: // In the source code // Case 1:\nlet mut v = Vec::new();\nv.push(v.len());\nlet r = &mut Vec::new();\nr.push(r.len()); // Case 2:\nstd::mem::replace(r, vec![1, r.len()]); // Case 3:\nlet mut x = std::num::Wrapping(2);\nx += x; Expanding these enough to show the two-phase borrows: // Case 1:\nlet mut v = Vec::new();\nlet temp1 = &two_phase v;\nlet temp2 = v.len();\nVec::push(temp1, temp2);\nlet r = &mut Vec::new();\nlet temp3 = &two_phase *r;\nlet temp4 = r.len();\nVec::push(temp3, temp4); // Case 2:\nlet temp5 = &two_phase *r;\nlet temp6 = vec![1, r.len()];\nstd::mem::replace(temp5, temp6); // Case 3:\nlet mut x = std::num::Wrapping(2);\nlet temp7 = &two_phase x;\nlet temp8 = x;\nstd::ops::AddAssign::add_assign(temp7, temp8); Whether a borrow can be two-phase is tracked by a flag on the AutoBorrow after type checking, which is then converted to a BorrowKind during MIR construction. Each two-phase borrow is assigned to a temporary that is only used once. As such we can define: The point where the temporary is assigned to is called the reservation point of the two-phase borrow. The point where the temporary is used, which is effectively always a function call, is called the activation point. The activation points are found using the GatherBorrows visitor. The BorrowData then holds both the reservation and activation points for the borrow.","breadcrumbs":"The borrow checker » Two-phase-borrows » Two-phase borrows","id":"1150","title":"Two-phase borrows"},"1151":{"body":"Two-phase borrows are treated as if they were mutable borrows with the following exceptions: At every location in the MIR we check if any two-phase borrows are activated at this location. If a live two phase borrow is activated at a location, then we check that there are no borrows that conflict with the two-phase borrow. At the reservation point we error if there are conflicting live mutable borrows. And lint if there are any conflicting shared borrows. Between the reservation and the activation point, the two-phase borrow acts as a shared borrow. We determine (in is_active ) if we're at such a point by using the Dominators for the MIR graph. After the activation point, the two-phase borrow acts as a mutable borrow.","breadcrumbs":"The borrow checker » Two-phase-borrows » Checking two-phase borrows","id":"1151","title":"Checking two-phase borrows"},"1152":{"body":"This section describes how rustc handles closures. Closures in Rust are effectively \"desugared\" into structs that contain the values they use (or references to the values they use) from their creator's stack frame. rustc has the job of figuring out which values a closure uses and how, so it can decide whether to capture a given variable by shared reference, mutable reference, or by move. rustc also has to figure out which of the closure traits ( Fn , FnMut , or FnOnce ) a closure is capable of implementing. Let's start with a few examples:","breadcrumbs":"Closure capture inference » Closure Capture Inference","id":"1152","title":"Closure Capture Inference"},"1153":{"body":"To start, let's take a look at how the closure in the following example is desugared: fn closure(f: impl Fn()) { f();\n} fn main() { let x: i32 = 10; closure(|| println!(\"Hi {}\", x)); // The closure just reads x. println!(\"Value of x after return {}\", x);\n} Let's say the above is the content of a file called immut.rs. If we compile immut.rs using the following command. The -Z dump-mir=all flag will cause rustc to generate and dump the MIR to a directory called mir_dump. > rustc +stage1 immut.rs -Z dump-mir=all After we run this command, we will see a newly generated directory in our current working directory called mir_dump, which will contain several files. If we look at file rustc.main.-------.mir_map.0.mir, we will find, among other things, it also contains this line: _4 = &_1;\n_3 = [closure@immut.rs:7:13: 7:36] { x: move _4 }; Note that in the MIR examples in this chapter, _1 is x. Here in first line _4 = &_1;, the mir_dump tells us that x was borrowed as an immutable reference. This is what we would hope as our closure just reads x.","breadcrumbs":"Closure capture inference » Example 1","id":"1153","title":"Example 1"},"1154":{"body":"Here is another example: fn closure(mut f: impl FnMut()) { f();\n} fn main() { let mut x: i32 = 10; closure(|| { x += 10; // The closure mutates the value of x println!(\"Hi {}\", x) }); println!(\"Value of x after return {}\", x);\n} _4 = &mut _1;\n_3 = [closure@mut.rs:7:13: 10:6] { x: move _4 }; This time along, in the line _4 = &mut _1;, we see that the borrow is changed to mutable borrow. Fair enough! The closure increments x by 10.","breadcrumbs":"Closure capture inference » Example 2","id":"1154","title":"Example 2"},"1155":{"body":"One more example: fn closure(f: impl FnOnce()) { f();\n} fn main() { let x = vec![21]; closure(|| { drop(x); // Makes x unusable after the fact. }); // println!(\"Value of x after return {:?}\", x);\n} _6 = [closure@move.rs:7:13: 9:6] { x: move _1 }; // bb16[3]: scope 1 at move.rs:7:13: 9:6 Here, x is directly moved into the closure and the access to it will not be permitted after the closure.","breadcrumbs":"Closure capture inference » Example 3","id":"1155","title":"Example 3"},"1156":{"body":"Now let's dive into rustc code and see how all these inferences are done by the compiler. Let's start with defining a term that we will be using quite a bit in the rest of the discussion - upvar . An upvar is a variable that is local to the function where the closure is defined. So, in the above examples, x will be an upvar to the closure. They are also sometimes referred to as the free variables meaning they are not bound to the context of the closure. compiler/rustc_passes/src/upvars.rs defines a query called upvars_mentioned for this purpose. Other than lazy invocation, one other thing that distinguishes a closure from a normal function is that it can use the upvars. It borrows these upvars from its surrounding context; therefore the compiler has to determine the upvar's borrow type. The compiler starts with assigning an immutable borrow type and lowers the restriction (that is, changes it from immutable to mutable to move ) as needed, based on the usage. In the Example 1 above, the closure only uses the variable for printing but does not modify it in any way and therefore, in the mir_dump, we find the borrow type for the upvar x to be immutable. In example 2, however, the closure modifies x and increments it by some value. Because of this mutation, the compiler, which started off assigning x as an immutable reference type, has to adjust it as a mutable reference. Likewise in the third example, the closure drops the vector and therefore this requires the variable x to be moved into the closure. Depending on the borrow kind, the closure has to implement the appropriate trait: Fn trait for immutable borrow, FnMut for mutable borrow, and FnOnce for move semantics. Most of the code related to the closure is in the compiler/rustc_hir_typeck/src/upvar.rs file and the data structures are declared in the file compiler/rustc_middle/src/ty/mod.rs . Before we go any further, let's discuss how we can examine the flow of control through the rustc codebase. For closures specifically, set the RUSTC_LOG env variable as below and collect the output in a file: > RUSTC_LOG=rustc_hir_typeck::upvar rustc +stage1 -Z dump-mir=all \\ <.rs file to compile> 2> This uses the stage1 compiler and enables debug! logging for the rustc_hir_typeck::upvar module. The other option is to step through the code using lldb or gdb. rust-lldb build/host/stage1/bin/rustc test.rs In lldb: b upvar.rs:134 // Setting the breakpoint on a certain line in the upvar.rs file r // Run the program until it hits the breakpoint Let's start with upvar.rs . This file has something called the euv::ExprUseVisitor which walks the source of the closure and invokes a callback for each upvar that is borrowed, mutated, or moved. fn main() { let mut x = vec![21]; let _cl = || { let y = x[0]; // 1. x[0] += 1; // 2. };\n} In the above example, our visitor will be called twice, for the lines marked 1 and 2, once for a shared borrow and another one for a mutable borrow. It will also tell us what was borrowed. The callbacks are defined by implementing the Delegate trait. The InferBorrowKind type implements Delegate and keeps a map that records for each upvar which mode of capture was required. The modes of capture can be ByValue (moved) or ByRef (borrowed). For ByRef borrows, the possible BorrowKind s are ImmBorrow, UniqueImmBorrow, MutBorrow as defined in the compiler/rustc_middle/src/ty/mod.rs . Delegate defines a few different methods (the different callbacks): consume for move of a variable, borrow for a borrow of some kind (shared or mutable), and mutate when we see an assignment of something. All of these callbacks have a common argument cmt which stands for Category, Mutability and Type and is defined in compiler/rustc_hir_typeck/src/expr_use_visitor.rs . Borrowing from the code comments, \"cmt is a complete categorization of a value indicating where it originated and how it is located, as well as the mutability of the memory in which the value is stored\". Based on the callback (consume, borrow etc.), we will call the relevant adjust_upvar_borrow_kind_for_ and pass the cmt along. Once the borrow type is adjusted, we store it in the table, which basically says what borrows were made for each closure. self.tables .borrow_mut() .upvar_capture_map .extend(delegate.adjust_upvar_captures);","breadcrumbs":"Closure capture inference » Inferences in the compiler","id":"1156","title":"Inferences in the compiler"},"1157":{"body":"Coroutine-closures -- a technical deep dive HIR rustc_middle::ty Representation Similarities to closures The signature The data we need to carry along to construct a Coroutine return type Actually getting the coroutine return type(s) Trait Hierarchy Lending When do async closures implement the regular Fn* traits? Tale of two bodies... Synthesizing the by-move body Closure signature inference Calling a closure before its kind has been inferred Ok, so why? Upvar analysis Forcing all inputs to be captured Computing the by-ref captures By-move body + FnOnce quirk Follow-up: When do async closures implement the regular Fn* traits? Instance resolution Borrow-checking Please read RFC 3668 to understand the general motivation of the feature. This is a very technical and somewhat \"vertical\" chapter; ideally we'd split this and sprinkle it across all the relevant chapters, but for the purposes of understanding async closures holistically , I've put this together all here in one chapter.","breadcrumbs":"Async closures/\"coroutine-closures\" » Async closures/\"coroutine-closures\"","id":"1157","title":"Async closures/\"coroutine-closures\""},"1158":{"body":"Coroutine-closures are a generalization of async closures, being special syntax for closure expressions which return a coroutine, notably one that is allowed to capture from the closure's upvars. For now, the only usable kind of coroutine-closure is the async closure, and supporting async closures is the extent of this PR. We may eventually support gen || {}, etc., and most of the problems and curiosities described in this document apply to all coroutine-closures in general. As a consequence of the code being somewhat general, this document may flip between calling them \"async closures\" and \"coroutine-closures\". The future that is returned by the async closure will generally be called the \"coroutine\" or the \"child coroutine\".","breadcrumbs":"Async closures/\"coroutine-closures\" » Coroutine-closures -- a technical deep dive","id":"1158","title":"Coroutine-closures -- a technical deep dive"},"1159":{"body":"Async closures (and in the future, other coroutine flavors such as gen) are represented in HIR as a hir::Closure. The closure-kind of the hir::Closure is ClosureKind::CoroutineClosure(_) [1] , which wraps an async block, which is also represented in HIR as a hir::Closure. The closure-kind of the async block is ClosureKind::Closure(CoroutineKind::Desugared(_, CoroutineSource::Closure)) [2] . https://github.com/rust-lang/rust/blob/5ca0e9fa9b2f92b463a0a2b0b34315e09c0b7236/compiler/rustc_ast_lowering/src/expr.rs#L1147 https://github.com/rust-lang/rust/blob/5ca0e9fa9b2f92b463a0a2b0b34315e09c0b7236/compiler/rustc_ast_lowering/src/expr.rs#L1117 Like async fn, when lowering an async closure's body, we need to unconditionally move all of the closures arguments into the body so they are captured. This is handled by lower_coroutine_body_with_moved_arguments [3] . The only notable quirk with this function is that the async block we end up generating as a capture kind of CaptureBy::ByRef [4] . We later force all of the closure args to be captured by-value [5] , but we don't want the whole async block to act as if it were an async move, since that would defeat the purpose of the self-borrowing of an async closure. https://github.com/rust-lang/rust/blob/5ca0e9fa9b2f92b463a0a2b0b34315e09c0b7236/compiler/rustc_ast_lowering/src/item.rs#L1096-L1100 https://github.com/rust-lang/rust/blob/5ca0e9fa9b2f92b463a0a2b0b34315e09c0b7236/compiler/rustc_ast_lowering/src/item.rs#L1276-L1279 https://github.com/rust-lang/rust/blob/5ca0e9fa9b2f92b463a0a2b0b34315e09c0b7236/compiler/rustc_hir_typeck/src/upvar.rs#L250-L256","breadcrumbs":"Async closures/\"coroutine-closures\" » HIR","id":"1159","title":"HIR"},"116":{"body":"There are a few options for running tests: bootstrap.toml has the rust.verbose-tests option. If false, each test will print a single dot (the default). If true, the name of every test will be printed. This is equivalent to the --quiet option in the Rust test harness . The environment variable RUST_TEST_THREADS can be set to the number of concurrent threads to use for testing.","breadcrumbs":"Testing the compiler » Running tests » Configuring test running","id":"116","title":"Configuring test running"},"1160":{"body":"For the purposes of keeping the implementation mostly future-compatible (i.e. with gen || {} and async gen || {}), most of this section calls async closures \"coroutine-closures\". The main thing that this PR introduces is a new TyKind called CoroutineClosure [6] and corresponding variants on other relevant enums in typeck and borrowck (UpvarArgs, DefiningTy, AggregateKind). https://github.com/rust-lang/rust/blob/5ca0e9fa9b2f92b463a0a2b0b34315e09c0b7236/compiler/rustc_type_ir/src/ty_kind.rs#L163-L168 We introduce a new TyKind instead of generalizing the existing TyKind::Closure due to major representational differences in the type. The major differences between CoroutineClosures can be explored by first inspecting the CoroutineClosureArgsParts, which is the \"unpacked\" representation of the coroutine-closure's generics. Similarities to closures Like a closure, we have parent_args, a closure_kind_ty, and a tupled_upvars_ty. These represent the same thing as their closure counterparts; namely: the generics inherited from the body that the closure is defined in, the maximum \"calling capability\" of the closure (i.e. must it be consumed to be called, like FnOnce, or can it be called by-ref), and the captured upvars of the closure itself. The signature A traditional closure has a fn_sig_as_fn_ptr_ty which it uses to represent the signature of the closure. In contrast, we store the signature of a coroutine closure in a somewhat \"exploded\" way, since coroutine-closures have two signatures depending on what AsyncFn* trait you call it with (see below sections). Conceptually, the coroutine-closure may be thought as containing several different signature types depending on whether it is being called by-ref or by-move. To conveniently recreate both of these signatures, the signature_parts_ty stores all of the relevant parts of the coroutine returned by this coroutine-closure. This signature parts type will have the general shape of fn(tupled_inputs, resume_ty) -> (return_ty, yield_ty), where resume_ty, return_ty, and yield_ty are the respective types for the coroutine returned by the coroutine-closure [7] . https://github.com/rust-lang/rust/blob/5ca0e9fa9b2f92b463a0a2b0b34315e09c0b7236/compiler/rustc_type_ir/src/ty_kind/closure.rs#L221-L229 The compiler mainly deals with the CoroutineClosureSignature type [8] , which is created by extracting the relevant types out of the fn() ptr type described above, and which exposes methods that can be used to construct the coroutine that the coroutine-closure ultimately returns. https://github.com/rust-lang/rust/blob/5ca0e9fa9b2f92b463a0a2b0b34315e09c0b7236/compiler/rustc_type_ir/src/ty_kind/closure.rs#L362 The data we need to carry along to construct a Coroutine return type Along with the data stored in the signature, to construct a TyKind::Coroutine to return, we also need to store the \"witness\" of the coroutine. So what about the upvars of the Coroutine that is returned? Well, for AsyncFnOnce (i.e. call-by-move), this is simply the same upvars that the coroutine returns. But for AsyncFnMut/AsyncFn, the coroutine that is returned from the coroutine-closure borrows data from the coroutine-closure with a given \"environment\" lifetime [9] . This corresponds to the &self lifetime [10] on the AsyncFnMut/AsyncFn call signature, and the GAT lifetime of the ByRef [11] . https://github.com/rust-lang/rust/blob/5ca0e9fa9b2f92b463a0a2b0b34315e09c0b7236/compiler/rustc_type_ir/src/ty_kind/closure.rs#L447-L455 https://github.com/rust-lang/rust/blob/5ca0e9fa9b2f92b463a0a2b0b34315e09c0b7236/library/core/src/ops/async_function.rs#L36 https://github.com/rust-lang/rust/blob/5ca0e9fa9b2f92b463a0a2b0b34315e09c0b7236/library/core/src/ops/async_function.rs#L30 Actually getting the coroutine return type(s) To most easily construct the Coroutine that a coroutine-closure returns, you can use the to_coroutine_given_kind_and_upvars [12] helper on CoroutineClosureSignature, which can be acquired from the CoroutineClosureArgs. https://github.com/rust-lang/rust/blob/5ca0e9fa9b2f92b463a0a2b0b34315e09c0b7236/compiler/rustc_type_ir/src/ty_kind/closure.rs#L419 Most of the args to that function will be components that you can get out of the CoroutineArgs, except for the goal_kind: ClosureKind which controls which flavor of coroutine to return based off of the ClosureKind passed in -- i.e. it will prepare the by-ref coroutine if ClosureKind::Fn | ClosureKind::FnMut, and the by-move coroutine if ClosureKind::FnOnce.","breadcrumbs":"Async closures/\"coroutine-closures\" » rustc_middle::ty Representation","id":"1160","title":"rustc_middle::ty Representation"},"1161":{"body":"We introduce a parallel hierarchy of Fn* traits that are implemented for . The motivation for the introduction was covered in a blog post: Async Closures . All currently-stable callable types (i.e., closures, function items, function pointers, and dyn Fn* trait objects) automatically implement AsyncFn*() -> T if they implement Fn*() -> Fut for some output type Fut, and Fut implements Future [13] . https://github.com/rust-lang/rust/blob/7c7bb7dc017545db732f5cffec684bbaeae0a9a0/compiler/rustc_next_trait_solver/src/solve/assembly/structural_traits.rs#L404-L409 Async closures implement AsyncFn* as their bodies permit; i.e. if they end up using upvars in a way that is compatible (i.e. if they consume or mutate their upvars, it may affect whether they implement AsyncFn and AsyncFnMut...) Lending We may in the future move AsyncFn* onto a more general set of LendingFn* traits; however, there are some concrete technical implementation details that limit our ability to use LendingFn ergonomically in the compiler today. These have to do with: Closure signature inference. Limitations around higher-ranked trait bounds. Shortcomings with error messages. These limitations, plus the fact that the underlying trait should have no effect on the user experience of async closures and async Fn trait bounds, leads us to AsyncFn* for now. To ensure we can eventually move to these more general traits, the precise AsyncFn* trait definitions (including the associated types) are left as an implementation detail. When do async closures implement the regular Fn* traits? We mention above that \"regular\" callable types can implement AsyncFn*, but the reverse question exists of \"can async closures implement Fn* too\"? The short answer is \"when it's valid\", i.e. when the coroutine that would have been returned from AsyncFn/AsyncFnMut does not actually have any upvars that are \"lent\" from the parent coroutine-closure. See the \"follow-up: when do...\" section below for an elaborated answer. The full answer describes a pretty interesting and hopefully thorough heuristic that is used to ensure that most async closures \"just work\".","breadcrumbs":"Async closures/\"coroutine-closures\" » Trait Hierarchy","id":"1161","title":"Trait Hierarchy"},"1162":{"body":"When async closures are called with AsyncFn/AsyncFnMut, they return a coroutine that borrows from the closure. However, when they are called via AsyncFnOnce, we consume that closure, and cannot return a coroutine that borrows from data that is now dropped. To work around this limitation, we synthesize a separate by-move MIR body for calling AsyncFnOnce::call_once on a coroutine-closure that can be called by-ref. This body operates identically to the \"normal\" coroutine returned from calling the coroutine-closure, except for the fact that it has a different set of upvars, since we must move the captures from the parent coroutine-closure into the child coroutine. Synthesizing the by-move body When we want to access the by-move body of the coroutine returned by a coroutine-closure, we can do so via the coroutine_by_move_body_def_id [14] query. https://github.com/rust-lang/rust/blob/5ca0e9fa9b2f92b463a0a2b0b34315e09c0b7236/compiler/rustc_mir_transform/src/coroutine/by_move_body.rs#L1-L70 This query synthesizes a new MIR body by copying the MIR body of the coroutine and inserting additional derefs and field projections [15] to preserve the semantics of the body. https://github.com/rust-lang/rust/blob/5ca0e9fa9b2f92b463a0a2b0b34315e09c0b7236/compiler/rustc_mir_transform/src/coroutine/by_move_body.rs#L131-L195 Since we've synthesized a new def id, this query is also responsible for feeding a ton of other relevant queries for the MIR body. This query is ensure()d [16] during the mir_promoted query, since it operates on the built mir of the coroutine. https://github.com/rust-lang/rust/blob/5ca0e9fa9b2f92b463a0a2b0b34315e09c0b7236/compiler/rustc_mir_transform/src/lib.rs#L339-L342","breadcrumbs":"Async closures/\"coroutine-closures\" » Tale of two bodies...","id":"1162","title":"Tale of two bodies..."},"1163":{"body":"The closure signature inference algorithm for async closures is a bit more complicated than the inference algorithm for \"traditional\" closures. Like closures, we iterate through all of the clauses that may be relevant (for the expectation type passed in) [17] . To extract a signature, we consider two situations: Projection predicates with AsyncFnOnce::Output, which we will use to extract the inputs and output type for the closure. This corresponds to the situation that there was a F: AsyncFn*() -> T bound [18] . Projection predicates with FnOnce::Output, which we will use to extract the inputs. For the output, we also try to deduce an output by looking for relevant Future::Output projection predicates. This corresponds to the situation that there was an F: Fn*() -> T, T: Future bound. [19] If there is no Future bound, we simply use a fresh infer var for the output. This corresponds to the case where one can pass an async closure to a combinator function like Option::map. [20] https://github.com/rust-lang/rust/blob/5ca0e9fa9b2f92b463a0a2b0b34315e09c0b7236/compiler/rustc_hir_typeck/src/closure.rs#L345-L362 https://github.com/rust-lang/rust/blob/5ca0e9fa9b2f92b463a0a2b0b34315e09c0b7236/compiler/rustc_hir_typeck/src/closure.rs#L486-L487 https://github.com/rust-lang/rust/blob/5ca0e9fa9b2f92b463a0a2b0b34315e09c0b7236/compiler/rustc_hir_typeck/src/closure.rs#L517-L534 https://github.com/rust-lang/rust/blob/5ca0e9fa9b2f92b463a0a2b0b34315e09c0b7236/compiler/rustc_hir_typeck/src/closure.rs#L575-L590 We support the latter case simply to make it easier for users to simply drop-in async || {} syntax, even when they're calling an API that was designed before first-class AsyncFn* traits were available. Calling a closure before its kind has been inferred We defer [21] the computation of a coroutine-closure's \"kind\" (i.e. its maximum calling mode: AsyncFnOnce/AsyncFnMut/AsyncFn) until the end of typeck. However, since we want to be able to call that coroutine-closure before the end of typeck, we need to come up with the return type of the coroutine-closure before that. https://github.com/rust-lang/rust/blob/705cfe0e966399e061d64dd3661bfbc57553ed87/compiler/rustc_hir_typeck/src/callee.rs#L169-L210 Unlike regular closures, whose return type does not change depending on what Fn* trait we call it with, coroutine-closures do end up returning different coroutine types depending on the flavor of AsyncFn* trait used to call it. Specifically, while the def-id of the returned coroutine does not change, the upvars [22] (which are either borrowed or moved from the parent coroutine-closure) and the coroutine-kind [23] are dependent on the calling mode. https://github.com/rust-lang/rust/blob/705cfe0e966399e061d64dd3661bfbc57553ed87/compiler/rustc_type_ir/src/ty_kind/closure.rs#L574-L576 https://github.com/rust-lang/rust/blob/705cfe0e966399e061d64dd3661bfbc57553ed87/compiler/rustc_type_ir/src/ty_kind/closure.rs#L554-L563 We introduce a AsyncFnKindHelper trait which allows us to defer the question of \"does this coroutine-closure support this calling mode\" [24] via a trait goal, and \"what are the tupled upvars of this calling mode\" [25] via an associated type, which can be computed by appending the input types of the coroutine-closure to either the upvars or the \"by ref\" upvars computed during upvar analysis. https://github.com/rust-lang/rust/blob/7c7bb7dc017545db732f5cffec684bbaeae0a9a0/library/core/src/ops/async_function.rs#L135-L144 https://github.com/rust-lang/rust/blob/7c7bb7dc017545db732f5cffec684bbaeae0a9a0/library/core/src/ops/async_function.rs#L146-L154 Ok, so why? This seems a bit roundabout and complex, and I admit that it is. But let's think of the \"do nothing\" alternative -- we could instead mark all AsyncFn* goals as ambiguous until upvar analysis, at which point we would know exactly what to put into the upvars of the coroutine we return. However, this is actually very detrimental to inference in the program, since it means that programs like this would not be valid: let c = async || -> String { .. };\nlet s = c().await;\n// ^^^ If we can't project `<{c} as AsyncFn>::call()` to a coroutine, then the `IntoFuture::into_future` call inside of the `.await` stalls, and the type of `s` is left unconstrained as an infer var.\ns.as_bytes();\n// ^^^ That means we can't call any methods on the awaited return of a coroutine-closure, like... at all! So instead , we use this alias (in this case, a projection: AsyncFnKindHelper::Upvars<'env, ...>) to delay the computation of the tupled upvars and give us something to put in its place, while still allowing us to return a TyKind::Coroutine (which is a rigid type) and we may successfully confirm the built-in traits we need (in our case, Future), since the Future implementation doesn't depend on the upvars at all.","breadcrumbs":"Async closures/\"coroutine-closures\" » Closure signature inference","id":"1163","title":"Closure signature inference"},"1164":{"body":"By and large, the upvar analysis for coroutine-closures and their child coroutines proceeds like normal upvar analysis. However, there are several interesting bits that happen to account for async closures' special natures: Forcing all inputs to be captured Like async fn, all input arguments are captured. We explicitly force [26] all of these inputs to be captured by move so that the future coroutine returned by async closures does not depend on whether the input is used by the body or not, which would impart an interesting semver hazard. https://github.com/rust-lang/rust/blob/7c7bb7dc017545db732f5cffec684bbaeae0a9a0/compiler/rustc_hir_typeck/src/upvar.rs#L250-L259 Computing the by-ref captures For a coroutine-closure that supports AsyncFn/AsyncFnMut, we must also compute the relationship between the captures of the coroutine-closure and its child coroutine. Specifically, the coroutine-closure may move a upvar into its captures, but the coroutine may only borrow that upvar. We compute the \"coroutine_captures_by_ref_ty\" by looking at all of the child coroutine's captures and comparing them to the corresponding capture of the parent coroutine-closure [27] . This coroutine_captures_by_ref_ty ends up being represented as a for<'env> fn() -> captures... type, with the additional binder lifetime representing the \"&self\" lifetime of calling AsyncFn::async_call or AsyncFnMut::async_call_mut. We instantiate that binder later when actually calling the methods. https://github.com/rust-lang/rust/blob/7c7bb7dc017545db732f5cffec684bbaeae0a9a0/compiler/rustc_hir_typeck/src/upvar.rs#L375-L471 Note that not every by-ref capture from the parent coroutine-closure results in a \"lending\" borrow. See the Follow-up: When do async closures implement the regular Fn* traits? section below for more details, since this intimately influences whether or not the coroutine-closure is allowed to implement the Fn* family of traits. By-move body + FnOnce quirk There are several situations where the closure upvar analysis ends up inferring upvars for the coroutine-closure's child coroutine that are too relaxed, and end up resulting in borrow-checker errors. This is best illustrated via examples. For example, given: fn force_fnonce(t: T) -> T { t } let x = String::new();\nlet c = force_fnonce(async move || { println!(\"{x}\");\n}); x will be moved into the coroutine-closure, but the coroutine that is returned would only borrow &x. However, since force_fnonce forces the coroutine-closure to AsyncFnOnce, which is not lending , we must force the capture to happen by-move [28] . Similarly: let x = String::new();\nlet y = String::new();\nlet c = async move || { drop(y); println!(\"{x}\");\n}; x will be moved into the coroutine-closure, but the coroutine that is returned would only borrow &x. However, since we also capture y and drop it, the coroutine-closure is forced to be AsyncFnOnce. We must also force the capture of x to happen by-move. To determine this situation in particular, since unlike the last example the coroutine-kind's closure-kind has not yet been constrained, we must analyze the body of the coroutine-closure to see if how all of the upvars are used, to determine if they've been used in a way that is \"consuming\" -- i.e. that would force it to FnOnce [29] . https://github.com/rust-lang/rust/blob/7c7bb7dc017545db732f5cffec684bbaeae0a9a0/compiler/rustc_hir_typeck/src/upvar.rs#L211-L248 https://github.com/rust-lang/rust/blob/7c7bb7dc017545db732f5cffec684bbaeae0a9a0/compiler/rustc_hir_typeck/src/upvar.rs#L532-L539 Follow-up: When do async closures implement the regular Fn* traits? Well, first of all, all async closures implement FnOnce since they can always be called at least once . For Fn/FnMut, the detailed answer involves answering a related question: is the coroutine-closure lending? Because if it is, then it cannot implement the non-lending Fn/FnMut traits. Determining when the coroutine-closure must lend its upvars is implemented in the should_reborrow_from_env_of_parent_coroutine_closure helper function [30] . Specifically, this needs to happen in two places: https://github.com/rust-lang/rust/blob/7c7bb7dc017545db732f5cffec684bbaeae0a9a0/compiler/rustc_hir_typeck/src/upvar.rs#L1818-L1860 Are we borrowing data owned by the parent closure? We can determine if that is the case by checking if the parent capture is by-move, EXCEPT if we apply a deref projection, which means we're reborrowing a reference that we captured by-move. let x = &1i32; // Let's call this lifetime `'1`.\nlet c = async move || { println!(\"{:?}\", *x); // Even though the inner coroutine borrows by ref, we're only capturing `*x`, // not `x`, so the inner closure is allowed to reborrow the data for `'1`.\n}; If a coroutine is mutably borrowing from a parent capture, then that mutable borrow cannot live for longer than either the parent or the borrow that we have on the original upvar. Therefore we always need to borrow the child capture with the lifetime of the parent coroutine-closure's env. let mut x = 1i32;\nlet c = async || { x = 1; // The parent borrows `x` for some `&'1 mut i32`. // However, when we call `c()`, we implicitly autoref for the signature of // `AsyncFnMut::async_call_mut`. Let's call that lifetime `'call`. Since // the maximum that `&'call mut &'1 mut i32` can be reborrowed is `&'call mut i32`, // the inner coroutine should capture w/ the lifetime of the coroutine-closure.\n}; If either of these cases apply, then we should capture the borrow with the lifetime of the parent coroutine-closure's env. Luckily, if this function is not correct, then the program is not unsound, since we still borrowck and validate the choices made from this function -- the only side-effect is that the user may receive unnecessary borrowck errors.","breadcrumbs":"Async closures/\"coroutine-closures\" » Upvar analysis","id":"1164","title":"Upvar analysis"},"1165":{"body":"If a coroutine-closure has a closure-kind of FnOnce, then its AsyncFnOnce::call_once and FnOnce::call_once implementations resolve to the coroutine-closure's body [31] , and the Future::poll of the coroutine that gets returned resolves to the body of the child closure. https://github.com/rust-lang/rust/blob/705cfe0e966399e061d64dd3661bfbc57553ed87/compiler/rustc_ty_utils/src/instance.rs#L351 If a coroutine-closure has a closure-kind of FnMut/Fn, then the same applies to AsyncFn and the corresponding Future implementation of the coroutine that gets returned. [31] However, we use a MIR shim to generate the implementation of AsyncFnOnce::call_once/FnOnce::call_once [32] , and Fn::call/FnMut::call_mut instances if they exist [33] . https://github.com/rust-lang/rust/blob/705cfe0e966399e061d64dd3661bfbc57553ed87/compiler/rustc_ty_utils/src/instance.rs#L341-L349 https://github.com/rust-lang/rust/blob/705cfe0e966399e061d64dd3661bfbc57553ed87/compiler/rustc_ty_utils/src/instance.rs#L312-L326 This is represented by the ConstructCoroutineInClosureShim [34] . The receiver_by_ref bool will be true if this is the instance of Fn::call/FnMut::call_mut. [35] The coroutine that all of these instances returns corresponds to the by-move body we will have synthesized by this point. [36] https://github.com/rust-lang/rust/blob/705cfe0e966399e061d64dd3661bfbc57553ed87/compiler/rustc_middle/src/ty/instance.rs#L129-L134 https://github.com/rust-lang/rust/blob/705cfe0e966399e061d64dd3661bfbc57553ed87/compiler/rustc_middle/src/ty/instance.rs#L136-L141 https://github.com/rust-lang/rust/blob/07cbbdd69363da97075650e9be24b78af0bcdd23/compiler/rustc_middle/src/ty/instance.rs#L841","breadcrumbs":"Async closures/\"coroutine-closures\" » Instance resolution","id":"1165","title":"Instance resolution"},"1166":{"body":"It turns out that borrow-checking async closures is pretty straightforward. After adding a new DefiningTy::CoroutineClosure [37] variant, and teaching borrowck how to generate the signature of the coroutine-closure [38] , borrowck proceeds totally fine. One thing to note is that we don't borrow-check the synthetic body we make for by-move coroutines, since by construction (and the validity of the by-ref coroutine body it was derived from) it must be valid. https://github.com/rust-lang/rust/blob/705cfe0e966399e061d64dd3661bfbc57553ed87/compiler/rustc_borrowck/src/universal_regions.rs#L110-L115 https://github.com/rust-lang/rust/blob/7c7bb7dc017545db732f5cffec684bbaeae0a9a0/compiler/rustc_borrowck/src/universal_regions.rs#L743-L790","breadcrumbs":"Async closures/\"coroutine-closures\" » Borrow-checking","id":"1166","title":"Borrow-checking"},"1167":{"body":"All of the preceding chapters of this guide have one thing in common: we never generated any executable machine code at all! With this chapter, all of that changes. So far, we've shown how the compiler can take raw source code in text format and transform it into MIR . We have also shown how the compiler does various analyses on the code to detect things like type or lifetime errors. Now, we will finally take the MIR and produce some executable machine code. NOTE: This part of a compiler is often called the backend . The term is a bit overloaded because in the compiler source, it usually refers to the \"codegen backend\" (i.e. LLVM, Cranelift, or GCC). Usually, when you see the word \"backend\" in this part, we are referring to the \"codegen backend\". So what do we need to do? First, we need to collect the set of things to generate code for. In particular, we need to find out which concrete types to substitute for generic ones, since we need to generate code for the concrete types. Generating code for the concrete types (i.e. emitting a copy of the code for each concrete type) is called monomorphization , so the process of collecting all the concrete types is called monomorphization collection . Next, we need to actually lower the MIR to a codegen IR (usually LLVM IR) for each concrete type we collected. Finally, we need to invoke the codegen backend, which runs a bunch of optimization passes, generates executable code, and links together an executable binary. The code for codegen is actually a bit complex due to a few factors: Support for multiple codegen backends (LLVM, Cranelift, and GCC). We try to share as much backend code between them as possible, so a lot of it is generic over the codegen implementation. This means that there are often a lot of layers of abstraction. Codegen happens asynchronously in another thread for performance. The actual codegen is done by a third-party library (either of the 3 backends). Generally, the rustc_codegen_ssa crate contains backend-agnostic code, while the rustc_codegen_llvm crate contains code specific to LLVM codegen. At a very high level, the entry point is rustc_codegen_ssa::base::codegen_crate . This function starts the process discussed in the rest of this chapter.","breadcrumbs":"Prologue » From MIR to binaries","id":"1167","title":"From MIR to binaries"},"1168":{"body":"MIR optimizations are optimizations run on the MIR to produce better MIR before codegen. This is important for two reasons: first, it makes the final generated executable code better, and second, it means that LLVM has less work to do, so compilation is faster. Note that since MIR is generic (not monomorphized yet), these optimizations are particularly effective; we can optimize the generic version, so all of the monomorphizations are cheaper! MIR optimizations run after borrow checking. We run a series of optimization passes over the MIR to improve it. Some passes are required to run on all code, some passes don't actually do optimizations but only check stuff, and some passes are only turned on in release mode. The optimized_mir query is called to produce the optimized MIR for a given DefId . This query makes sure that the borrow checker has run and that some validation has occurred. Then, it steals the MIR, optimizes it, and returns the improved MIR.","breadcrumbs":"MIR optimizations » MIR optimizations","id":"1168","title":"MIR optimizations"},"1169":{"body":"Make a Rust source file in tests/mir-opt that shows the code you want to optimize. This should be kept simple, so avoid println! or other formatting code if it's not necessary for the optimization. The reason for this is that println!, format!, etc. generate a lot of MIR that can make it harder to understand what the optimization does to the test. Run ./x test --bless tests/mir-opt/.rs to generate a MIR dump. Read this README for instructions on how to dump things. Commit the current working directory state. The reason you should commit the test output before you implement the optimization is so that you (and your reviewers) can see a before/after diff of what the optimization changed. Implement a new optimization in compiler/rustc_mir_transform/src . The fastest and easiest way to do this is to pick a small optimization (such as remove_storage_markers ) and copy it to a new file, add your optimization to one of the lists in the run_optimization_passes() function, and then start modifying the copied optimization. Rerun ./x test --bless tests/mir-opt/.rs to regenerate the MIR dumps. Look at the diffs to see if they are what you expect. Run ./x test tests/ui to see if your optimization broke anything. If there are issues with your optimization, experiment with it a bit and repeat steps 5 and 6. Commit and open a PR. You can do this at any point, even if things aren't working yet, so that you can ask for feedback on the PR. Open a \"WIP\" PR (just prefix your PR title with [WIP] or otherwise note that it is a work in progress) in that case. Make sure to commit the blessed test output as well! It's necessary for CI to pass and it's very helpful to reviewers. If you have any questions along the way, feel free to ask in #t-compiler/wg-mir-opt on Zulip.","breadcrumbs":"MIR optimizations » Quickstart for adding a new optimization","id":"1169","title":"Quickstart for adding a new optimization"},"117":{"body":"Pass UI tests now have three modes, check-pass, build-pass and run-pass. When --pass $mode is passed, these tests will be forced to run under the given $mode unless the directive //@ ignore-pass exists in the test file. For example, you can run all the tests in tests/ui as check-pass: ./x test tests/ui --pass check By passing --pass $mode, you can reduce the testing time. For each mode, please see Controlling pass/fail expectations .","breadcrumbs":"Testing the compiler » Running tests » Passing --pass $mode","id":"117","title":"Passing --pass $mode"},"1170":{"body":"The list of passes run and the order in which they are run is defined by the run_optimization_passes function. It contains an array of passes to run. Each pass in the array is a struct that implements the MirPass trait. The array is an array of &dyn MirPass trait objects. Typically, a pass is implemented in its own module of the rustc_mir_transform crate. Some examples of passes are: CleanupPostBorrowck: Remove some of the info that is only needed for analyses, rather than codegen. ConstProp: Does constant propagation . You can see the \"Implementors\" section of the MirPass rustdocs for more examples.","breadcrumbs":"MIR optimizations » Defining optimization passes","id":"1170","title":"Defining optimization passes"},"1171":{"body":"MIR optimizations can come in various levels of readiness. Experimental optimizations may cause miscompilations, or slow down compile times. These passes are still included in nightly builds to gather feedback and make it easier to modify the pass. To enable working with slow or otherwise experimental optimization passes, you can specify the -Z mir-opt-level debug flag. You can find the definitions of the levels in the compiler MCP . If you are developing a MIR pass and want to query whether your optimization pass should run, you can check the current level using tcx.sess.opts.unstable_opts.mir_opt_level .","breadcrumbs":"MIR optimizations » MIR optimization levels","id":"1171","title":"MIR optimization levels"},"1172":{"body":"The -Z dump-mir flag can be used to dump a text representation of the MIR. The following optional flags, used in combination with -Z dump-mir, enable additional output formats, including: -Z dump-mir-graphviz - dumps a .dot file that represents MIR as a control-flow graph -Z dump-mir-dataflow - dumps a .dot file showing the dataflow state at each point in the control-flow graph -Z dump-mir=F is a handy compiler option that will let you view the MIR for each function at each stage of compilation. -Z dump-mir takes a filter F which allows you to control which functions and which passes you are interested in. For example: > rustc -Z dump-mir=foo ... This will dump the MIR for any function whose name contains foo; it will dump the MIR both before and after every pass. Those files will be created in the mir_dump directory. There will likely be quite a lot of them! > cat > foo.rs\nfn main() { println!(\"Hello, world!\");\n}\n^D\n> rustc -Z dump-mir=main foo.rs\n> ls mir_dump/* | wc -l 161 The files have names like rustc.main.000-000.CleanEndRegions.after.mir. These names have a number of parts: rustc.main.000-000.CleanEndRegions.after.mir ---- --- --- --------------- ----- either before or after | | | name of the pass | | index of dump within the pass (usually 0, but some passes dump intermediate states) | index of the pass def-path to the function etc being dumped You can also make more selective filters. For example, main & CleanEndRegions will select for things that reference both main and the pass CleanEndRegions: > rustc -Z dump-mir='main & CleanEndRegions' foo.rs\n> ls mir_dump\nrustc.main.000-000.CleanEndRegions.after.mir\trustc.main.000-000.CleanEndRegions.before.mir Filters can also have | parts to combine multiple sets of &-filters. For example main & CleanEndRegions | main & NoLandingPads will select either main and CleanEndRegions or main and NoLandingPads: > rustc -Z dump-mir='main & CleanEndRegions | main & NoLandingPads' foo.rs\n> ls mir_dump\nrustc.main-promoted[0].002-000.NoLandingPads.after.mir\nrustc.main-promoted[0].002-000.NoLandingPads.before.mir\nrustc.main-promoted[0].002-006.NoLandingPads.after.mir\nrustc.main-promoted[0].002-006.NoLandingPads.before.mir\nrustc.main-promoted[1].002-000.NoLandingPads.after.mir\nrustc.main-promoted[1].002-000.NoLandingPads.before.mir\nrustc.main-promoted[1].002-006.NoLandingPads.after.mir\nrustc.main-promoted[1].002-006.NoLandingPads.before.mir\nrustc.main.000-000.CleanEndRegions.after.mir\nrustc.main.000-000.CleanEndRegions.before.mir\nrustc.main.002-000.NoLandingPads.after.mir\nrustc.main.002-000.NoLandingPads.before.mir\nrustc.main.002-006.NoLandingPads.after.mir\nrustc.main.002-006.NoLandingPads.before.mir (Here, the main-promoted[0] files refer to the MIR for \"promoted constants\" that appeared within the main function.) The -Z unpretty=mir-cfg flag can be used to create a graphviz MIR control-flow diagram for the whole crate: A control-flow diagram TODO: anything else?","breadcrumbs":"Debugging MIR » MIR Debugging","id":"1172","title":"MIR Debugging"},"1173":{"body":"Constant evaluation is the process of computing values at compile time. For a specific item (constant/static/array length) this happens after the MIR for the item is borrow-checked and optimized. In many cases trying to const evaluate an item will trigger the computation of its MIR for the first time. Prominent examples are: The initializer of a static Array length needs to be known to reserve stack or heap space Enum variant discriminants needs to be known to prevent two variants from having the same discriminant Patterns need to be known to check for overlapping patterns Additionally constant evaluation can be used to reduce the workload or binary size at runtime by precomputing complex operations at compile time and only storing the result. All uses of constant evaluation can either be categorized as \"influencing the type system\" (array lengths, enum variant discriminants, const generic parameters), or as solely being done to precompute expressions to be used at runtime. Constant evaluation can be done by calling the const_eval_* functions of TyCtxt. They're the wrappers of the const_eval query. const_eval_global_id_for_typeck evaluates a constant to a valtree, so the result value can be further inspected by the compiler. const_eval_global_id evaluate a constant to an \"opaque blob\" containing its final value; this is only useful for codegen backends and the CTFE evaluator engine itself. eval_static_initializer specifically computes the initial values of a static. Statics are special; all other functions do not represent statics correctly and have thus assertions preventing their use on statics. The const_eval_* functions use a ParamEnv of environment in which the constant is evaluated (e.g. the function within which the constant is used) and a GlobalId . The GlobalId is made up of an Instance referring to a constant or static or of an Instance of a function and an index into the function's Promoted table. Constant evaluation returns an EvalToValTreeResult for type system constants or EvalToConstValueResult with either the error, or a representation of the evaluated constant: a valtree or a MIR constant value , respectively.","breadcrumbs":"Constant evaluation » Constant Evaluation","id":"1173","title":"Constant Evaluation"},"1174":{"body":"Datastructures Memory Global memory and exotic allocations Pointer values vs Pointer types Interpretation The interpreter is a virtual machine for executing MIR without compiling to machine code. It is usually invoked via tcx.const_eval_* functions. The interpreter is shared between the compiler (for compile-time function evaluation, CTFE) and the tool Miri , which uses the same virtual machine to detect Undefined Behavior in (unsafe) Rust code. If you start out with a constant: const FOO: usize = 1 << 12; rustc doesn't actually invoke anything until the constant is either used or placed into metadata. Once you have a use-site like: type Foo = [u8; FOO - 42]; The compiler needs to figure out the length of the array before being able to create items that use the type (locals, constants, function arguments, ...). To obtain the (in this case empty) parameter environment, one can call let param_env = tcx.param_env(length_def_id);. The GlobalId needed is let gid = GlobalId { promoted: None, instance: Instance::mono(length_def_id),\n}; Invoking tcx.const_eval(param_env.and(gid)) will now trigger the creation of the MIR of the array length expression. The MIR will look something like this: Foo::{{constant}}#0: usize = { let mut _0: usize; let mut _1: (usize, bool); bb0: { _1 = CheckedSub(const FOO, const 42usize); assert(!move (_1.1: bool), \"attempt to subtract with overflow\") -> bb1; } bb1: { _0 = move (_1.0: usize); return; }\n} Before the evaluation, a virtual memory location (in this case essentially a vec![u8; 4] or vec![u8; 8]) is created for storing the evaluation result. At the start of the evaluation, _0 and _1 are Operand::Immediate(Immediate::Scalar(ScalarMaybeUndef::Undef)). This is quite a mouthful: Operand can represent either data stored somewhere in the interpreter memory (Operand::Indirect), or (as an optimization) immediate data stored in-line. And Immediate can either be a single (potentially uninitialized) scalar value (integer or thin pointer), or a pair of two of them. In our case, the single scalar value is not (yet) initialized. When the initialization of _1 is invoked, the value of the FOO constant is required, and triggers another call to tcx.const_eval_*, which will not be shown here. If the evaluation of FOO is successful, 42 will be subtracted from its value 4096 and the result stored in _1 as Operand::Immediate(Immediate::ScalarPair(Scalar::Raw { data: 4054, .. }, Scalar::Raw { data: 0, .. }). The first part of the pair is the computed value, the second part is a bool that's true if an overflow happened. A Scalar::Raw also stores the size (in bytes) of this scalar value; we are eliding that here. The next statement asserts that said boolean is 0. In case the assertion fails, its error message is used for reporting a compile-time error. Since it does not fail, Operand::Immediate(Immediate::Scalar(Scalar::Raw { data: 4054, .. })) is stored in the virtual memory it was allocated before the evaluation. _0 always refers to that location directly. After the evaluation is done, the return value is converted from Operand to ConstValue by op_to_const : the former representation is geared towards what is needed during const evaluation, while ConstValue is shaped by the needs of the remaining parts of the compiler that consume the results of const evaluation. As part of this conversion, for types with scalar values, even if the resulting Operand is Indirect, it will return an immediate ConstValue::Scalar(computed_value) (instead of the usual ConstValue::ByRef). This makes using the result much more efficient and also more convenient, as no further queries need to be executed in order to get at something as simple as a usize. Future evaluations of the same constants will not actually invoke the interpreter, but just use the cached result.","breadcrumbs":"Constant evaluation » Interpreter » Interpreter","id":"1174","title":"Interpreter"},"1175":{"body":"The interpreter's outside-facing datastructures can be found in rustc_middle/src/mir/interpret . This is mainly the error enum and the ConstValue and Scalar types. A ConstValue can be either Scalar (a single Scalar, i.e., integer or thin pointer), Slice (to represent byte slices and strings, as needed for pattern matching) or ByRef, which is used for anything else and refers to a virtual allocation. These allocations can be accessed via the methods on tcx.interpret_interner. A Scalar is either some Raw integer or a pointer; see the next section for more on that. If you are expecting a numeric result, you can use eval_usize (panics on anything that can't be represented as a u64) or try_eval_usize which results in an Option yielding the Scalar if possible.","breadcrumbs":"Constant evaluation » Interpreter » Datastructures","id":"1175","title":"Datastructures"},"1176":{"body":"To support any kind of pointers, the interpreter needs to have a \"virtual memory\" that the pointers can point to. This is implemented in the Memory type. In the simplest model, every global variable, stack variable and every dynamic allocation corresponds to an Allocation in that memory. (Actually using an allocation for every MIR stack variable would be very inefficient; that's why we have Operand::Immediate for stack variables that are both small and never have their address taken. But that is purely an optimization.) Such an Allocation is basically just a sequence of u8 storing the value of each byte in this allocation. (Plus some extra data, see below.) Every Allocation has a globally unique AllocId assigned in Memory. With that, a Pointer consists of a pair of an AllocId (indicating the allocation) and an offset into the allocation (indicating which byte of the allocation the pointer points to). It may seem odd that a Pointer is not just an integer address, but remember that during const evaluation, we cannot know at which actual integer address the allocation will end up -- so we use AllocId as symbolic base addresses, which means we need a separate offset. (As an aside, it turns out that pointers at run-time are more than just integers, too .) These allocations exist so that references and raw pointers have something to point to. There is no global linear heap in which things are allocated, but each allocation (be it for a local variable, a static or a (future) heap allocation) gets its own little memory with exactly the required size. So if you have a pointer to an allocation for a local variable a, there is no possible (no matter how unsafe) operation that you can do that would ever change said pointer to a pointer to a different local variable b. Pointer arithmetic on a will only ever change its offset; the AllocId stays the same. This, however, causes a problem when we want to store a Pointer into an Allocation: we cannot turn it into a sequence of u8 of the right length! AllocId and offset together are twice as big as a pointer \"seems\" to be. This is what the relocation field of Allocation is for: the byte offset of the Pointer gets stored as a bunch of u8, while its AllocId gets stored out-of-band. The two are reassembled when the Pointer is read from memory. The other bit of extra data an Allocation needs is undef_mask for keeping track of which of its bytes are initialized.","breadcrumbs":"Constant evaluation » Interpreter » Memory","id":"1176","title":"Memory"},"1177":{"body":"Memory exists only during evaluation; it gets destroyed when the final value of the constant is computed. In case that constant contains any pointers, those get \"interned\" and moved to a global \"const eval memory\" that is part of TyCtxt. These allocations stay around for the remaining computation and get serialized into the final output (so that dependent crates can use them). Moreover, to also support function pointers, the global memory in TyCtxt can also contain \"virtual allocations\": instead of an Allocation, these contain an Instance. That allows a Pointer to point to either normal data or a function, which is needed to be able to evaluate casts from function pointers to raw pointers. Finally, the GlobalAlloc type used in the global memory also contains a variant Static that points to a particular const or static item. This is needed to support circular statics, where we need to have a Pointer to a static for which we cannot yet have an Allocation as we do not know the bytes of its value.","breadcrumbs":"Constant evaluation » Interpreter » Global memory and exotic allocations","id":"1177","title":"Global memory and exotic allocations"},"1178":{"body":"One common cause of confusion in the interpreter is that being a pointer value and having a pointer type are entirely independent properties. By \"pointer value\", we refer to a Scalar::Ptr containing a Pointer and thus pointing somewhere into the interpreter's virtual memory. This is in contrast to Scalar::Raw, which is just some concrete integer. However, a variable of pointer or reference type , such as *const T or &T, does not have to have a pointer value : it could be obtained by casting or transmuting an integer to a pointer. And similarly, when casting or transmuting a reference to some actual allocation to an integer, we end up with a pointer value (Scalar::Ptr) at integer type (usize). This is a problem because we cannot meaningfully perform integer operations such as division on pointer values.","breadcrumbs":"Constant evaluation » Interpreter » Pointer values vs Pointer types","id":"1178","title":"Pointer values vs Pointer types"},"1179":{"body":"Although the main entry point to constant evaluation is the tcx.const_eval_* functions, there are additional functions in rustc_const_eval/src/const_eval that allow accessing the fields of a ConstValue (ByRef or otherwise). You should never have to access an Allocation directly except for translating it to the compilation target (at the moment just LLVM). The interpreter starts by creating a virtual stack frame for the current constant that is being evaluated. There's essentially no difference between a constant and a function with no arguments, except that constants do not allow local (named) variables at the time of writing this guide. A stack frame is defined by the Frame type in rustc_const_eval/src/interpret/eval_context.rs and contains all the local variables memory (None at the start of evaluation). Each frame refers to the evaluation of either the root constant or subsequent calls to const fn. The evaluation of another constant simply calls tcx.const_eval_*, which produce an entirely new and independent stack frame. The frames are just a Vec, there's no way to actually refer to a Frame's memory even if horrible shenanigans are done via unsafe code. The only memory that can be referred to are Allocations. The interpreter now calls the step method (in rustc_const_eval/src/interpret/step.rs ) until it either returns an error or has no further statements to execute. Each statement will now initialize or modify the locals or the virtual memory referred to by a local. This might require evaluating other constants or statics, which just recursively invokes tcx.const_eval_*.","breadcrumbs":"Constant evaluation » Interpreter » Interpretation","id":"1179","title":"Interpretation"},"118":{"body":"UI tests may have different output depending on certain \"modes\" that the compiler is in. For example, when using the Polonius mode, a test foo.rs will first look for expected output in foo.polonius.stderr, falling back to the usual foo.stderr if not found. The following will run the UI test suite in Polonius mode: ./x test tests/ui --compare-mode=polonius See Compare modes for more details.","breadcrumbs":"Testing the compiler » Running tests » Running tests with different \"compare modes\"","id":"118","title":"Running tests with different \"compare modes\""},"1180":{"body":"Collection Codegen Unit (CGU) partitioning As you probably know, Rust has a very expressive type system that has extensive support for generic types. But of course, assembly is not generic, so we need to figure out the concrete types of all the generics before the code can execute. Different languages handle this problem differently. For example, in some languages, such as Java, we may not know the most precise type of value until runtime. In the case of Java, this is ok because (almost) all variables are reference values anyway (i.e. pointers to a heap allocated object). This flexibility comes at the cost of performance, since all accesses to an object must dereference a pointer. Rust takes a different approach: it monomorphizes all generic types. This means that compiler stamps out a different copy of the code of a generic function for each concrete type needed. For example, if I use a Vec and a Vec in my code, then the generated binary will have two copies of the generated code for Vec: one for Vec and another for Vec. The result is fast programs, but it comes at the cost of compile time (creating all those copies can take a while) and binary size (all those copies might take a lot of space). Monomorphization is the first step in the backend of the Rust compiler.","breadcrumbs":"Monomorphization » Monomorphization","id":"1180","title":"Monomorphization"},"1181":{"body":"First, we need to figure out what concrete types we need for all the generic things in our program. This is called collection , and the code that does this is called the monomorphization collector . Take this example: fn banana() { peach::();\n} fn main() { banana();\n} The monomorphization collector will give you a list of [main, banana, peach::]. These are the functions that will have machine code generated for them. Collector will also add things like statics to that list. See the collector rustdocs for more info. The monomorphization collector is run just before MIR lowering and codegen. rustc_codegen_ssa::base::codegen_crate calls the collect_and_partition_mono_items query, which does monomorphization collection and then partitions them into codegen units .","breadcrumbs":"Monomorphization » Collection","id":"1181","title":"Collection"},"1182":{"body":"For better incremental build times, the CGU partitioner creates two CGU for each source level modules. One is for \"stable\" i.e. non-generic code and the other is more volatile code i.e. monomorphized/specialized instances. For dependencies, consider Crate A and Crate B, such that Crate B depends on Crate A. The following table lists different scenarios for a function in Crate A that might be used by one or more modules in Crate B. Crate A function Behavior Non-generic function Crate A function doesn't appear in any codegen units of Crate B Non-generic #[inline] function Crate A function appears within a single CGU of Crate B, and exists even after post-inlining stage Generic function Regardless of inlining, all monomorphized (specialized) functions from Crate A appear within a single codegen unit for Crate B. The codegen unit exists even after the post inlining stage. Generic #[inline] function - same - For more details about the partitioner read the module level documentation .","breadcrumbs":"Monomorphization » Codegen Unit (CGU) partitioning","id":"1182","title":"Codegen Unit (CGU) partitioning"},"1183":{"body":"Now that we have a list of symbols to generate from the collector, we need to generate some sort of codegen IR. In this chapter, we will assume LLVM IR, since that's what rustc usually uses. The actual monomorphization is performed as we go, while we do the translation. Recall that the backend is started by rustc_codegen_ssa::base::codegen_crate . Eventually, this reaches rustc_codegen_ssa::mir::codegen_mir , which does the lowering from MIR to LLVM IR. The code is split into modules which handle particular MIR primitives: rustc_codegen_ssa::mir::block will deal with translating blocks and their terminators. The most complicated and also the most interesting thing this module does is generating code for function calls, including the necessary unwinding handling IR. rustc_codegen_ssa::mir::statement translates MIR statements. rustc_codegen_ssa::mir::operand translates MIR operands. rustc_codegen_ssa::mir::place translates MIR place references. rustc_codegen_ssa::mir::rvalue translates MIR r-values. Before a function is translated a number of simple and primitive analysis passes will run to help us generate simpler and more efficient LLVM IR. An example of such an analysis pass would be figuring out which variables are SSA-like, so that we can translate them to SSA directly rather than relying on LLVM's mem2reg for those variables. The analysis can be found in rustc_codegen_ssa::mir::analyze . Usually a single MIR basic block will map to a LLVM basic block, with very few exceptions: intrinsic or function calls and less basic MIR statements like assert can result in multiple basic blocks. This is a perfect lede into the non-portable LLVM-specific part of the code generation. Intrinsic generation is fairly easy to understand as it involves very few abstraction levels in between and can be found in rustc_codegen_llvm::intrinsic . Everything else will use the builder interface . This is the code that gets called in the rustc_codegen_ssa::mir::* modules discussed above. TODO: discuss how constants are generated","breadcrumbs":"Lowering MIR » Lowering MIR to a Codegen IR","id":"1183","title":"Lowering MIR to a Codegen IR"},"1184":{"body":"Code generation (or \"codegen\") is the part of the compiler that actually generates an executable binary. Usually, rustc uses LLVM for code generation, but there is also support for Cranelift and GCC . The key is that rustc doesn't implement codegen itself. It's worth noting, though, that in the Rust source code, many parts of the backend have codegen in their names (there are no hard boundaries). NOTE: If you are looking for hints on how to debug code generation bugs, please see this section of the debugging chapter .","breadcrumbs":"Code generation » Code generation","id":"1184","title":"Code generation"},"1185":{"body":"LLVM is \"a collection of modular and reusable compiler and toolchain technologies\". In particular, the LLVM project contains a pluggable compiler backend (also called \"LLVM\"), which is used by many compiler projects, including the clang C compiler and our beloved rustc. LLVM takes input in the form of LLVM IR. It is basically assembly code with additional low-level types and annotations added. These annotations are helpful for doing optimizations on the LLVM IR and outputted machine code. The end result of all this is (at long last) something executable (e.g. an ELF object, an EXE, or wasm). There are a few benefits to using LLVM: We don't have to write a whole compiler backend. This reduces implementation and maintenance burden. We benefit from the large suite of advanced optimizations that the LLVM project has been collecting. We can automatically compile Rust to any of the platforms for which LLVM has support. For example, as soon as LLVM added support for wasm, voila! rustc, clang, and a bunch of other languages were able to compile to wasm! (Well, there was some extra stuff to be done, but we were 90% there anyway). We and other compiler projects benefit from each other. For example, when the Spectre and Meltdown security vulnerabilities were discovered, only LLVM needed to be patched.","breadcrumbs":"Code generation » What is LLVM?","id":"1185","title":"What is LLVM?"},"1186":{"body":"Once LLVM IR for all of the functions and statics, etc is built, it is time to start running LLVM and its optimization passes. LLVM IR is grouped into \"modules\". Multiple \"modules\" can be codegened at the same time to aid in multi-core utilization. These \"modules\" are what we refer to as codegen units . These units were established way back during monomorphization collection phase. Once LLVM produces objects from these modules, these objects are passed to the linker along with, optionally, the metadata object and an archive or an executable is produced. It is not necessarily the codegen phase described above that runs the optimizations. With certain kinds of LTO, the optimization might happen at the linking time instead. It is also possible for some optimizations to happen before objects are passed on to the linker and some to happen during the linking. This all happens towards the very end of compilation. The code for this can be found in rustc_codegen_ssa::back and rustc_codegen_llvm::back . Sadly, this piece of code is not really well-separated into LLVM-dependent code; the rustc_codegen_ssa contains a fair amount of code specific to the LLVM backend. Once these components are done with their work you end up with a number of files in your filesystem corresponding to the outputs you have requested.","breadcrumbs":"Code generation » Running LLVM, linking, and metadata generation","id":"1186","title":"Running LLVM, linking, and metadata generation"},"1187":{"body":"Backports (upstream supported) Backports (upstream not supported) New LLVM Release Updates Caveats and gotchas Rust supports building against multiple LLVM versions: Tip-of-tree for the current LLVM development branch is usually supported within a few days. PRs for such fixes are tagged with llvm-main. The latest released major version is always supported. The one or two preceding major versions are usually supported. By default, Rust uses its own fork in the rust-lang/llvm-project repository . This fork is based on a release/$N.x branch of the upstream project, where $N is either the latest released major version, or the current major version in release candidate phase. The fork is never based on the main development branch. Our LLVM fork only accepts: Backports of changes that have already landed upstream. Workarounds for build issues affecting our CI environment. With the exception of one grandfathered-in patch for SGX enablement, we do not accept functional patches that have not been upstreamed first. There are three types of LLVM updates, with different procedures: Backports while the current major LLVM version is supported. Backports while the current major LLVM version is no longer supported (or the change is not eligible for upstream backport). Update to a new major LLVM version.","breadcrumbs":"Code generation » Updating LLVM » Updating LLVM","id":"1187","title":"Updating LLVM"},"1188":{"body":"While the current major LLVM version is supported upstream, fixes should be backported upstream first, and the release branch then merged back into the Rust fork. Make sure the bugfix is in upstream LLVM. If this hasn't happened already, request a backport to the upstream release branch. If you have LLVM commit access, follow the backport process . Otherwise, open an issue requesting the backport. Continue once the backport has been approved and merged. Identify the branch that rustc is currently using. The src/llvm-project submodule is always pinned to a branch of the rust-lang/llvm-project repository . Fork the rust-lang/llvm-project repository. Check out the appropriate branch (typically named rustc/a.b-yyyy-mm-dd). Add a remote for the upstream repository using git remote add upstream https://github.com/llvm/llvm-project.git and fetch it using git fetch upstream. Merge the upstream/release/$N.x branch. Push this branch to your fork. Send a Pull Request to rust-lang/llvm-project to the same branch as before. Be sure to reference the Rust and/or LLVM issue that you're fixing in the PR description. Wait for the PR to be merged. Send a PR to rust-lang/rust updating the src/llvm-project submodule with your bugfix. This can be done locally with git submodule update --remote src/llvm-project typically. Wait for PR to be merged. An example PR: #59089","breadcrumbs":"Code generation » Updating LLVM » Backports (upstream supported)","id":"1188","title":"Backports (upstream supported)"},"1189":{"body":"Upstream LLVM releases are only supported for two to three months after the GA release. Once upstream backports are no longer accepted, changes should be cherry-picked directly to our fork. Make sure the bugfix is in upstream LLVM. Identify the branch that rustc is currently using. The src/llvm-project submodule is always pinned to a branch of the rust-lang/llvm-project repository . Fork the rust-lang/llvm-project repository. Check out the appropriate branch (typically named rustc/a.b-yyyy-mm-dd). Add a remote for the upstream repository using git remote add upstream https://github.com/llvm/llvm-project.git and fetch it using git fetch upstream. Cherry-pick the relevant commit(s) using git cherry-pick -x. Push this branch to your fork. Send a Pull Request to rust-lang/llvm-project to the same branch as before. Be sure to reference the Rust and/or LLVM issue that you're fixing in the PR description. Wait for the PR to be merged. Send a PR to rust-lang/rust updating the src/llvm-project submodule with your bugfix. This can be done locally with git submodule update --remote src/llvm-project typically. Wait for PR to be merged. An example PR: #59089","breadcrumbs":"Code generation » Updating LLVM » Backports (upstream not supported)","id":"1189","title":"Backports (upstream not supported)"},"119":{"body":"Sometimes it's easier and faster to just run the test by hand. Most tests are just .rs files, so after creating a rustup toolchain , you can do something like: rustc +stage1 tests/ui/issue-1234.rs This is much faster, but doesn't always work. For example, some tests include directives that specify specific compiler flags, or which rely on other crates, and they may not run the same without those options.","breadcrumbs":"Testing the compiler » Running tests » Running tests manually","id":"119","title":"Running tests manually"},"1190":{"body":"Unlike bugfixes, updating to a new release of LLVM typically requires a lot more work. This is where we can't reasonably cherry-pick commits backwards, so we need to do a full update. There's a lot of stuff to do here, so let's go through each in detail. LLVM announces that its latest release version has branched. This will show up as a branch in the llvm/llvm-project repository , typically named release/$N.x, where $N is the version of LLVM that's being released. Create a new branch in the rust-lang/llvm-project repository from this release/$N.x branch, and name it rustc/a.b-yyyy-mm-dd, where a.b is the current version number of LLVM in-tree at the time of the branch, and the remaining part is the current date. Apply Rust-specific patches to the llvm-project repository. All features and bugfixes are upstream, but there's often some weird build-related patches that don't make sense to upstream. These patches are typically the latest patches in the rust-lang/llvm-project branch that rustc is currently using. Build the new LLVM in the rust repository. To do this, you'll want to update the src/llvm-project repository to your branch, and the revision you've created. It's also typically a good idea to update .gitmodules with the new branch name of the LLVM submodule. Make sure you've committed changes to src/llvm-project to ensure submodule updates aren't reverted. Some commands you should execute are: ./x build src/llvm-project - test that LLVM still builds ./x build - build the rest of rustc You'll likely need to update llvm-wrapper/*.cpp to compile with updated LLVM bindings. Note that you should use #ifdef and such to ensure that the bindings still compile on older LLVM versions. Note that profile = \"compiler\" and other defaults set by ./x setup download LLVM from CI instead of building it from source. You should disable this temporarily to make sure your changes are being used. This is done by having the following setting in bootstrap.toml: [llvm]\ndownload-ci-llvm = false Test for regressions across other platforms. LLVM often has at least one bug for non-tier-1 architectures, so it's good to do some more testing before sending this to bors! If you're low on resources you can send the PR as-is now to bors, though, and it'll get tested anyway. Ideally, build LLVM and test it on a few platforms: Linux macOS Windows Afterwards, run some docker containers that CI also does: ./src/ci/docker/run.sh wasm32 ./src/ci/docker/run.sh arm-android ./src/ci/docker/run.sh dist-various-1 ./src/ci/docker/run.sh dist-various-2 ./src/ci/docker/run.sh armhf-gnu Prepare a PR to rust-lang/rust. Work with maintainers of rust-lang/llvm-project to get your commit in a branch of that repository, and then you can send a PR to rust-lang/rust. You'll change at least src/llvm-project and will likely also change llvm-wrapper as well. For prior art, here are some previous LLVM updates: LLVM 17 LLVM 18 LLVM 19 LLVM 20 Note that sometimes it's easiest to land llvm-wrapper compatibility as a PR before actually updating src/llvm-project. This way, while you're working through LLVM issues, others interested in trying out the new LLVM can benefit from work you've done to update the C++ bindings. Over the next few months, LLVM will continually push commits to its release/a.b branch. We will often want to have those bug fixes as well. The merge process for that is to use git merge itself to merge LLVM's release/a.b branch with the branch created in step 2. This is typically done multiple times when necessary while LLVM's release branch is baking. LLVM then announces the release of version a.b. After LLVM's official release, we follow the process of creating a new branch on the rust-lang/llvm-project repository again, this time with a new date. It is only then that the PR to update Rust to use that version is merged. The commit history of rust-lang/llvm-project should look much cleaner as a git rebase is done, where just a few Rust-specific commits are stacked on top of stock LLVM's release branch.","breadcrumbs":"Code generation » Updating LLVM » New LLVM Release Updates","id":"1190","title":"New LLVM Release Updates"},"1191":{"body":"Ideally the above instructions are pretty smooth, but here's some caveats to keep in mind while going through them: LLVM bugs are hard to find, don't hesitate to ask for help! Bisection is definitely your friend here (yes LLVM takes forever to build, yet bisection is still your friend). Note that you can make use of Dev Desktops , which is an initiative to provide the contributors with remote access to powerful hardware. If you've got general questions, wg-llvm can help you out. Creating branches is a privileged operation on GitHub, so you'll need someone with write access to create the branches for you most likely.","breadcrumbs":"Code generation » Updating LLVM » Caveats and gotchas","id":"1191","title":"Caveats and gotchas"},"1192":{"body":"NOTE: If you are looking for info about code generation, please see this chapter instead. This section is about debugging compiler bugs in code generation (e.g. why the compiler generated some piece of code or crashed in LLVM). LLVM is a big project on its own that probably needs to have its own debugging document (not that I could find one). But here are some tips that are important in a rustc context:","breadcrumbs":"Code generation » Debugging LLVM » Debugging LLVM","id":"1192","title":"Debugging LLVM"},"1193":{"body":"As a general rule, compilers generate lots of information from analyzing code. Thus, a useful first step is usually to find a minimal example. One way to do this is to create a new crate that reproduces the issue (e.g. adding whatever crate is at fault as a dependency, and using it from there) minimize the crate by removing external dependencies; that is, moving everything relevant to the new crate further minimize the issue by making the code shorter (there are tools that help with this like creduce) For more discussion on methodology for steps 2 and 3 above, there is an epic blog post from pnkfelix specifically about Rust program minimization.","breadcrumbs":"Code generation » Debugging LLVM » Minimize the example","id":"1193","title":"Minimize the example"},"1194":{"body":"The official compilers (including nightlies) have LLVM assertions disabled, which means that LLVM assertion failures can show up as compiler crashes (not ICEs but \"real\" crashes) and other sorts of weird behavior. If you are encountering these, it is a good idea to try using a compiler with LLVM assertions enabled - either an \"alt\" nightly or a compiler you build yourself by setting [llvm] assertions=true in your bootstrap.toml - and see whether anything turns up. The rustc build process builds the LLVM tools into ./build//llvm/bin. They can be called directly. These tools include: llc , which compiles bitcode (.bc files) to executable code; this can be used to replicate LLVM backend bugs. opt , a bitcode transformer that runs LLVM optimization passes. bugpoint , which reduces large test cases to small, useful ones. and many others, some of which are referenced in the text below. By default, the Rust build system does not check for changes to the LLVM source code or its build configuration settings. So, if you need to rebuild the LLVM that is linked into rustc, first delete the file .llvm-stamp, which should be located in build//llvm/. The default rustc compilation pipeline has multiple codegen units, which is hard to replicate manually and means that LLVM is called multiple times in parallel. If you can get away with it (i.e. if it doesn't make your bug disappear), passing -C codegen-units=1 to rustc will make debugging easier.","breadcrumbs":"Code generation » Debugging LLVM » Enable LLVM internal checks","id":"1194","title":"Enable LLVM internal checks"},"1195":{"body":"For rustc to generate LLVM IR, you need to pass the --emit=llvm-ir flag. If you are building via cargo, use the RUSTFLAGS environment variable (e.g. RUSTFLAGS='--emit=llvm-ir'). This causes rustc to spit out LLVM IR into the target directory. cargo llvm-ir [options] path spits out the LLVM IR for a particular function at path. (cargo install cargo-asm installs cargo asm and cargo llvm-ir). --build-type=debug emits code for debug builds. There are also other useful options. Also, debug info in LLVM IR can clutter the output a lot: RUSTFLAGS=\"-C debuginfo=0\" is really useful. RUSTFLAGS=\"-C save-temps\" outputs LLVM bitcode (not the same as IR) at different stages during compilation, which is sometimes useful. The output LLVM bitcode will be in .bc files in the compiler's output directory, set via the --out-dir DIR argument to rustc. If you are hitting an assertion failure or segmentation fault from the LLVM backend when invoking rustc itself, it is a good idea to try passing each of these .bc files to the llc command, and see if you get the same failure. (LLVM developers often prefer a bug reduced to a .bc file over one that uses a Rust crate for its minimized reproduction.) To get human readable versions of the LLVM bitcode, one just needs to convert the bitcode (.bc) files to .ll files using llvm-dis, which should be in the target local compilation of rustc. Note that rustc emits different IR depending on whether -O is enabled, even without LLVM's optimizations, so if you want to play with the IR rustc emits, you should: $ rustc +local my-file.rs --emit=llvm-ir -O -C no-prepopulate-passes \\ -C codegen-units=1\n$ OPT=./build/$TRIPLE/llvm/bin/opt\n$ $OPT -S -O2 < my-file.ll > my If you just want to get the LLVM IR during the LLVM pipeline, to e.g. see which IR causes an optimization-time assertion to fail, or to see when LLVM performs a particular optimization, you can pass the rustc flag -C llvm-args=-print-after-all, and possibly add -C llvm-args='-filter-print-funcs=EXACT_FUNCTION_NAME (e.g. -C llvm-args='-filter-print-funcs=_ZN11collections3str21_$LT$impl$u20$str$GT$\\ 7replace17hbe10ea2e7c809b0bE'). That produces a lot of output into standard error, so you'll want to pipe that to some file. Also, if you are using neither -filter-print-funcs nor -C codegen-units=1, then, because the multiple codegen units run in parallel, the printouts will mix together and you won't be able to read anything. One caveat to the aforementioned methodology: the -print family of options to LLVM only prints the IR unit that the pass runs on (e.g., just a function), and does not include any referenced declarations, globals, metadata, etc. This means you cannot in general feed the output of -print into llc to reproduce a given problem. Within LLVM itself, calling F.getParent()->dump() at the beginning of SafeStackLegacyPass::runOnFunction will dump the whole module, which may provide better basis for reproduction. (However, you should be able to get that same dump from the .bc files dumped by -C save-temps.) If you want just the IR for a specific function (say, you want to see why it causes an assertion or doesn't optimize correctly), you can use llvm-extract, e.g. $ ./build/$TRIPLE/llvm/bin/llvm-extract \\ -func='_ZN11collections3str21_$LT$impl$u20$str$GT$7replace17hbe10ea2e7c809b0bE' \\ -S \\ < unextracted.ll \\ > extracted.ll","breadcrumbs":"Code generation » Debugging LLVM » Get your hands on raw LLVM input","id":"1195","title":"Get your hands on raw LLVM input"},"1196":{"body":"If you are seeing incorrect behavior due to an optimization pass, a very handy LLVM option is -opt-bisect-limit, which takes an integer denoting the index value of the highest pass to run. Index values for taken passes are stable from run to run; by coupling this with software that automates bisecting the search space based on the resulting program, an errant pass can be quickly determined. When an -opt-bisect-limit is specified, all runs are displayed to standard error, along with their index and output indicating if the pass was run or skipped. Setting the limit to an index of -1 (e.g., RUSTFLAGS=\"-C llvm-args=-opt-bisect-limit=-1\") will show all passes and their corresponding index values. If you want to play with the optimization pipeline, you can use the opt tool from ./build//llvm/bin/ with the LLVM IR emitted by rustc. When investigating the implementation of LLVM itself, you should be aware of its internal debug infrastructure . This is provided in LLVM Debug builds, which you enable for rustc LLVM builds by changing this setting in the bootstrap.toml: [llvm]\n# Indicates whether the LLVM assertions are enabled or not\nassertions = true # Indicates whether the LLVM build is a Release or Debug build\noptimize = false The quick summary is: Setting assertions=true enables coarse-grain debug messaging. beyond that, setting optimize=false enables fine-grain debug messaging. LLVM_DEBUG(dbgs() << msg) in LLVM is like debug!(msg) in rustc. The -debug option turns on all messaging; it is like setting the environment variable RUSTC_LOG=debug in rustc. The -debug-only=, variant is more selective; it is like setting the environment variable RUSTC_LOG=path1,path2 in rustc.","breadcrumbs":"Code generation » Debugging LLVM » Investigate LLVM optimization passes","id":"1196","title":"Investigate LLVM optimization passes"},"1197":{"body":"If you have some questions, head over to the rust-lang Zulip and specifically the #t-compiler/wg-llvm stream.","breadcrumbs":"Code generation » Debugging LLVM » Getting help and asking questions","id":"1197","title":"Getting help and asking questions"},"1198":{"body":"The -C help and -Z help compiler switches will list out a variety of interesting options you may find useful. Here are a few of the most common that pertain to LLVM development (some of them are employed in the tutorial above): The --emit llvm-ir option emits a .ll file with LLVM IR in textual format The --emit llvm-bc option emits in bytecode format (.bc) Passing -C llvm-args= allows passing pretty much all the options that tools like llc and opt would accept; e.g. -C llvm-args=-print-before-all to print IR before every LLVM pass. The -C no-prepopulate-passes will avoid pre-populate the LLVM pass manager with a list of passes. This will allow you to view the LLVM IR that rustc generates, not the LLVM IR after optimizations. The -C passes=val option allows you to supply a space separated list of extra LLVM passes to run The -C save-temps option saves all temporary output files during compilation The -Z print-llvm-passes option will print out LLVM optimization passes being run The -Z time-llvm-passes option measures the time of each LLVM pass The -Z verify-llvm-ir option will verify the LLVM IR for correctness The -Z no-parallel-backend will disable parallel compilation of distinct compilation units The -Z llvm-time-trace option will output a Chrome profiler compatible JSON file which contains details and timings for LLVM passes. The -C llvm-args=-opt-bisect-limit= option allows for bisecting LLVM optimizations.","breadcrumbs":"Code generation » Debugging LLVM » Compiler options to know and love","id":"1198","title":"Compiler options to know and love"},"1199":{"body":"When filing an LLVM bug report, you will probably want some sort of minimal working example that demonstrates the problem. The Godbolt compiler explorer is really helpful for this. Once you have some LLVM IR for the problematic code (see above), you can create a minimal working example with Godbolt. Go to llvm.godbolt.org . Choose LLVM-IR as programming language. Use llc to compile the IR to a particular target as is: There are some useful flags: -mattr enables target features, -march= selects the target, -mcpu= selects the CPU, etc. Commands like llc -march=help output all architectures available, which is useful because sometimes the Rust arch names and the LLVM names do not match. If you have compiled rustc yourself somewhere, in the target directory you have binaries for llc, opt, etc. If you want to optimize the LLVM-IR, you can use opt to see how the LLVM optimizations transform it. Once you have a godbolt link demonstrating the issue, it is pretty easy to fill in an LLVM bug. Just visit their github issues page .","breadcrumbs":"Code generation » Debugging LLVM » Filing LLVM bug reports","id":"1199","title":"Filing LLVM bug reports"},"12":{"body":"There are a bunch of other projects that you can contribute to outside of the rust-lang/rust repo, including cargo, miri, rustup, and many others. These repos might have their own contributing guidelines and procedures. Many of them are owned by working groups. For more info, see the documentation in those repos' READMEs.","breadcrumbs":"Getting Started » Contributing code to other Rust projects","id":"12","title":"Contributing code to other Rust projects"},"120":{"body":"Tests may be run on a remote machine (e.g. to test builds for a different architecture). This is done using remote-test-client on the build machine to send test programs to remote-test-server running on the remote machine. remote-test-server executes the test programs and sends the results back to the build machine. remote-test-server provides unauthenticated remote code execution so be careful where it is used. To do this, first build remote-test-server for the remote machine, e.g. for RISC-V ./x build src/tools/remote-test-server --target riscv64gc-unknown-linux-gnu The binary will be created at ./build/host/stage2-tools/$TARGET_ARCH/release/remote-test-server. Copy this over to the remote machine. On the remote machine, run the remote-test-server with the --bind 0.0.0.0:12345 flag (and optionally -v for verbose output). Output should look like this: $ ./remote-test-server -v --bind 0.0.0.0:12345\nstarting test server\nlistening on 0.0.0.0:12345! Note that binding the server to 0.0.0.0 will allow all hosts able to reach your machine to execute arbitrary code on your machine. We strongly recommend either setting up a firewall to block external access to port 12345, or to use a more restrictive IP address when binding. You can test if the remote-test-server is working by connecting to it and sending ping\\n. It should reply pong: $ nc $REMOTE_IP 12345\nping\npong To run tests using the remote runner, set the TEST_DEVICE_ADDR environment variable then use x as usual. For example, to run ui tests for a RISC-V machine with the IP address 1.2.3.4 use export TEST_DEVICE_ADDR=\"1.2.3.4:12345\"\n./x test tests/ui --target riscv64gc-unknown-linux-gnu If remote-test-server was run with the verbose flag, output on the test machine may look something like [...]\nrun \"/tmp/work/test1007/a\"\nrun \"/tmp/work/test1008/a\"\nrun \"/tmp/work/test1009/a\"\nrun \"/tmp/work/test1010/a\"\nrun \"/tmp/work/test1011/a\"\nrun \"/tmp/work/test1012/a\"\nrun \"/tmp/work/test1013/a\"\nrun \"/tmp/work/test1014/a\"\nrun \"/tmp/work/test1015/a\"\nrun \"/tmp/work/test1016/a\"\nrun \"/tmp/work/test1017/a\"\nrun \"/tmp/work/test1018/a\"\n[...] Tests are built on the machine running x not on the remote machine. Tests which fail to build unexpectedly (or ui tests producing incorrect build output) may fail without ever running on the remote machine.","breadcrumbs":"Testing the compiler » Running tests » Running tests on a remote machine","id":"120","title":"Running tests on a remote machine"},"1200":{"body":"Once you've identified the bug as an LLVM bug, you will sometimes find that it has already been reported and fixed in LLVM, but we haven't gotten the fix yet (or perhaps you are familiar enough with LLVM to fix it yourself). In that case, we can sometimes opt to port the fix for the bug directly to our own LLVM fork, so that rustc can use it more easily. Our fork of LLVM is maintained in rust-lang/llvm-project . Once you've landed the fix there, you'll also need to land a PR modifying our submodule commits -- ask around on Zulip for help.","breadcrumbs":"Code generation » Debugging LLVM » Porting bug fixes from LLVM","id":"1200","title":"Porting bug fixes from LLVM"},"1201":{"body":"Refactoring of rustc_codegen_llvm State of the code before the refactoring Generic types and structures Traits and interface State of the code after the refactoring rustc_codegen_ssa provides an abstract interface for all backends to implement, namely LLVM, Cranelift , and GCC . Below is some background information on the refactoring that created this abstract interface.","breadcrumbs":"Code generation » Backend Agnostic Codegen » Backend Agnostic Codegen","id":"1201","title":"Backend Agnostic Codegen"},"1202":{"body":"by Denis Merigoux, October 23rd 2018","breadcrumbs":"Code generation » Backend Agnostic Codegen » Refactoring of rustc_codegen_llvm","id":"1202","title":"Refactoring of rustc_codegen_llvm"},"1203":{"body":"All the code related to the compilation of MIR into LLVM IR was contained inside the rustc_codegen_llvm crate. Here is the breakdown of the most important elements: the back folder (7,800 LOC) implements the mechanisms for creating the different object files and archive through LLVM, but also the communication mechanisms for parallel code generation; the debuginfo (3,200 LOC) folder contains all code that passes debug information down to LLVM; the llvm (2,200 LOC) folder defines the FFI necessary to communicate with LLVM using the C++ API; the mir (4,300 LOC) folder implements the actual lowering from MIR to LLVM IR; the base.rs (1,300 LOC) file contains some helper functions but also the high-level code that launches the code generation and distributes the work. the builder.rs (1,200 LOC) file contains all the functions generating individual LLVM IR instructions inside a basic block; the common.rs (450 LOC) contains various helper functions and all the functions generating LLVM static values; the type_.rs (300 LOC) defines most of the type translations to LLVM IR. The goal of this refactoring is to separate inside this crate code that is specific to the LLVM from code that can be reused for other rustc backends. For instance, the mir folder is almost entirely backend-specific but it relies heavily on other parts of the crate. The separation of the code must not affect the logic of the code nor its performance. For these reasons, the separation process involves two transformations that have to be done at the same time for the resulting code to compile: replace all the LLVM-specific types by generics inside function signatures and structure definitions; encapsulate all functions calling the LLVM FFI inside a set of traits that will define the interface between backend-agnostic code and the backend. While the LLVM-specific code will be left in rustc_codegen_llvm, all the new traits and backend-agnostic code will be moved in rustc_codegen_ssa (name suggestion by @eddyb).","breadcrumbs":"Code generation » Backend Agnostic Codegen » State of the code before the refactoring","id":"1203","title":"State of the code before the refactoring"},"1204":{"body":"@irinagpopa started to parametrize the types of rustc_codegen_llvm by a generic Value type, implemented in LLVM by a reference &'ll Value. This work has been extended to all structures inside the mir folder and elsewhere, as well as for LLVM's BasicBlock and Type types. The two most important structures for the LLVM codegen are CodegenCx and Builder. They are parametrized by multiple lifetime parameters and the type for Value. struct CodegenCx<'ll, 'tcx> { /* ... */\n} struct Builder<'a, 'll, 'tcx> { cx: &'a CodegenCx<'ll, 'tcx>, /* ... */\n} CodegenCx is used to compile one codegen-unit that can contain multiple functions, whereas Builder is created to compile one basic block. The code in rustc_codegen_llvm has to deal with multiple explicit lifetime parameters, that correspond to the following: 'tcx is the longest lifetime, that corresponds to the original TyCtxt containing the program's information; 'a is a short-lived reference of a CodegenCx or another object inside a struct; 'll is the lifetime of references to LLVM objects such as Value or Type. Although there are already many lifetime parameters in the code, making it generic uncovered situations where the borrow-checker was passing only due to the special nature of the LLVM objects manipulated (they are extern pointers). For instance, an additional lifetime parameter had to be added to LocalAnalyser in analyse.rs, leading to the definition: struct LocalAnalyzer<'mir, 'a, 'tcx> { /* ... */\n} However, the two most important structures CodegenCx and Builder are not defined in the backend-agnostic code. Indeed, their content is highly specific of the backend and it makes more sense to leave their definition to the backend implementor than to allow just a narrow spot via a generic field for the backend's context.","breadcrumbs":"Code generation » Backend Agnostic Codegen » Generic types and structures","id":"1204","title":"Generic types and structures"},"1205":{"body":"Because they have to be defined by the backend, CodegenCx and Builder will be the structures implementing all the traits defining the backend's interface. These traits are defined in the folder rustc_codegen_ssa/traits and all the backend-agnostic code is parametrized by them. For instance, let us explain how a function in base.rs is parametrized: pub fn codegen_instance<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>>( cx: &'a Bx::CodegenCx, instance: Instance<'tcx>\n) { /* ... */\n} In this signature, we have the two lifetime parameters explained earlier and the master type Bx which satisfies the trait BuilderMethods corresponding to the interface satisfied by the Builder struct. The BuilderMethods defines an associated type Bx::CodegenCx that itself satisfies the CodegenMethods traits implemented by the struct CodegenCx. On the trait side, here is an example with part of the definition of BuilderMethods in traits/builder.rs: pub trait BuilderMethods<'a, 'tcx>: HasCodegen<'tcx> + DebugInfoBuilderMethods<'tcx> + ArgTypeMethods<'tcx> + AbiBuilderMethods<'tcx> + IntrinsicCallMethods<'tcx> + AsmBuilderMethods<'tcx>\n{ fn new_block<'b>( cx: &'a Self::CodegenCx, llfn: Self::Function, name: &'b str ) -> Self; /* ... */ fn cond_br( &mut self, cond: Self::Value, then_llbb: Self::BasicBlock, else_llbb: Self::BasicBlock, ); /* ... */\n} Finally, a master structure implementing the ExtraBackendMethods trait is used for high-level codegen-driving functions like codegen_crate in base.rs. For LLVM, it is the empty LlvmCodegenBackend. ExtraBackendMethods should be implemented by the same structure that implements the CodegenBackend defined in rustc_codegen_utils/codegen_backend.rs. During the traitification process, certain functions have been converted from methods of a local structure to methods of CodegenCx or Builder and a corresponding self parameter has been added. Indeed, LLVM stores information internally that it can access when called through its API. This information does not show up in a Rust data structure carried around when these methods are called. However, when implementing a Rust backend for rustc, these methods will need information from CodegenCx, hence the additional parameter (unused in the LLVM implementation of the trait).","breadcrumbs":"Code generation » Backend Agnostic Codegen » Traits and interface","id":"1205","title":"Traits and interface"},"1206":{"body":"The traits offer an API which is very similar to the API of LLVM. This is not the best solution since LLVM has a very special way of doing things: when adding another backend, the traits definition might be changed in order to offer more flexibility. However, the current separation between backend-agnostic and LLVM-specific code has allowed the reuse of a significant part of the old rustc_codegen_llvm. Here is the new LOC breakdown between backend-agnostic (BA) and LLVM for the most important elements: back folder: 3,800 (BA) vs 4,100 (LLVM); mir folder: 4,400 (BA) vs 0 (LLVM); base.rs: 1,100 (BA) vs 250 (LLVM); builder.rs: 1,400 (BA) vs 0 (LLVM); common.rs: 350 (BA) vs 350 (LLVM); The debuginfo folder has been left almost untouched by the splitting and is specific to LLVM. Only its high-level features have been traitified. The new traits folder has 1500 LOC only for trait definitions. Overall, the 27,000 LOC-sized old rustc_codegen_llvm code has been split into the new 18,500 LOC-sized new rustc_codegen_llvm and the 12,000 LOC-sized rustc_codegen_ssa. We can say that this refactoring allowed the reuse of approximately 10,000 LOC that would otherwise have had to be duplicated between the multiple backends of rustc. The refactored version of rustc's backend introduced no regression over the test suite nor in performance benchmark, which is in coherence with the nature of the refactoring that used only compile-time parametricity (no trait objects).","breadcrumbs":"Code generation » Backend Agnostic Codegen » State of the code after the refactoring","id":"1206","title":"State of the code after the refactoring"},"1207":{"body":"Motivating example Reading caller location Caller location in const Finding the right Location Allocating a static Location Generating code for #[track_caller] callees Codegen examples Dynamic dispatch The attribute Traits Background/History Approved in RFC 2091 , this feature enables the accurate reporting of caller location during panics initiated from functions like Option::unwrap, Result::expect, and Index::index. This feature adds the #[track_caller] attribute for functions, the caller_location intrinsic, and the stabilization-friendly core::panic::Location::caller wrapper.","breadcrumbs":"Code generation » Implicit caller location » Implicit caller location","id":"1207","title":"Implicit caller location"},"1208":{"body":"Take this example program: fn main() { let foo: Option<()> = None; foo.unwrap(); // this should produce a useful panic message!\n} Prior to Rust 1.42, panics like this unwrap() printed a location in core: $ rustc +1.41.0 example.rs; example.exe\nthread 'main' panicked at 'called `Option::unwrap()` on a `None` value',...core\\macros\\mod.rs:15:40\nnote: run with `RUST_BACKTRACE=1` environment variable to display a backtrace. As of 1.42, we get a much more helpful message: $ rustc +1.42.0 example.rs; example.exe\nthread 'main' panicked at 'called `Option::unwrap()` on a `None` value', example.rs:3:5\nnote: run with `RUST_BACKTRACE=1` environment variable to display a backtrace These error messages are achieved through a combination of changes to panic! internals to make use of core::panic::Location::caller and a number of #[track_caller] annotations in the standard library which propagate caller information.","breadcrumbs":"Code generation » Implicit caller location » Motivating example","id":"1208","title":"Motivating example"},"1209":{"body":"Previously, panic! made use of the file!(), line!(), and column!() macros to construct a Location pointing to where the panic occurred. These macros couldn't be given an overridden location, so functions which intentionally invoked panic! couldn't provide their own location, hiding the actual source of error. Internally, panic!() now calls core::panic::Location::caller() to find out where it was expanded. This function is itself annotated with #[track_caller] and wraps the caller_location compiler intrinsic implemented by rustc. This intrinsic is easiest explained in terms of how it works in a const context.","breadcrumbs":"Code generation » Implicit caller location » Reading caller location","id":"1209","title":"Reading caller location"},"121":{"body":"Some platforms are tested via an emulator for architectures that aren't readily available. For architectures where the standard library is well supported and the host operating system supports TCP/IP networking, see the above instructions for testing on a remote machine (in this case the remote machine is emulated). There is also a set of tools for orchestrating running the tests within the emulator. Platforms such as arm-android and arm-unknown-linux-gnueabihf are set up to automatically run the tests under emulation on GitHub Actions. The following will take a look at how a target's tests are run under emulation. The Docker image for armhf-gnu includes QEMU to emulate the ARM CPU architecture. Included in the Rust tree are the tools remote-test-client and remote-test-server which are programs for sending test programs and libraries to the emulator, and running the tests within the emulator, and reading the results. The Docker image is set up to launch remote-test-server and the build tools use remote-test-client to communicate with the server to coordinate running tests (see src/bootstrap/src/core/build_steps/test.rs ). TODO Is there any support for using an iOS emulator? It's also unclear to me how the wasm or asm.js tests are run.","breadcrumbs":"Testing the compiler » Running tests » Testing on emulators","id":"121","title":"Testing on emulators"},"1210":{"body":"There are two main phases to returning the caller location in a const context: walking up the stack to find the right location and allocating a const value to return.","breadcrumbs":"Code generation » Implicit caller location » Caller location in const","id":"1210","title":"Caller location in const"},"1211":{"body":"In a const context we \"walk up the stack\" from where the intrinsic is invoked, stopping when we reach the first function call in the stack which does not have the attribute. This walk is in InterpCx::find_closest_untracked_caller_location() . Starting at the bottom, we iterate up over stack Frame s in the InterpCx::stack , calling InstanceKind::requires_caller_location on the Instances from each Frame . We stop once we find one that returns false and return the span of the previous frame which was the \"topmost\" tracked function.","breadcrumbs":"Code generation » Implicit caller location » Finding the right Location","id":"1211","title":"Finding the right Location"},"1212":{"body":"Once we have a Span, we need to allocate static memory for the Location, which is performed by the TyCtxt::const_caller_location() query. Internally this calls InterpCx::alloc_caller_location() and results in a unique memory kind (MemoryKind::CallerLocation). The SSA codegen backend is able to emit code for these same values, and we use this code there as well. Once our Location has been allocated in static memory, our intrinsic returns a reference to it.","breadcrumbs":"Code generation » Implicit caller location » Allocating a static Location","id":"1212","title":"Allocating a static Location"},"1213":{"body":"To generate efficient code for a tracked function and its callers, we need to provide the same behavior from the intrinsic's point of view without having a stack to walk up at runtime. We invert the approach: as we grow the stack down we pass an additional argument to calls of tracked functions rather than walking up the stack when the intrinsic is called. That additional argument can be returned wherever the caller location is queried. The argument we append is of type &'static core::panic::Location<'static>. A reference was chosen to avoid unnecessary copying because a pointer is a third the size of std::mem::size_of::() == 24 at time of writing. When generating a call to a function which is tracked, we pass the location argument the value of FunctionCx::get_caller_location . If the calling function is tracked, get_caller_location returns the local in FunctionCx::caller_location which was populated by the current caller's caller. In these cases the intrinsic \"returns\" a reference which was actually provided in an argument to its caller. If the calling function is not tracked, get_caller_location allocates a Location static from the current Span and returns a reference to that. We more efficiently achieve the same behavior as a loop starting from the bottom by passing a single &Location value through the caller_location fields of multiple FunctionCxs as we grow the stack downward.","breadcrumbs":"Code generation » Implicit caller location » Generating code for #[track_caller] callees","id":"1213","title":"Generating code for #[track_caller] callees"},"1214":{"body":"What does this transformation look like in practice? Take this example which uses the new feature: #![feature(track_caller)]\nuse std::panic::Location; #[track_caller]\nfn print_caller() { println!(\"called from {}\", Location::caller());\n} fn main() { print_caller();\n} Here print_caller() appears to take no arguments, but we compile it to something like this: #![feature(panic_internals)]\nuse std::panic::Location; fn print_caller(caller: &Location) { println!(\"called from {}\", caller);\n} fn main() { print_caller(&Location::internal_constructor(file!(), line!(), column!()));\n}","breadcrumbs":"Code generation » Implicit caller location » Codegen examples","id":"1214","title":"Codegen examples"},"1215":{"body":"In codegen contexts we have to modify the callee ABI to pass this information down the stack, but the attribute expressly does not modify the type of the function. The ABI change must be transparent to type checking and remain sound in all uses. Direct calls to tracked functions will always know the full codegen flags for the callee and can generate appropriate code. Indirect callers won't have this information and it's not encoded in the type of the function pointer they call, so we generate a ReifyShim around the function whenever taking a pointer to it. This shim isn't able to report the actual location of the indirect call (the function's definition site is reported instead), but it prevents miscompilation and is probably the best we can do without modifying fully-stabilized type signatures. Note: We always emit a ReifyShim when taking a pointer to a tracked function. While the constraint here is imposed by codegen contexts, we don't know during MIR construction of the shim whether we'll be called in a const context (safe to ignore shim) or in a codegen context (unsafe to ignore shim). Even if we did know, the results from const and codegen contexts must agree.","breadcrumbs":"Code generation » Implicit caller location » Dynamic dispatch","id":"1215","title":"Dynamic dispatch"},"1216":{"body":"The #[track_caller] attribute is checked alongside other codegen attributes to ensure the function: has the \"Rust\" ABI (as opposed to e.g., \"C\") is not a closure is not #[naked] If the use is valid, we set CodegenFnAttrsFlags::TRACK_CALLER . This flag influences the return value of InstanceKind::requires_caller_location which is in turn used in both const and codegen contexts to ensure correct propagation.","breadcrumbs":"Code generation » Implicit caller location » The attribute","id":"1216","title":"The attribute"},"1217":{"body":"When applied to trait method implementations, the attribute works as it does for regular functions. When applied to a trait method prototype, the attribute applies to all implementations of the method. When applied to a default trait method implementation, the attribute takes effect on that implementation and any overrides. Examples: #![feature(track_caller)] macro_rules! assert_tracked { () => {{ let location = std::panic::Location::caller(); assert_eq!(location.file(), file!()); assert_ne!(location.line(), line!(), \"line should be outside this fn\"); println!(\"called at {}\", location); }};\n} trait TrackedFourWays { /// All implementations inherit `#[track_caller]`. #[track_caller] fn blanket_tracked(); /// Implementors can annotate themselves. fn local_tracked(); /// This implementation is tracked (overrides are too). #[track_caller] fn default_tracked() { assert_tracked!(); } /// Overrides of this implementation are tracked (it is too). #[track_caller] fn default_tracked_to_override() { assert_tracked!(); }\n} /// This impl uses the default impl for `default_tracked` and provides its own for\n/// `default_tracked_to_override`.\nimpl TrackedFourWays for () { fn blanket_tracked() { assert_tracked!(); } #[track_caller] fn local_tracked() { assert_tracked!(); } fn default_tracked_to_override() { assert_tracked!(); }\n} fn main() { <() as TrackedFourWays>::blanket_tracked(); <() as TrackedFourWays>::default_tracked(); <() as TrackedFourWays>::default_tracked_to_override(); <() as TrackedFourWays>::local_tracked();\n}","breadcrumbs":"Code generation » Implicit caller location » Traits","id":"1217","title":"Traits"},"1218":{"body":"Broadly speaking, this feature's goal is to improve common Rust error messages without breaking stability guarantees, requiring modifications to end-user source, relying on platform-specific debug-info, or preventing user-defined types from having the same error-reporting benefits. Improving the output of these panics has been a goal of proposals since at least mid-2016 (see non-viable alternatives in the approved RFC for details). It took two more years until RFC 2091 was approved, much of its rationale for this feature's design having been discovered through the discussion around several earlier proposals. The design in the original RFC limited itself to implementations that could be done inside the compiler at the time without significant refactoring. However in the year and a half between the approval of the RFC and the actual implementation work, a revised design was proposed and written up on the tracking issue. During the course of implementing that, it was also discovered that an implementation was possible without modifying the number of arguments in a function's MIR, which would simplify later stages and unlock use in traits. Because the RFC's implementation strategy could not readily support traits, the semantics were not originally specified. They have since been implemented following the path which seemed most correct to the author and reviewers.","breadcrumbs":"Code generation » Implicit caller location » Background/History","id":"1218","title":"Background/History"},"1219":{"body":"When the compiler sees a reference to an external crate, it needs to load some information about that crate. This chapter gives an overview of that process, and the supported file formats for crate libraries.","breadcrumbs":"Libraries and metadata » Libraries and metadata","id":"1219","title":"Libraries and metadata"},"122":{"body":"First thing to know is that it only supports linux x86_64 at the moment. We will extend its support later on. You need to update codegen-backends value in your bootstrap.toml file in the [rust] section and add \"gcc\" in the array: codegen-backends = [\"llvm\", \"gcc\"] Then you need to install libgccjit 12. For example with apt: apt install libgccjit-12-dev Now you can run the following command: ./x test compiler/rustc_codegen_gcc/ If it cannot find the .so library (if you installed it with apt for example), you need to pass the library file path with LIBRARY_PATH: LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/12/ ./x test compiler/rustc_codegen_gcc/ If you encounter bugs or problems, don't hesitate to open issues on the rustc_codegen_gcc repository .","breadcrumbs":"Testing the compiler » Running tests » Running rustc_codegen_gcc tests","id":"122","title":"Running rustc_codegen_gcc tests"},"1220":{"body":"A crate dependency can be loaded from an rlib, dylib, or rmeta file. A key point of these file formats is that they contain rustc-specific metadata . This metadata allows the compiler to discover enough information about the external crate to understand the items it contains, which macros it exports, and much more.","breadcrumbs":"Libraries and metadata » Libraries","id":"1220","title":"Libraries"},"1221":{"body":"An rlib is an archive file , which is similar to a tar file. This file format is specific to rustc, and may change over time. This file contains: Object code, which is the result of code generation. This is used during regular linking. There is a separate .o file for each codegen unit . The codegen step can be skipped with the -C linker-plugin-lto CLI option, which means each .o file will only contain LLVM bitcode. LLVM bitcode , which is a binary representation of LLVM's intermediate representation, which is embedded as a section in the .o files. This can be used for Link Time Optimization (LTO). This can be removed with the -C embed-bitcode=no CLI option to improve compile times and reduce disk space if LTO is not needed. rustc metadata , in a file named lib.rmeta. A symbol table, which is essentially a list of symbols with offsets to the object files that contain that symbol. This is pretty standard for archive files.","breadcrumbs":"Libraries and metadata » rlib","id":"1221","title":"rlib"},"1222":{"body":"A dylib is a platform-specific shared library. It includes the rustc metadata in a special link section called .rustc.","breadcrumbs":"Libraries and metadata » dylib","id":"1222","title":"dylib"},"1223":{"body":"An rmeta file is a custom binary format that contains the metadata for the crate. This file can be used for fast \"checks\" of a project by skipping all code generation (as is done with cargo check), collecting enough information for documentation (as is done with cargo doc), or for pipelining . This file is created if the --emit=metadata CLI option is used. rmeta files do not support linking, since they do not contain compiled object files.","breadcrumbs":"Libraries and metadata » rmeta","id":"1223","title":"rmeta"},"1224":{"body":"The metadata contains a wide swath of different elements. This guide will not go into detail about every field it contains. You are encouraged to browse the CrateRoot definition to get a sense of the different elements it contains. Everything about metadata encoding and decoding is in the rustc_metadata package. Here are a few highlights of things it contains: The version of the rustc compiler. The compiler will refuse to load files from any other version. The Strict Version Hash (SVH). This helps ensure the correct dependency is loaded. The Stable Crate Id . This is a hash used to identify crates. Information about all the source files in the library. This can be used for a variety of things, such as diagnostics pointing to sources in a dependency. Information about exported macros, traits, types, and items. Generally, anything that's needed to be known when a path references something inside a crate dependency. Encoded MIR . This is optional, and only encoded if needed for code generation. cargo check skips this for performance reasons.","breadcrumbs":"Libraries and metadata » Metadata","id":"1224","title":"Metadata"},"1225":{"body":"The Strict Version Hash ( SVH , also known as the \"crate hash\") is a 64-bit hash that is used to ensure that the correct crate dependencies are loaded. It is possible for a directory to contain multiple copies of the same dependency built with different settings, or built from different sources. The crate loader will skip any crates that have the wrong SVH. The SVH is also used for the incremental compilation session filename, though that usage is mostly historic. The hash includes a variety of elements: Hashes of the HIR nodes. All of the upstream crate hashes. All of the source filenames. Hashes of certain command-line flags (like -C metadata via the Stable Crate Id , and all CLI options marked with [TRACKED]). See compute_hir_hash for where the hash is actually computed.","breadcrumbs":"Libraries and metadata » Strict Version Hash","id":"1225","title":"Strict Version Hash"},"1226":{"body":"The StableCrateId is a 64-bit hash used to identify different crates with potentially the same name. It is a hash of the crate name and all the -C metadata CLI options computed in StableCrateId::new . It is used in a variety of places, such as symbol name mangling, crate loading, and much more. By default, all Rust symbols are mangled and incorporate the stable crate id. This allows multiple versions of the same crate to be included together. Cargo automatically generates -C metadata hashes based on a variety of factors, like the package version, source, and target kind (a lib and test can have the same crate name, so they need to be disambiguated).","breadcrumbs":"Libraries and metadata » Stable Crate Id","id":"1226","title":"Stable Crate Id"},"1227":{"body":"Crate loading can have quite a few subtle complexities. During name resolution , when an external crate is referenced (via an extern crate or path), the resolver uses the CrateLoader which is responsible for finding the crate libraries and loading the metadata for them. After the dependency is loaded, the CrateLoader will provide the information the resolver needs to perform its job (such as expanding macros, resolving paths, etc.). To load each external crate, the CrateLoader uses a CrateLocator to actually find the correct files for one specific crate. There is some great documentation in the locator module that goes into detail on how loading works, and I strongly suggest reading it to get the full picture. The location of a dependency can come from several different places. Direct dependencies are usually passed with --extern flags, and the loader can look at those directly. Direct dependencies often have references to their own dependencies, which need to be loaded, too. These are usually found by scanning the directories passed with the -L flag for any file whose metadata contains a matching crate name and SVH . The loader will also look at the sysroot to find dependencies. As crates are loaded, they are kept in the CStore with the crate metadata wrapped in the CrateMetadata struct. After resolution and expansion, the CStore will make its way into the GlobalCtxt for the rest of the compilation.","breadcrumbs":"Libraries and metadata » Crate loading","id":"1227","title":"Crate loading"},"1228":{"body":"One trick to improve compile times is to start building a crate as soon as the metadata for its dependencies is available. For a library, there is no need to wait for the code generation of dependencies to finish. Cargo implements this technique by telling rustc to emit an rmeta file for each dependency as well as an rlib . As early as it can, rustc will save the rmeta file to disk before it continues to the code generation phase. The compiler sends a JSON message to let the build tool know that it can start building the next crate if possible. The crate loading system is smart enough to know when it sees an rmeta file to use that if the rlib is not there (or has only been partially written). This pipelining isn't possible for binaries, because the linking phase will require the code generation of all its dependencies. In the future, it may be possible to further improve this scenario by splitting linking into a separate command (see #64191 ).","breadcrumbs":"Libraries and metadata » Pipelining","id":"1228","title":"Pipelining"},"1229":{"body":"What is profiled-guided optimization? How is PGO implemented in rustc? Overall workflow Compile-time aspects Create binaries with instrumentation Compile binaries where optimizations make use of profiling data Runtime aspects Testing PGO Additional information rustc supports doing profile-guided optimization (PGO). This chapter describes what PGO is and how the support for it is implemented in rustc.","breadcrumbs":"Profile-guided optimization » Profile-guided optimization","id":"1229","title":"Profile-guided optimization"},"123":{"body":"The src/ci/docker directory includes Docker image definitions for Linux-based jobs executed on GitHub Actions (non-Linux jobs run outside Docker). You can run these jobs on your local development machine, which can be helpful to test environments different from your local system. You will need to install Docker on a Linux, Windows, or macOS system (typically Linux will be much faster than Windows or macOS because the latter use virtual machines to emulate a Linux environment). Jobs running in CI are configured through a set of bash scripts, and it is not always trivial to reproduce their behavior locally. If you want to run a CI job locally in the simplest way possible, you can use a provided helper Python script that tries to replicate what happens on CI as closely as possible: python3 src/ci/github-actions/ci.py run-local \n# For example:\npython3 src/ci/github-actions/ci.py run-local dist-x86_64-linux-alt If the above script does not work for you, you would like to have more control of the Docker image execution, or you want to understand what exactly happens during Docker job execution, then continue reading below.","breadcrumbs":"Testing the compiler » Running tests » Testing with Docker » Testing with Docker","id":"123","title":"Testing with Docker"},"1230":{"body":"The basic concept of PGO is to collect data about the typical execution of a program (e.g. which branches it is likely to take) and then use this data to inform optimizations such as inlining, machine-code layout, register allocation, etc. There are different ways of collecting data about a program's execution. One is to run the program inside a profiler (such as perf) and another is to create an instrumented binary, that is, a binary that has data collection built into it, and run that. The latter usually provides more accurate data.","breadcrumbs":"Profile-guided optimization » What is profiled-guided optimization?","id":"1230","title":"What is profiled-guided optimization?"},"1231":{"body":"rustc current PGO implementation relies entirely on LLVM. LLVM actually supports multiple forms of PGO: Sampling-based PGO where an external profiling tool like perf is used to collect data about a program's execution. GCOV-based profiling, where code coverage infrastructure is used to collect profiling information. Front-end based instrumentation, where the compiler front-end (e.g. Clang) inserts instrumentation intrinsics into the LLVM IR it generates (but see the [1] \"Note\"). IR-level instrumentation, where LLVM inserts the instrumentation intrinsics itself during optimization passes. rustc supports only the last approach, IR-level instrumentation, mainly because it is almost exclusively implemented in LLVM and needs little maintenance on the Rust side. Fortunately, it is also the most modern approach, yielding the best results. So, we are dealing with an instrumentation-based approach, i.e. profiling data is generated by a specially instrumented version of the program that's being optimized. Instrumentation-based PGO has two components: a compile-time component and run-time component, and one needs to understand the overall workflow to see how they interact. Note: rustc now supports front-end-based coverage instrumentation, via the experimental option -C instrument-coverage , but using these coverage results for PGO has not been attempted at this time.","breadcrumbs":"Profile-guided optimization » How is PGO implemented in rustc?","id":"1231","title":"How is PGO implemented in rustc?"},"1232":{"body":"Generating a PGO-optimized program involves the following four steps: Compile the program with instrumentation enabled (e.g. rustc -C profile-generate main.rs) Run the instrumented program (e.g. ./main) which generates a default-.profraw file Convert the .profraw file into a .profdata file using LLVM's llvm-profdata tool. Compile the program again, this time making use of the profiling data (e.g. rustc -C profile-use=merged.profdata main.rs)","breadcrumbs":"Profile-guided optimization » Overall workflow","id":"1232","title":"Overall workflow"},"1233":{"body":"Depending on which step in the above workflow we are in, two different things can happen at compile time: Create binaries with instrumentation As mentioned above, the profiling instrumentation is added by LLVM. rustc instructs LLVM to do so by setting the appropriate flags when creating LLVM PassManagers: // `PMBR` is an `LLVMPassManagerBuilderRef` unwrap(PMBR)->EnablePGOInstrGen = true; // Instrumented binaries have a default output path for the `.profraw` file // hard-coded into them: unwrap(PMBR)->PGOInstrGen = PGOGenPath; rustc also has to make sure that some of the symbols from LLVM's profiling runtime are not removed by marking the with the right export level . Compile binaries where optimizations make use of profiling data In the final step of the workflow described above, the program is compiled again, with the compiler using the gathered profiling data in order to drive optimization decisions. rustc again leaves most of the work to LLVM here, basically just telling the LLVM PassManagerBuilder where the profiling data can be found: unwrap(PMBR)->PGOInstrUse = PGOUsePath; LLVM does the rest (e.g. setting branch weights, marking functions with cold or inlinehint, etc).","breadcrumbs":"Profile-guided optimization » Compile-time aspects","id":"1233","title":"Compile-time aspects"},"1234":{"body":"Instrumentation-based approaches always also have a runtime component, i.e. once we have an instrumented program, that program needs to be run in order to generate profiling data, and collecting and persisting this profiling data needs some infrastructure in place. In the case of LLVM, these runtime components are implemented in compiler-rt and statically linked into any instrumented binaries. The rustc version of this can be found in library/profiler_builtins which basically packs the C code from compiler-rt into a Rust crate. In order for profiler_builtins to be built, profiler = true must be set in rustc's bootstrap.toml.","breadcrumbs":"Profile-guided optimization » Runtime aspects","id":"1234","title":"Runtime aspects"},"1235":{"body":"Since the PGO workflow spans multiple compiler invocations most testing happens in run-make tests (the relevant tests have pgo in their name). There is also a codegen test that checks that some expected instrumentation artifacts show up in LLVM IR.","breadcrumbs":"Profile-guided optimization » Testing PGO","id":"1235","title":"Testing PGO"},"1236":{"body":"Clang's documentation contains a good overview on PGO in LLVM .","breadcrumbs":"Profile-guided optimization » Additional information","id":"1236","title":"Additional information"},"1237":{"body":"Recommended bootstrap.toml settings Rust symbol mangling The LLVM profiler runtime Testing coverage instrumentation rustc supports detailed source-based code and test coverage analysis with a command line option (-C instrument-coverage) that instruments Rust libraries and binaries with additional instructions and data, at compile time. The coverage instrumentation injects calls to the LLVM intrinsic instruction llvm.instrprof.increment at code branches (based on a MIR-based control flow analysis), and LLVM converts these to instructions that increment static counters, when executed. The LLVM coverage instrumentation also requires a Coverage Map that encodes source metadata, mapping counter IDs--directly and indirectly--to the file locations (with start and end line and column). Rust libraries, with or without coverage instrumentation, can be linked into instrumented binaries. When the program is executed and cleanly terminates, LLVM libraries write the final counter values to a file (default.profraw or a custom file set through environment variable LLVM_PROFILE_FILE). Developers use existing LLVM coverage analysis tools to decode .profraw files, with corresponding Coverage Maps (from matching binaries that produced them), and generate various reports for analysis, for example: Detailed instructions and examples are documented in the rustc book .","breadcrumbs":"LLVM source-based code coverage » LLVM source-based code coverage","id":"1237","title":"LLVM source-based code coverage"},"1238":{"body":"When working on the coverage instrumentation code, it is usually necessary to enable the profiler runtime by setting profiler = true in [build]. This allows the compiler to produce instrumented binaries, and makes it possible to run the full coverage test suite. Enabling debug assertions in the compiler and in LLVM is recommended, but not mandatory. # Similar to the \"compiler\" profile, but also enables debug assertions in LLVM.\n# These assertions can detect malformed coverage mappings in some cases.\nprofile = \"codegen\" [build]\n# IMPORTANT: This tells the build system to build the LLVM profiler runtime.\n# Without it, the compiler can't produce coverage-instrumented binaries,\n# and many of the coverage tests will be skipped.\nprofiler = true [rust]\n# Enable debug assertions in the compiler.\ndebug-assertions = true","breadcrumbs":"LLVM source-based code coverage » Recommended bootstrap.toml settings","id":"1238","title":"Recommended bootstrap.toml settings"},"1239":{"body":"-C instrument-coverage automatically enables Rust symbol mangling v0 (as if the user specified -C symbol-mangling-version=v0 option when invoking rustc) to ensure consistent and reversible name mangling. This has two important benefits: LLVM coverage tools can analyze coverage over multiple runs, including some changes to source code; so mangled names must be consistent across compilations. LLVM coverage reports can report coverage by function, and even separates out the coverage counts of each unique instantiation of a generic function, if invoked with multiple type substitution variations.","breadcrumbs":"LLVM source-based code coverage » Rust symbol mangling","id":"1239","title":"Rust symbol mangling"},"124":{"body":"The src/ci/docker/run.sh script is used to build a specific Docker image, run it, build Rust within the image, and either run tests or prepare a set of archives designed for distribution. The script will mount your local Rust source tree in read-only mode, and an obj directory in read-write mode. All the compiler artifacts will be stored in the obj directory. The shell will start out in the objdirectory. From there, it will execute ../src/ci/run.sh which starts the build as defined by the Docker image. You can run src/ci/docker/run.sh directly. A few important notes regarding the run.sh script: When executed on CI, the script expects that all submodules are checked out. If some submodule that is accessed by the job is not available, the build will result in an error. You should thus make sure that you have all required submodules checked out locally. You can either do that manually through git, or set submodules = true in your bootstrap.toml and run a command such as x build to let bootstrap download the most important submodules (this might not be enough for the given CI job that you are trying to execute though). corresponds to a single directory located in one of the src/ci/docker/host-* directories. Note that image name does not necessarily correspond to a job name, as some jobs execute the same image, but with different environment variables or Docker build arguments (this is a part of the complexity that makes it difficult to run CI jobs locally). If you are executing a \"dist\" job (job beginning with dist-), you should set the DEPLOY=1 environment variable. If you are executing an \"alternative dist\" job (job beginning with dist- and ending with -alt), you should set the DEPLOY_ALT=1 environment variable. Some of the std tests require IPv6 support. Docker on Linux seems to have it disabled by default. Run the commands in enable-docker-ipv6.sh to enable IPv6 before creating the container. This only needs to be done once.","breadcrumbs":"Testing the compiler » Running tests » Testing with Docker » The run.sh script","id":"124","title":"The run.sh script"},"1240":{"body":"Coverage data is only generated by running the executable Rust program. rustc statically links coverage-instrumented binaries with LLVM runtime code ( compiler-rt ) that implements program hooks (such as an exit hook) to write the counter values to the .profraw file. In the rustc source tree, library/profiler_builtins bundles the LLVM compiler-rt code into a Rust library crate. Note that when building rustc, profiler_builtins is only included when build.profiler = true is set in bootstrap.toml. When compiling with -C instrument-coverage, CrateLoader::postprocess() dynamically loads profiler_builtins by calling inject_profiler_runtime().","breadcrumbs":"LLVM source-based code coverage » The LLVM profiler runtime","id":"1240","title":"The LLVM profiler runtime"},"1241":{"body":"(See also the compiletest documentation for the tests/coverage test suite.) Coverage instrumentation in the MIR is validated by a mir-opt test: tests/mir-opt/coverage/instrument_coverage.rs . Coverage instrumentation in LLVM IR is validated by the tests/coverage test suite in coverage-map mode. These tests compile a test program to LLVM IR assembly, and then use the src/tools/coverage-dump tool to extract and pretty-print the coverage mappings that would be embedded in the final binary. End-to-end testing of coverage instrumentation and coverage reporting is performed by the tests/coverage test suite in coverage-run mode, and by the tests/coverage-run-rustdoc test suite. These tests compile and run a test program with coverage instrumentation, then use LLVM tools to convert the coverage data into a human-readable coverage report. Tests in coverage-run mode have an implicit //@ needs-profiler-runtime directive, so they will be skipped if the profiler runtime has not been enabled in bootstrap.toml . Finally, the tests/codegen/instrument-coverage/testprog.rs test compiles a simple Rust program with -C instrument-coverage and compares the compiled program's LLVM IR to expected LLVM IR instructions and structured data for a coverage-enabled program, including various checks for Coverage Map-related metadata and the LLVM intrinsic calls to increment the runtime counters. Expected results for the coverage, coverage-run-rustdoc, and mir-opt tests can be refreshed by running: ./x test coverage --bless\n./x test coverage-run-rustdoc --bless\n./x test tests/mir-opt --bless","breadcrumbs":"LLVM source-based code coverage » Testing coverage instrumentation","id":"1241","title":"Testing coverage instrumentation"},"1242":{"body":"The rustc compiler contains support for following sanitizers: AddressSanitizer a faster memory error detector. Can detect out-of-bounds access to heap, stack, and globals, use after free, use after return, double free, invalid free, memory leaks. ControlFlowIntegrity LLVM Control Flow Integrity (CFI) provides forward-edge control flow protection. Hardware-assisted AddressSanitizer a tool similar to AddressSanitizer but based on partial hardware assistance. KernelControlFlowIntegrity LLVM Kernel Control Flow Integrity (KCFI) provides forward-edge control flow protection for operating systems kernels. LeakSanitizer a run-time memory leak detector. MemorySanitizer a detector of uninitialized reads. ThreadSanitizer a fast data race detector.","breadcrumbs":"Sanitizers support » Sanitizers support","id":"1242","title":"Sanitizers support"},"1243":{"body":"To enable a sanitizer compile with -Z sanitizer=... option, where value is one of address, cfi, hwaddress, kcfi, leak, memory or thread. For more details on how to use sanitizers please refer to the sanitizer flag in the unstable book .","breadcrumbs":"Sanitizers support » How to use the sanitizers?","id":"1243","title":"How to use the sanitizers?"},"1244":{"body":"The implementation of sanitizers (except CFI) relies almost entirely on LLVM. The rustc is an integration point for LLVM compile time instrumentation passes and runtime libraries. Highlight of the most important aspects of the implementation: The sanitizer runtime libraries are part of the compiler-rt project, and will be built on supported targets when enabled in bootstrap.toml: [build]\nsanitizers = true The runtimes are placed into target libdir . During LLVM code generation, the functions intended for instrumentation are marked with appropriate LLVM attribute: SanitizeAddress, SanitizeHWAddress, SanitizeMemory, or SanitizeThread. By default all functions are instrumented, but this behaviour can be changed with #[no_sanitize(...)]. The decision whether to perform instrumentation or not is possible only at a function granularity. In the cases were those decision differ between functions it might be necessary to inhibit inlining, both at MIR level and LLVM level . The LLVM IR generated by rustc is instrumented by dedicated LLVM passes , different for each sanitizer. Instrumentation passes are invoked after optimization passes. When producing an executable, the sanitizer specific runtime library is linked in . The libraries are searched for in the target libdir. First relative to the overridden system root and subsequently relative to the default system root. Fall-back to the default system root ensures that sanitizer runtimes remain available when using sysroot overrides constructed by cargo -Z build-std or xargo.","breadcrumbs":"Sanitizers support » How are sanitizers implemented in rustc?","id":"1244","title":"How are sanitizers implemented in rustc?"},"1245":{"body":"Sanitizers are validated by code generation tests in tests/codegen/sanitize*.rs and end-to-end functional tests in tests/ui/sanitizer/ directory. Testing sanitizer functionality requires the sanitizer runtimes (built when sanitizer = true in bootstrap.toml) and target providing support for particular sanitizer. When sanitizer is unsupported on given target, sanitizers tests will be ignored. This behaviour is controlled by compiletest needs-sanitizer-* directives.","breadcrumbs":"Sanitizers support » Testing sanitizers","id":"1245","title":"Testing sanitizers"},"1246":{"body":"To enable a sanitizer on a new target which is already supported by LLVM: Include the sanitizer in the list of supported_sanitizers in the target definition . rustc --target .. -Zsanitizer=.. should now recognize sanitizer as supported. Build the runtime for the target and include it in the libdir. Teach compiletest that your target now supports the sanitizer. Tests marked with needs-sanitizer-* should now run on the target. Run tests ./x test --force-rerun tests/ui/sanitize/ to verify. --enable-sanitizers in the CI configuration to build and distribute the sanitizer runtime as part of the release process.","breadcrumbs":"Sanitizers support » Enabling sanitizer on a new target","id":"1246","title":"Enabling sanitizer on a new target"},"1247":{"body":"Sanitizers project page AddressSanitizer in Clang ControlFlowIntegrity in Clang Hardware-assisted AddressSanitizer KernelControlFlowIntegrity in Clang LeakSanitizer in Clang MemorySanitizer in Clang ThreadSanitizer in Clang","breadcrumbs":"Sanitizers support » Additional Information","id":"1247","title":"Additional Information"},"1248":{"body":"Preliminaries Debuggers DWARF CodeView/PDB Supported debuggers GDB Rust expression parser Parser extensions LLDB Rust expression parser Developer notes WinDbg/CDB Natvis DWARF and rustc Current limitations of DWARF Developer notes What is missing Code signing for LLDB debug server on macOS DWARF and Traits Typical process for a Debug Info change (LLVM) Procedural macro stepping Source file checksums in debug info DWARF 5 LLVM Microsoft Visual C++ Compiler /ZH option Clang Future work Name mangling changes Reuse Rust compiler for expressions This document explains the state of debugging tools support in the Rust compiler (rustc). It gives an overview of GDB, LLDB, WinDbg/CDB, as well as infrastructure around Rust compiler to debug Rust code. If you want to learn how to debug the Rust compiler itself, see Debugging the Compiler . The material is gathered from the video, Tom Tromey discusses debugging support in rustc .","breadcrumbs":"Debugging support in the Rust compiler » Debugging support in the Rust compiler","id":"1248","title":"Debugging support in the Rust compiler"},"1249":{"body":"","breadcrumbs":"Debugging support in the Rust compiler » Preliminaries","id":"1249","title":"Preliminaries"},"125":{"body":"Sometimes, it can be useful to build a specific Docker image, and then run custom commands inside it, so that you can experiment with how the given system behaves. You can do that using an interactive mode, which will start a bash shell in the container, using src/ci/docker/run.sh --dev . When inside the Docker container, you can run individual commands to do specific tasks. For example, you can run ../x test tests/ui to just run UI tests. Some additional notes about using the interactive mode: The container will be deleted automatically when you exit the shell, however the build artifacts persist in the obj directory. If you are switching between different Docker images, the artifacts from previous environments stored in the obj directory may confuse the build system. Sometimes you will need to delete parts or all of the obj directory before building inside the container. The container is bare-bones, with only a minimal set of packages. You may want to install some things like apt install less vim. You can open multiple shells in the container. First you need the container name (a short hash), which is displayed in the shell prompt, or you can run docker container ls outside of the container to list the available containers. With the container name, run docker exec -it /bin/bash where is the container name like 4ba195e95cef. The approach described above is a relatively low-level interface for running the Docker images directly. If you want to run a full CI Linux job locally with Docker, in a way that is as close to CI as possible, you can use the following command: cargo run --manifest-path src/ci/citool/Cargo.toml run-local \n# For example:\ncargo run --manifest-path src/ci/citool/Cargo.toml run-local dist-x86_64-linux-alt","breadcrumbs":"Testing the compiler » Running tests » Testing with Docker » Interactive mode","id":"125","title":"Interactive mode"},"1250":{"body":"According to Wikipedia A debugger or debugging tool is a computer program that is used to test and debug other programs (the \"target\" program). Writing a debugger from scratch for a language requires a lot of work, especially if debuggers have to be supported on various platforms. GDB and LLDB, however, can be extended to support debugging a language. This is the path that Rust has chosen. This document's main goal is to document the said debuggers support in Rust compiler.","breadcrumbs":"Debugging support in the Rust compiler » Debuggers","id":"1250","title":"Debuggers"},"1251":{"body":"According to the DWARF standard website DWARF is a debugging file format used by many compilers and debuggers to support source level debugging. It addresses the requirements of a number of procedural languages, such as C, C++, and Fortran, and is designed to be extensible to other languages. DWARF is architecture independent and applicable to any processor or operating system. It is widely used on Unix, Linux and other operating systems, as well as in stand-alone environments. DWARF reader is a program that consumes the DWARF format and creates debugger compatible output. This program may live in the compiler itself. DWARF uses a data structure called Debugging Information Entry (DIE) which stores the information as \"tags\" to denote functions, variables etc., e.g., DW_TAG_variable, DW_TAG_pointer_type, DW_TAG_subprogram etc. You can also invent your own tags and attributes.","breadcrumbs":"Debugging support in the Rust compiler » DWARF","id":"1251","title":"DWARF"},"1252":{"body":"PDB (Program Database) is a file format created by Microsoft that contains debug information. PDBs can be consumed by debuggers such as WinDbg/CDB and other tools to display debug information. A PDB contains multiple streams that describe debug information about a specific binary such as types, symbols, and source files used to compile the given binary. CodeView is another format which defines the structure of symbol records and type records that appear within PDB streams.","breadcrumbs":"Debugging support in the Rust compiler » CodeView/PDB","id":"1252","title":"CodeView/PDB"},"1253":{"body":"","breadcrumbs":"Debugging support in the Rust compiler » Supported debuggers","id":"1253","title":"Supported debuggers"},"1254":{"body":"Rust expression parser To be able to show debug output, we need an expression parser. This (GDB) expression parser is written in Bison , and can parse only a subset of Rust expressions. GDB parser was written from scratch and has no relation to any other parser, including that of rustc. GDB has Rust-like value and type output. It can print values and types in a way that look like Rust syntax in the output. Or when you print a type as ptype in GDB, it also looks like Rust source code. Checkout the documentation in the manual for GDB/Rust . Parser extensions Expression parser has a couple of extensions in it to facilitate features that you cannot do with Rust. Some limitations are listed in the manual for GDB/Rust . There is some special code in the DWARF reader in GDB to support the extensions. A couple of examples of DWARF reader support needed are as follows: Enum: Needed for support for enum types. The Rust compiler writes the information about enum into DWARF, and GDB reads the DWARF to understand where is the tag field, or if there is a tag field, or if the tag slot is shared with non-zero optimization etc. Dissect trait objects: DWARF extension where the trait object's description in the DWARF also points to a stub description of the corresponding vtable which in turn points to the concrete type for which this trait object exists. This means that you can do a print *object for that trait object, and GDB will understand how to find the correct type of the payload in the trait object. TODO : Figure out if the following should be mentioned in the GDB-Rust document rather than this guide page so there is no duplication. This is regarding the following comments: This comment by Tom gdb's Rust extensions and limitations are documented in the gdb manual: https://sourceware.org/gdb/onlinedocs/gdb/Rust.html -- however, this neglects to mention that gdb convenience variables and registers follow the gdb $ convention, and that the Rust parser implements the gdb @ extension. This question by Aman @tromey do you think we should mention this part in the GDB-Rust document rather than this document so there is no duplication etc.?","breadcrumbs":"Debugging support in the Rust compiler » GDB","id":"1254","title":"GDB"},"1255":{"body":"Rust expression parser This expression parser is written in C++. It is a type of Recursive Descent parser . It implements slightly less of the Rust language than GDB. LLDB has Rust-like value and type output. Developer notes LLDB has a plugin architecture but that does not work for language support. GDB generally works better on Linux.","breadcrumbs":"Debugging support in the Rust compiler » LLDB","id":"1255","title":"LLDB"},"1256":{"body":"Microsoft provides Windows Debugging Tools such as the Windows Debugger (WinDbg) and the Console Debugger (CDB) which both support debugging programs written in Rust. These debuggers parse the debug info for a binary from the PDB, if available, to construct a visualization to serve up in the debugger. Natvis Both WinDbg and CDB support defining and viewing custom visualizations for any given type within the debugger using the Natvis framework. The Rust compiler defines a set of Natvis files that define custom visualizations for a subset of types in the standard libraries such as, std, core, and alloc. These Natvis files are embedded into PDBs generated by the *-pc-windows-msvc target triples to automatically enable these custom visualizations when debugging. This default can be overridden by setting the strip rustc flag to either debuginfo or symbols. Rust has support for embedding Natvis files for crates outside of the standard libraries by using the #[debugger_visualizer] attribute. For more details on how to embed debugger visualizers, please refer to the section on the debugger_visualizer attribute .","breadcrumbs":"Debugging support in the Rust compiler » WinDbg/CDB","id":"1256","title":"WinDbg/CDB"},"1257":{"body":"DWARF is the standard way compilers generate debugging information that debuggers read. It is the debugging format on macOS and Linux. It is a multi-language and extensible format, and is mostly good enough for Rust's purposes. Hence, the current implementation reuses DWARF's concepts. This is true even if some of the concepts in DWARF do not align with Rust semantically because, generally, there can be some kind of mapping between the two. We have some DWARF extensions that the Rust compiler emits and the debuggers understand that are not in the DWARF standard. Rust compiler will emit DWARF for a virtual table, and this vtable object will have a DW_AT_containing_type that points to the real type. This lets debuggers dissect a trait object pointer to correctly find the payload. E.g., here's such a DIE, from a test case in the gdb repository: <1><1a9>: Abbrev Number: 3 (DW_TAG_structure_type) <1aa> DW_AT_containing_type: <0x1b4> <1ae> DW_AT_name : (indirect string, offset: 0x23d): vtable <1b2> DW_AT_byte_size : 0 <1b3> DW_AT_alignment : 8 The other extension is that the Rust compiler can emit a tagless discriminated union. See DWARF feature request for this item.","breadcrumbs":"Debugging support in the Rust compiler » DWARF and rustc","id":"1257","title":"DWARF and rustc"},"1258":{"body":"Traits - require a bigger change than normal to DWARF, on how to represent Traits in DWARF. DWARF provides no way to differentiate between Structs and Tuples. Rust compiler emits fields with __0 and debuggers look for a sequence of such names to overcome this limitation. For example, in this case the debugger would look at a field via x.__0 instead of x.0. This is resolved via the Rust parser in the debugger so now you can do x.0. DWARF relies on debuggers to know some information about platform ABI. Rust does not do that all the time.","breadcrumbs":"Debugging support in the Rust compiler » Current limitations of DWARF","id":"1258","title":"Current limitations of DWARF"},"1259":{"body":"This section is from the talk about certain aspects of development.","breadcrumbs":"Debugging support in the Rust compiler » Developer notes","id":"1259","title":"Developer notes"},"126":{"body":"The primary goal of our CI system is to ensure that the master branch of rust-lang/rust is always in a valid state and passes our test suite. From a high-level point of view, when you open a pull request at rust-lang/rust, the following will happen: A small subset of tests and checks are run after each push to the PR. This should help catching common errors. When the PR is approved, the bors bot enqueues the PR into a merge queue . Once the PR gets to the front of the queue, bors will create a merge commit and run the full test suite on it. The merge commit either contains only one specific PR or it can be a \"rollup\" which combines multiple PRs together, to save CI costs. Once the whole test suite finishes, two things can happen. Either CI fails with an error that needs to be addressed by the developer, or CI succeeds and the merge commit is then pushed to the master branch. If you want to modify what gets executed on CI, see Modifying CI jobs .","breadcrumbs":"Testing the compiler » Running tests » Testing with CI » Testing with CI","id":"126","title":"Testing with CI"},"1260":{"body":"","breadcrumbs":"Debugging support in the Rust compiler » What is missing","id":"1260","title":"What is missing"},"1261":{"body":"According to Wikipedia, System Integrity Protection is System Integrity Protection (SIP, sometimes referred to as rootless) is a security feature of Apple's macOS operating system introduced in OS X El Capitan. It comprises a number of mechanisms that are enforced by the kernel. A centerpiece is the protection of system-owned files and directories against modifications by processes without a specific \"entitlement\", even when executed by the root user or a user with root privileges (sudo). It prevents processes using ptrace syscall. If a process wants to use ptrace it has to be code signed. The certificate that signs it has to be trusted on your machine. See Apple developer documentation for System Integrity Protection . We may need to sign up with Apple and get the keys to do this signing. Tom has looked into if Mozilla cannot do this because it is at the maximum number of keys it is allowed to sign. Tom does not know if Mozilla could get more keys. Alternatively, Tom suggests that maybe a Rust legal entity is needed to get the keys via Apple. This problem is not technical in nature. If we had such a key we could sign GDB as well and ship that.","breadcrumbs":"Debugging support in the Rust compiler » Code signing for LLDB debug server on macOS","id":"1261","title":"Code signing for LLDB debug server on macOS"},"1262":{"body":"Rust traits are not emitted into DWARF at all. The impact of this is calling a method x.method() does not work as is. The reason being that method is implemented by a trait, as opposed to a type. That information is not present so finding trait methods is missing. DWARF has a notion of interface types (possibly added for Java). Tom's idea was to use this interface type as traits. DWARF only deals with concrete names, not the reference types. So, a given implementation of a trait for a type would be one of these interfaces (DW_tag_interface type). Also, the type for which it is implemented would describe all the interfaces this type implements. This requires a DWARF extension. Issue on Github: https://github.com/rust-lang/rust/issues/33014","breadcrumbs":"Debugging support in the Rust compiler » DWARF and Traits","id":"1262","title":"DWARF and Traits"},"1263":{"body":"LLVM has Debug Info (DI) builders. This is the primary thing that Rust calls into. This is why we need to change LLVM first because that is emitted first and not DWARF directly. This is a kind of metadata that you construct and hand-off to LLVM. For the Rustc/LLVM hand-off some LLVM DI builder methods are called to construct representation of a type. The steps of this process are as follows: LLVM needs changing. LLVM does not emit Interface types at all, so this needs to be implemented in the LLVM first. Get sign off on LLVM maintainers that this is a good idea. Change the DWARF extension. Update the debuggers. Update DWARF readers, expression evaluators. Update Rust compiler. Change it to emit this new information.","breadcrumbs":"Debugging support in the Rust compiler » Typical process for a Debug Info change (LLVM)","id":"1263","title":"Typical process for a Debug Info change (LLVM)"},"1264":{"body":"A deeply profound question is that how do you actually debug a procedural macro? What is the location you emit for a macro expansion? Consider some of the following cases - You can emit location of the invocation of the macro. You can emit the location of the definition of the macro. You can emit locations of the content of the macro. RFC: https://github.com/rust-lang/rfcs/pull/2117 Focus is to let macros decide what to do. This can be achieved by having some kind of attribute that lets the macro tell the compiler where the line marker should be. This affects where you set the breakpoints and what happens when you step it.","breadcrumbs":"Debugging support in the Rust compiler » Procedural macro stepping","id":"1264","title":"Procedural macro stepping"},"1265":{"body":"Both DWARF and CodeView (PDB) support embedding a cryptographic hash of each source file that contributed to the associated binary. The cryptographic hash can be used by a debugger to verify that the source file matches the executable. If the source file does not match, the debugger can provide a warning to the user. The hash can also be used to prove that a given source file has not been modified since it was used to compile an executable. Because MD5 and SHA1 both have demonstrated vulnerabilities, using SHA256 is recommended for this application. The Rust compiler stores the hash for each source file in the corresponding SourceFile in the SourceMap. The hashes of input files to external crates are stored in rlib metadata. A default hashing algorithm is set in the target specification. This allows the target to specify the best hash available, since not all targets support all hash algorithms. The hashing algorithm for a target can also be overridden with the -Z source-file-checksum= command-line option. DWARF 5 DWARF version 5 supports embedding an MD5 hash to validate the source file version in use. DWARF 5 - Section 6.2.4.1 opcode DW_LNCT_MD5 LLVM LLVM IR supports MD5 and SHA1 (and SHA256 in LLVM 11+) source file checksums in the DIFile node. LLVM DIFile documentation Microsoft Visual C++ Compiler /ZH option The MSVC compiler supports embedding MD5, SHA1, or SHA256 hashes in the PDB using the /ZH compiler option. MSVC /ZH documentation Clang Clang always embeds an MD5 checksum, though this does not appear in documentation.","breadcrumbs":"Debugging support in the Rust compiler » Source file checksums in debug info","id":"1265","title":"Source file checksums in debug info"},"1266":{"body":"Name mangling changes New demangler in libiberty (gcc source tree). New demangler in LLVM or LLDB. TODO : Check the location of the demangler source. #1157 Reuse Rust compiler for expressions This is an important idea because debuggers by and large do not try to implement type inference. You need to be much more explicit when you type into the debugger than your actual source code. So, you cannot just copy and paste an expression from your source code to debugger and expect the same answer but this would be nice. This can be helped by using compiler. It is certainly doable but it is a large project. You certainly need a bridge to the debugger because the debugger alone has access to the memory. Both GDB (gcc) and LLDB (clang) have this feature. LLDB uses Clang to compile code to JIT and GDB can do the same with GCC. Both debuggers expression evaluation implement both a superset and a subset of Rust. They implement just the expression language, but they also add some extensions like GDB has convenience variables. Therefore, if you are taking this route, then you not only need to do this bridge, but may have to add some mode to let the compiler understand some extensions.","breadcrumbs":"Debugging support in the Rust compiler » Future work","id":"1266","title":"Future work"},"1267":{"body":"This section covers a numbers of common compiler terms that arise in this guide. We try to give the general definition while providing some Rust-specific context.","breadcrumbs":"Appendix A: Background topics » Background topics","id":"1267","title":"Background topics"},"1268":{"body":"A control-flow graph (CFG) is a common term from compilers. If you've ever used a flow-chart, then the concept of a control-flow graph will be pretty familiar to you. It's a representation of your program that clearly exposes the underlying control flow. A control-flow graph is structured as a set of basic blocks connected by edges. The key idea of a basic block is that it is a set of statements that execute \"together\" – that is, whenever you branch to a basic block, you start at the first statement and then execute all the remainder. Only at the end of the block is there the possibility of branching to more than one place (in MIR, we call that final statement the terminator ): bb0: { statement0; statement1; statement2; ... terminator;\n} Many expressions that you are used to in Rust compile down to multiple basic blocks. For example, consider an if statement: a = 1;\nif some_variable { b = 1;\n} else { c = 1;\n}\nd = 1; This would compile into four basic blocks in MIR. In textual form, it looks like this: BB0: { a = 1; if some_variable { goto BB1; } else { goto BB2; }\n} BB1: { b = 1; goto BB3;\n} BB2: { c = 1; goto BB3;\n} BB3: { d = 1; ...\n} In graphical form, it looks like this: BB0 +--------------------+ | a = 1; | +--------------------+ / \\ if some_variable else / \\ BB1 / \\ BB2 +-----------+ +-----------+ | b = 1; | | c = 1; | +-----------+ +-----------+ \\ / \\ / \\ BB3 / +----------+ | d = 1; | | ... | +----------+ When using a control-flow graph, a loop simply appears as a cycle in the graph, and the break keyword translates into a path out of that cycle.","breadcrumbs":"Appendix A: Background topics » What is a control-flow graph?","id":"1268","title":"What is a control-flow graph?"},"1269":{"body":"Static Program Analysis by Anders Møller and Michael I. Schwartzbach is an incredible resource! Dataflow analysis is a type of static analysis that is common in many compilers. It describes a general technique, rather than a particular analysis. The basic idea is that we can walk over a control-flow graph (CFG) and keep track of what some value could be. At the end of the walk, we might have shown that some claim is true or not necessarily true (e.g. \"this variable must be initialized\"). rustc tends to do dataflow analyses over the MIR, since MIR is already a CFG. For example, suppose we want to check that x is initialized before it is used in this snippet: fn foo() { let mut x; if some_cond { x = 1; } dbg!(x);\n} A CFG for this code might look like this: +------+ | Init | (A) +------+ | \\ | if some_cond else \\ +-------+ | \\| x = 1 | (B) | +-------+ | / +---------+ | dbg!(x) | (C) +---------+ We can do the dataflow analysis as follows: we will start off with a flag init which indicates if we know x is initialized. As we walk the CFG, we will update the flag. At the end, we can check its value. So first, in block (A), the variable x is declared but not initialized, so init = false. In block (B), we initialize the value, so we know that x is initialized. So at the end of (B), init = true. Block (C) is where things get interesting. Notice that there are two incoming edges, one from (A) and one from (B), corresponding to whether some_cond is true or not. But we cannot know that! It could be the case the some_cond is always true, so that x is actually always initialized. It could also be the case that some_cond depends on something random (e.g. the time), so x may not be initialized. In general, we cannot know statically (due to Rice's Theorem ). So what should the value of init be in block (C)? Generally, in dataflow analyses, if a block has multiple parents (like (C) in our example), its dataflow value will be some function of all its parents (and of course, what happens in (C)). Which function we use depends on the analysis we are doing. In this case, we want to be able to prove definitively that x must be initialized before use. This forces us to be conservative and assume that some_cond might be false sometimes. So our \"merging function\" is \"and\". That is, init = true in (C) if init = true in (A) and in (B) (or if x is initialized in (C)). But this is not the case; in particular, init = false in (A), and x is not initialized in (C). Thus, init = false in (C); we can report an error that \"x may not be initialized before use\". There is definitely a lot more that can be said about dataflow analyses. There is an extensive body of research literature on the topic, including a lot of theory. We only discussed a forwards analysis, but backwards dataflow analysis is also useful. For example, rather than starting from block (A) and moving forwards, we might have started with the usage of x and moved backwards to try to find its initialization.","breadcrumbs":"Appendix A: Background topics » What is a dataflow analysis?","id":"1269","title":"What is a dataflow analysis?"},"127":{"body":"Our CI is primarily executed on GitHub Actions , with a single workflow defined in .github/workflows/ci.yml , which contains a bunch of steps that are unified for all CI jobs that we execute. When a commit is pushed to a corresponding branch or a PR, the workflow executes the src/ci/citool crate, which dynamically generates the specific CI jobs that should be executed. This script uses the jobs.yml file as an input, which contains a declarative configuration of all our CI jobs. Almost all build steps shell out to separate scripts. This keeps the CI fairly platform independent (i.e., we are not overly reliant on GitHub Actions). GitHub Actions is only relied on for bootstrapping the CI process and for orchestrating the scripts that drive the process. In essence, all CI jobs run ./x test, ./x dist or some other command with different configurations, across various operating systems, targets and platforms. There are two broad categories of jobs that are executed, dist and non-dist jobs. Dist jobs build a full release of the compiler for a specific platform, including all the tools we ship through rustup; Those builds are then uploaded to the rust-lang-ci2 S3 bucket and are available to be locally installed with the rustup-toolchain-install-master tool. The same builds are also used for actual releases: our release process basically consists of copying those artifacts from rust-lang-ci2 to the production endpoint and signing them. Non-dist jobs run our full test suite on the platform, and the test suite of all the tools we ship through rustup; The amount of stuff we test depends on the platform (for example some tests are run only on Tier 1 platforms), and some quicker platforms are grouped together on the same builder to avoid wasting CI resources. Based on an input event (usually a push to a branch), we execute one of three kinds of builds (sets of jobs). PR builds Auto builds Try builds","breadcrumbs":"Testing the compiler » Running tests » Testing with CI » CI workflow","id":"127","title":"CI workflow"},"1270":{"body":"In math, a predicate may be universally quantified or existentially quantified : Universal quantification: the predicate holds if it is true for all possible inputs. Traditional notation: ∀x: P(x). Read as \"for all x, P(x) holds\". Existential quantification: the predicate holds if there is any input where it is true, i.e., there only has to be a single input. Traditional notation: ∃x: P(x). Read as \"there exists x such that P(x) holds\". In Rust, they come up in type checking and trait solving. For example, fn foo() This function claims that the function is well-typed for all types T: ∀ T: well_typed(foo). Another example: fn foo<'a>(_: &'a usize) This function claims that for any lifetime 'a (determined by the caller), it is well-typed: ∀ 'a: well_typed(foo). Another example: fn foo()\nwhere for<'a> F: Fn(&'a u8) This function claims that it is well-typed for all types F such that for all lifetimes 'a, F: Fn(&'a u8): ∀ F: ∀ 'a: (F: Fn(&'a u8)) => well_typed(foo). One more example: fn foo(_: dyn Debug) This function claims that there exists some type T that implements Debug such that the function is well-typed: ∃ T: (T: Debug) and well_typed(foo).","breadcrumbs":"Appendix A: Background topics » What is \"universally quantified\"? What about \"existentially quantified\"?","id":"1270","title":"What is \"universally quantified\"? What about \"existentially quantified\"?"},"1271":{"body":"De Bruijn indices are a way of representing, using only integers, which variables are bound in which binders. They were originally invented for use in lambda calculus evaluation (see this Wikipedia article for more). In rustc, we use de Bruijn indices to represent generic types . Here is a basic example of how de Bruijn indices might be used for closures (we don't actually do this in rustc though!): |x| { f(x) // de Bruijn index of `x` is 1 because `x` is bound 1 level up |y| { g(x, y) // index of `x` is 2 because it is bound 2 levels up // index of `y` is 1 because it is bound 1 level up }\n}","breadcrumbs":"Appendix A: Background topics » What is a de Bruijn Index?","id":"1271","title":"What is a de Bruijn Index?"},"1272":{"body":"Check out the subtyping chapter from the Rust Nomicon . See the variance chapter of this guide for more info on how the type checker handles variance.","breadcrumbs":"Appendix A: Background topics » What are co- and contra-variance?","id":"1272","title":"What are co- and contra-variance?"},"1273":{"body":"Let's describe the concepts of free vs bound in terms of program variables, since that's the thing we're most familiar with. Consider this expression, which creates a closure: |a, b| a + b. Here, the a and b in a + b refer to the arguments that the closure will be given when it is called. We say that the a and b there are bound to the closure, and that the closure signature |a, b| is a binder for the names a and b (because any references to a or b within refer to the variables that it introduces). Consider this expression: a + b. In this expression, a and b refer to local variables that are defined outside of the expression. We say that those variables appear free in the expression (i.e., they are free , not bound (tied up)). So there you have it: a variable \"appears free\" in some expression/statement/whatever if it refers to something defined outside of that expressions/statement/whatever. Equivalently, we can then refer to the \"free variables\" of an expression – which is just the set of variables that \"appear free\". So what does this have to do with regions? Well, we can apply the analogous concept to type and regions. For example, in the type &'a u32, 'a appears free. But in the type for<'a> fn(&'a u32), it does not.","breadcrumbs":"Appendix A: Background topics » What is a \"free region\" or a \"free variable\"? What about \"bound region\"?","id":"1273","title":"What is a \"free region\" or a \"free variable\"? What about \"bound region\"?"},"1274":{"body":"Thanks to mem, scottmcm, and Levi on the official Discord for the recommendations, and to tinaun for posting a link to a twitter thread from Graydon Hoare which had some more recommendations! Other sources: https://gcc.gnu.org/wiki/ListOfCompilerBooks If you have other suggestions, please feel free to open an issue or PR.","breadcrumbs":"Appendix A: Background topics » Further Reading About Compilers","id":"1274","title":"Further Reading About Compilers"},"1275":{"body":"Types and Programming Languages Programming Language Pragmatics Practical Foundations for Programming Languages Compilers: Principles, Techniques, and Tools, 2nd Edition Garbage Collection: Algorithms for Automatic Dynamic Memory Management Linkers and Loaders (There are also free versions of this, but the version we had linked seems to be offline at the moment.) Advanced Compiler Design and Implementation Building an Optimizing Compiler Crafting Interpreters","breadcrumbs":"Appendix A: Background topics » Books","id":"1275","title":"Books"},"1276":{"body":"University of Oregon Programming Languages Summer School archive","breadcrumbs":"Appendix A: Background topics » Courses","id":"1276","title":"Courses"},"1277":{"body":"Wikipedia Esoteric Programming Languages Stanford Encyclopedia of Philosophy nLab","breadcrumbs":"Appendix A: Background topics » Wikis","id":"1277","title":"Wikis"},"1278":{"body":"Programming in Martin-Löf's Type Theory Polymorphism, Subtyping, and Type Inference in MLsub","breadcrumbs":"Appendix A: Background topics » Misc Papers and Blog Posts","id":"1278","title":"Misc Papers and Blog Posts"},"1279":{"body":"Term Meaning arena, arena allocation An arena is a large memory buffer from which other memory allocations are made. This style of allocation is called arena allocation . See this chapter for more info. AST The abstract syntax tree produced by the rustc_ast crate; reflects user syntax very closely. APIT An argument-position impl Trait. Also known as an anonymous type parameter. ( see the reference ). binder A binder is a place where a variable or type is declared; for example, the is a binder for the generic type parameter T in fn foo(..), and |a| ... is a binder for the parameter a. See the background chapter for more . BodyId An identifier that refers to a specific body (definition of a function or constant) in the crate. See the HIR chapter for more . bound variable A bound variable is one that is declared within an expression/term. For example, the variable a is bound within the closure expression |a| a * 2. See the background chapter for more codegen Short for code generation . The code to translate MIR into LLVM IR. codegen unit When we produce LLVM IR, we group the Rust code into a number of codegen units (sometimes abbreviated as CGUs). Each of these units is processed by LLVM independently from one another, enabling parallelism. They are also the unit of incremental re-use. ( see more ) completeness A technical term in type theory, it means that every type-safe program also type-checks. Having both soundness and completeness is very hard, and usually soundness is more important. (see \"soundness\"). control-flow graph A representation of the control-flow of a program; see the background chapter for more CTFE Short for compile-time function evaluation , this is the ability of the compiler to evaluate const fns at compile time. This is part of the compiler's constant evaluation system. ( see more ) cx We tend to use cx as an abbreviation for context . See also tcx, infcx, etc. ctxt We also use ctxt as an abbreviation for context , e.g. TyCtxt . See also cx or tcx . DAG A directed acyclic graph is used during compilation to keep track of dependencies between queries. ( see more ) data-flow analysis A static analysis that figures out what properties are true at each point in the control-flow of a program; see the background chapter for more . de Bruijn index A technique for describing which binder a variable is bound by using only integers. It has the benefit that it is invariant under variable renaming. ( see more ) DefId An index identifying a definition (see rustc_middle/src/hir/def_id.rs). Uniquely identifies a DefPath. See the HIR chapter for more . discriminant The underlying value associated with an enum variant or generator state to indicate it as \"active\" (but not to be confused with its \"variant index\" ). At runtime, the discriminant of the active variant is encoded in the tag . double pointer A pointer with additional metadata. See fat pointer for more. drop glue (Internal) compiler-generated instructions that handle calling the destructors (Drop) for data types. DST Short for dynamically-sized type , this is a type for which the compiler cannot statically know the size in memory (e.g. str or [u8]). Such types don't implement Sized and cannot be allocated on the stack. They can only occur as the last field in a struct. They can only be used behind a pointer (e.g. &str or &[u8]). early-bound lifetime A lifetime region that is substituted at its definition site. Bound in an item's Generics and substituted/instantiated using a GenericArgs. Contrast with late-bound lifetime . ( see more ) effects Right now only means const traits and ~const bounds. ( see more ) empty type See uninhabited type . fat pointer A two word value carrying the address of some value, along with some further information necessary to put the value to use. Rust includes two kinds of fat pointers : references to slices, and trait objects. A reference to a slice carries the starting address of the slice and its length. A trait object carries a value's address and a pointer to the trait's implementation appropriate to that value. \"Fat pointers\" are also known as \"wide pointers\", and \"double pointers\". free variable A free variable is one that is not bound within an expression or term; see the background chapter for more generics The list of generic parameters defined on an item. There are three kinds of generic parameters: Type, lifetime and const parameters. HIR The high-level IR , created by lowering and desugaring the AST. ( see more ) HirId Identifies a particular node in the HIR by combining a def-id with an \"intra-definition offset\". See the HIR chapter for more . ICE Short for internal compiler error , this is when the compiler crashes. ICH Short for incremental compilation hash , these are used as fingerprints for things such as HIR and crate metadata, to check if changes have been made. This is useful in incremental compilation to see if part of a crate has changed and should be recompiled. infcx The type inference context (InferCtxt). (see rustc_middle::infer) inference variable, infer var When doing type, region, const inference, an inference variable is a kind of special type/region that represents what you are trying to infer. Think of X in algebra. For example, if we are trying to infer the type of a variable in a program, we create an inference variable to represent that unknown type. intern Interning refers to storing certain frequently-used constant data, such as strings, and then referring to the data by an identifier (e.g. a Symbol) rather than the data itself, to reduce memory usage and number of allocations. See this chapter for more info. interpreter The heart of const evaluation, running MIR code at compile time. ( see more ) intrinsic Intrinsics are special functions that are implemented in the compiler itself but exposed (often unstably) to users. They do magical and dangerous things. (See std::intrinsics ) IR Short for intermediate representation , a general term in compilers. During compilation, the code is transformed from raw source (ASCII text) to various IRs. In Rust, these are primarily HIR, MIR, and LLVM IR. Each IR is well-suited for some set of computations. For example, MIR is well-suited for the borrow checker, and LLVM IR is well-suited for codegen because LLVM accepts it. IRLO, irlo Sometimes used as an abbreviation for internals.rust-lang.org . item A kind of \"definition\" in the language, such as a static, const, use statement, module, struct, etc. Concretely, this corresponds to the Item type. lang item Items that represent concepts intrinsic to the language itself, such as special built-in traits like Sync and Send; or traits representing operations such as Add; or functions that are called by the compiler. ( see more ) late-bound lifetime A lifetime region that is substituted at its call site. Bound in a HRTB and substituted by specific functions in the compiler, such as liberate_late_bound_regions. Contrast with early-bound lifetime . ( see more ) local crate The crate currently being compiled. This is in contrast to \"upstream crates\" which refer to dependencies of the local crate. LTO Short for link-time optimizations , this is a set of optimizations offered by LLVM that occur just before the final binary is linked. These include optimizations like removing functions that are never used in the final program, for example. ThinLTO is a variant of LTO that aims to be a bit more scalable and efficient, but possibly sacrifices some optimizations. You may also read issues in the Rust repo about \"FatLTO\", which is the loving nickname given to non-Thin LTO. LLVM documentation: here and here . LLVM (actually not an acronym :P) an open-source compiler backend. It accepts LLVM IR and outputs native binaries. Various languages (e.g. Rust) can then implement a compiler front-end that outputs LLVM IR and use LLVM to compile to all the platforms LLVM supports. memoization The process of storing the results of (pure) computations (such as pure function calls) to avoid having to repeat them in the future. This is typically a trade-off between execution speed and memory usage. MIR The mid-level IR that is created after type-checking for use by borrowck and codegen. ( see more ) Miri A tool to detect Undefined Behavior in (unsafe) Rust code. ( see more ) monomorphization The process of taking generic implementations of types and functions and instantiating them with concrete types. For example, in the code we might have Vec, but in the final executable, we will have a copy of the Vec code for every concrete type used in the program (e.g. a copy for Vec, a copy for Vec, etc). normalize A general term for converting to a more canonical form, but in the case of rustc typically refers to associated type normalization . newtype A wrapper around some other type (e.g., struct Foo(T) is a \"newtype\" for T). This is commonly used in Rust to give a stronger type for indices. niche Invalid bit patterns for a type that can be used for layout optimizations. Some types cannot have certain bit patterns. For example, the NonZero* integers or the reference &T cannot be represented by a 0 bitstring. This means the compiler can perform layout optimizations by taking advantage of the invalid \"niche value\". An example application for this is the Discriminant elision on Option-like enums , which allows using a type's niche as the \"tag\" for an enum without requiring a separate field. NLL Short for non-lexical lifetimes , this is an extension to Rust's borrowing system to make it be based on the control-flow graph. node-id or NodeId An index identifying a particular node in the AST or HIR; gradually being phased out and replaced with HirId. See the HIR chapter for more . obligation Something that must be proven by the trait system. ( see more ) placeholder NOTE: skolemization is deprecated by placeholder a way of handling subtyping around \"for-all\" types (e.g., for<'a> fn(&'a u32)) as well as solving higher-ranked trait bounds (e.g., for<'a> T: Trait<'a>). See the chapter on placeholder and universes for more details. point Used in the NLL analysis to refer to some particular location in the MIR; typically used to refer to a node in the control-flow graph. projection A general term for a \"relative path\", e.g. x.f is a \"field projection\", and T::Item is an \"associated type projection\" . promoted constants Constants extracted from a function and lifted to static scope; see this section for more details. provider The function that executes a query. ( see more ) quantified In math or logic, existential and universal quantification are used to ask questions like \"is there any type T for which is true?\" or \"is this true for all types T?\"; see the background chapter for more . query A sub-computation during compilation. Query results can be cached in the current session or to disk for incremental compilation. ( see more ) recovery Recovery refers to handling invalid syntax during parsing (e.g. a missing comma) and continuing to parse the AST. This avoid showing spurious errors to the user (e.g. showing 'missing field' errors when the struct definition contains errors). region Another term for \"lifetime\" often used in the literature and in the borrow checker. rib A data structure in the name resolver that keeps track of a single scope for names. ( see more ) RPIT A return-position impl Trait. ( see the reference ). RPITIT A return-position impl Trait in trait. Unlike RPIT, this is desugared to a generic associated type (GAT). Introduced in RFC 3425 . ( see more ) scrutinee A scrutinee is the expression that is matched on in match expressions and similar pattern matching constructs. For example, in match x { A => 1, B => 2 }, the expression x is the scrutinee. sess The compiler session , which stores global data used throughout compilation side tables Because the AST and HIR are immutable once created, we often carry extra information about them in the form of hashtables, indexed by the id of a particular node. sigil Like a keyword but composed entirely of non-alphanumeric tokens. For example, & is a sigil for references. soundness A technical term in type theory. Roughly, if a type system is sound, then a program that type-checks is type-safe. That is, one can never (in safe rust) force a value into a variable of the wrong type. (see \"completeness\"). span A location in the user's source code, used for error reporting primarily. These are like a file-name/line-number/column tuple on steroids: they carry a start/end point, and also track macro expansions and compiler desugaring. All while being packed into a few bytes (really, it's an index into a table). See the Span datatype for more. subst The act of substituting the generic parameters inside of a type, constant expression, etc. with concrete generic arguments by supplying substs . Nowadays referred to as instantiating in the compiler. substs The substitutions for a given generic item (e.g. the i32, u32 in HashMap). Nowadays referred to as the list of generic arguments in the compiler (but note that strictly speaking these two concepts differ, see the literature). sysroot The directory for build artifacts that are loaded by the compiler at runtime. ( see more ) tag The \"tag\" of an enum/generator encodes the discriminant of the active variant/state. Tags can either be \"direct\" (simply storing the discriminant in a field) or use a \"niche\" . TAIT A type-alias impl Trait. Introduced in RFC 2515 . tcx Standard variable name for the \"typing context\" (TyCtxt), main data structure of the compiler. ( see more ) 'tcx The lifetime of the allocation arenas used by TyCtxt. Most data interned during a compilation session will use this lifetime with the exception of HIR data which uses the 'hir lifetime. ( see more ) token The smallest unit of parsing. Tokens are produced after lexing ( see more ). TLS Thread-local storage . Variables may be defined so that each thread has its own copy (rather than all threads sharing the variable). This has some interactions with LLVM. Not all platforms support TLS. trait reference, trait ref The name of a trait along with a suitable list of generic arguments. ( see more ) trans Short for translation , the code to translate MIR into LLVM IR. Renamed to codegen . Ty The internal representation of a type. ( see more ) TyCtxt The data structure often referred to as tcx in code which provides access to session data and the query system. UFCS Short for universal function call syntax , this is an unambiguous syntax for calling a method. Term no longer in use! Prefer fully-qualified path/syntax . ( see more , see the reference ) uninhabited type A type which has no values. This is not the same as a ZST, which has exactly 1 value. An example of an uninhabited type is enum Foo {}, which has no variants, and so, can never be created. The compiler can treat code that deals with uninhabited types as dead code, since there is no such value to be manipulated. ! (the never type) is an uninhabited type. Uninhabited types are also called empty types . upvar A variable captured by a closure from outside the closure. variance Determines how changes to a generic parameter affect subtyping; for example, if T is a subtype of U, then Vec is a subtype Vec because Vec is covariant in its generic parameter. See the background chapter for a more general explanation. See the variance chapter for an explanation of how type checking handles variance. variant index In an enum, identifies a variant by assigning them indices starting at 0. This is purely internal and not to be confused with the \"discriminant\" which can be overwritten by the user (e.g. enum Bool { True = 42, False = 0 }). well-formedness Semantically: An expression that evaluates to meaningful result. In type systems: A type related construct which follows rules of the type system. wide pointer A pointer with additional metadata. See fat pointer for more. ZST Zero-sized type . A type whose values have size 0 bytes. Since 2^0 = 1, such types can have exactly one value. For example, () (unit) is a ZST. struct Foo; is also a ZST. The compiler can do some nice optimizations around ZSTs.","breadcrumbs":"Appendix B: Glossary » Glossary","id":"1279","title":"Glossary"},"128":{"body":"After each push to a pull request, a set of pr jobs are executed. Currently, these execute the x86_64-gnu-llvm-X, x86_64-gnu-tools, mingw-check-1, mingw-check-2 and mingw-check-tidy jobs, all running on Linux. These execute a relatively short (~40 minutes) and lightweight test suite that should catch common issues. More specifically, they run a set of lints, they try to perform a cross-compile check build to Windows mingw (without producing any artifacts) and they test the compiler using a system version of LLVM. Unfortunately, it would take too many resources to run the full test suite for each commit on every PR. Note on doc comments Note that PR CI as of Oct 2024 by default does not try to run ./x doc xxx. This means that if you have any broken intradoc links that would lead to ./x doc xxx failing, it will happen very late into the full merge queue CI pipeline. Thus, it is a good idea to run ./x doc xxx locally for any doc comment changes to help catch these early. PR jobs are defined in the pr section of jobs.yml . They run under the rust-lang/rust repository, and their results can be observed directly on the PR, in the \"CI checks\" section at the bottom of the PR page.","breadcrumbs":"Testing the compiler » Running tests » Testing with CI » Pull Request builds","id":"128","title":"Pull Request builds"},"1280":{"body":"rustc has a lot of important data structures. This is an attempt to give some guidance on where to learn more about some of the key data structures of the compiler. Item Kind Short description Chapter Declaration BodyId struct One of four types of HIR node identifiers Identifiers in the HIR compiler/rustc_hir/src/hir.rs Compiler struct Represents a compiler session and can be used to drive a compilation. The Rustc Driver and Interface compiler/rustc_interface/src/interface.rs ast::Crate struct A syntax-level representation of a parsed crate The parser compiler/rustc_ast/src/ast.rs rustc_hir::Crate struct A more abstract, compiler-friendly form of a crate's AST The Hir compiler/rustc_hir/src/hir.rs DefId struct One of four types of HIR node identifiers Identifiers in the HIR compiler/rustc_hir/src/def_id.rs Diag struct A struct for a compiler diagnostic, such as an error or lint Emitting Diagnostics compiler/rustc_errors/src/diagnostic.rs DocContext struct A state container used by rustdoc when crawling through a crate to gather its documentation Rustdoc src/librustdoc/core.rs HirId struct One of four types of HIR node identifiers Identifiers in the HIR compiler/rustc_hir/src/hir_id.rs Lexer struct This is the lexer used during parsing. It consumes characters from the raw source code being compiled and produces a series of tokens for use by the rest of the parser The parser compiler/rustc_parse/src/lexer/mod.rs NodeId struct One of four types of HIR node identifiers. Being phased out Identifiers in the HIR compiler/rustc_ast/src/ast.rs P struct An owned immutable smart pointer. By contrast, &T is not owned, and Box is not immutable. None compiler/rustc_ast/src/ptr.rs ParamEnv struct Information about generic parameters or Self, useful for working with associated or generic items Parameter Environment compiler/rustc_middle/src/ty/mod.rs ParseSess struct This struct contains information about a parsing session The parser compiler/rustc_session/src/parse/parse.rs Rib struct Represents a single scope of names Name resolution compiler/rustc_resolve/src/lib.rs Session struct The data associated with a compilation session The parser , The Rustc Driver and Interface compiler/rustc_session/src/session.rs SourceFile struct Part of the SourceMap. Maps AST nodes to their source code for a single source file. Was previously called FileMap The parser compiler/rustc_span/src/lib.rs SourceMap struct Maps AST nodes to their source code. It is composed of SourceFiles. Was previously called CodeMap The parser compiler/rustc_span/src/source_map.rs Span struct A location in the user's source code, used for error reporting primarily Emitting Diagnostics compiler/rustc_span/src/span_encoding.rs rustc_ast::token_stream::TokenStream struct An abstract sequence of tokens, organized into TokenTrees The parser , Macro expansion compiler/rustc_ast/src/tokenstream.rs TraitDef struct This struct contains a trait's definition with type information The ty modules compiler/rustc_middle/src/ty/trait_def.rs TraitRef struct The combination of a trait and its input types (e.g. P0: Trait) Trait Solving: Goals and Clauses compiler/rustc_middle/src/ty/sty.rs Ty<'tcx> struct This is the internal representation of a type used for type checking Type checking compiler/rustc_middle/src/ty/mod.rs TyCtxt<'tcx> struct The \"typing context\". This is the central data structure in the compiler. It is the context that you use to perform all manner of queries The ty modules compiler/rustc_middle/src/ty/context.rs","breadcrumbs":"Appendix C: Code Index » Code Index","id":"1280","title":"Code Index"},"1281":{"body":"These are videos where various experts explain different parts of the compiler:","breadcrumbs":"Appendix D: Compiler Lecture Series » Compiler Lecture Series","id":"1281","title":"Compiler Lecture Series"},"1282":{"body":"January 2019: Tom Tromey discusses debugging support in rustc June 2019: Responsive compilers - Nicholas Matsakis - PLISS 2019 June 2019: Things I Learned (TIL) - Nicholas Matsakis - PLISS 2019","breadcrumbs":"Appendix D: Compiler Lecture Series » General","id":"1282","title":"General"},"1283":{"body":"January 2019: How Salsa Works January 2019: Salsa In More Depth January 2019: Rust analyzer guide February 2019: Rust analyzer syntax trees March 2019: rust-analyzer type-checker overview by flodiebold March 2019: RLS 2.0, Salsa, and Name Resolution","breadcrumbs":"Appendix D: Compiler Lecture Series » Rust Analyzer","id":"1283","title":"Rust Analyzer"},"1284":{"body":"July 2015: Felix Klock - Rust: A type system you didn't know you wanted - Curry On November 2016: Felix Klock - Subtyping in Rust and Clarke's Third Law February 2019: Universes and Lifetimes April 2019: Representing types in rustc March 2019: RFC #2229 Disjoint Field Capture plan","breadcrumbs":"Appendix D: Compiler Lecture Series » Type System","id":"1284","title":"Type System"},"1285":{"body":"October 2018: closures and upvar capture October 2018: blitzerr closure upvar tys January 2019: Convert Closure Upvar Representation to Tuples with blitzerr","breadcrumbs":"Appendix D: Compiler Lecture Series » Closures","id":"1285","title":"Closures"},"1286":{"body":"July 2018: Coherence in Chalk by Sunjay Varma - Bay Area Rust Meetup March 2019: rustc-chalk integration overview April 2019: How the chalk-engine crate works May 2019: How the chalk-engine crate works 2","breadcrumbs":"Appendix D: Compiler Lecture Series » Chalk","id":"1286","title":"Chalk"},"1287":{"body":"March 2019: Polonius-rustc walkthrough May 2019: Polonius WG: Initialization and move tracking","breadcrumbs":"Appendix D: Compiler Lecture Series » Polonius","id":"1287","title":"Polonius"},"1288":{"body":"March 2019: oli-obk on miri and constant evaluation","breadcrumbs":"Appendix D: Compiler Lecture Series » Miri","id":"1288","title":"Miri"},"1289":{"body":"February 2019: async-await implementation plans April 2019: async-await region inferencer","breadcrumbs":"Appendix D: Compiler Lecture Series » Async","id":"1289","title":"Async"},"129":{"body":"Before a commit can be merged into the master branch, it needs to pass our complete test suite. We call this an auto build. This build runs tens of CI jobs that exercise various tests across operating systems and targets. The full test suite is quite slow; it can take two hours or more until all the auto CI jobs finish. Most platforms only run the build steps, some run a restricted set of tests, only a subset run the full suite of tests (see Rust's platform tiers ). Auto jobs are defined in the auto section of jobs.yml . They are executed on the auto branch under the rust-lang/rust repository and their results can be seen here , although usually you will be notified of the result by a comment made by bors on the corresponding PR. At any given time, at most a single auto build is being executed. Find out more here .","breadcrumbs":"Testing the compiler » Running tests » Testing with CI » Auto builds","id":"129","title":"Auto builds"},"1290":{"body":"January 2019: Cranelift December 2024: LLVM Developers' Meeting - Rust ❤️ LLVM","breadcrumbs":"Appendix D: Compiler Lecture Series » Code Generation","id":"1290","title":"Code Generation"},"1291":{"body":"This is a reading list of material relevant to Rust. It includes prior research that has - at one time or another - influenced the design of Rust, as well as publications about Rust.","breadcrumbs":"Appendix E: Bibliography » Rust Bibliography","id":"1291","title":"Rust Bibliography"},"1292":{"body":"Alias burying - We tried something similar and abandoned it. External uniqueness is unique enough Macros that work together Making ad-hoc polymorphism less ad hoc Region based memory management in Cyclone Region Based Memory Management Safe manual memory management in Cyclone Skolem Normal Form Traits: composable units of behavior Uniqueness and Reference Immutability for Safe Parallelism","breadcrumbs":"Appendix E: Bibliography » Type system","id":"1292","title":"Type system"},"1293":{"body":"A Java fork/join calamity - critique of Java's fork/join library, particularly its application of work stealing to non-strict computation Algorithms for scalable synchronization of shared-memory multiprocessors Balanced work stealing for time-sharing multicores Contention aware scheduling Dynamic circular work stealing deque - The Chase/Lev deque Epoch-based reclamation . Language support for fast and reliable message passing in singularity OS Non-blocking steal-half work queues Reagents: expressing and composing fine-grained concurrency Scheduling multithreaded computations by work stealing Scheduling techniques for concurrent systems Singularity: rethinking the software stack The data locality of work stealing Thread scheduling for multiprogramming multiprocessors Three layer cake for shared-memory programming Work-first and help-first scheduling policies for async-finish task parallelism - More general than fully-strict work stealing","breadcrumbs":"Appendix E: Bibliography » Concurrency","id":"1293","title":"Concurrency"},"1294":{"body":"Composing High-Performance Memory Allocators Crash-only software Reconsidering Custom Memory Allocation","breadcrumbs":"Appendix E: Bibliography » Others","id":"1294","title":"Others"},"1295":{"body":"GPU Programming in Rust: Implementing High Level Abstractions in a Systems Level Language . Early GPU work by Eric Holk. Parallel closures: a new twist on an old idea not exactly about Rust, but by nmatsakis Patina: A Formalization of the Rust Programming Language . Early formalization of a subset of the type system, by Eric Reed. Experience Report: Developing the Servo Web Browser Engine using Rust . By Lars Bergstrom. Implementing a Generic Radix Trie in Rust . Undergrad paper by Michael Sproul. Reenix: Implementing a Unix-Like Operating System in Rust . Undergrad paper by Alex Light. Evaluation of performance and productivity metrics of potential programming languages in the HPC environment . Bachelor's thesis by Florian Wilkens. Compares C, Go and Rust. Nom, a byte oriented, streaming, zero copy, parser combinators library in Rust . By Geoffroy Couprie, research for VLC. Graph-Based Higher-Order Intermediate Representation . An experimental IR implemented in Impala, a Rust-like language. Code Refinement of Stencil Codes . Another paper using Impala. Parallelization in Rust with fork-join and friends . Linus Farnstrand's master's thesis. Session Types for Rust . Philip Munksgaard's master's thesis. Research for Servo. Ownership is Theft: Experiences Building an Embedded OS in Rust - Amit Levy, et. al. You can't spell trust without Rust . Aria Beingessner's master's thesis. Rust-Bio: a fast and safe bioinformatics library . Johannes Köster Safe, Correct, and Fast Low-Level Networking . Robert Clipsham's master's thesis. Formalizing Rust traits . Jonatan Milewski's master's thesis. Rust as a Language for High Performance GC Implementation Simple Verification of Rust Programs via Functional Purification . Sebastian Ullrich's master's thesis. Writing parsers like it is 2017 Pierre Chifflier and Geoffroy Couprie for the Langsec Workshop The Case for Writing a Kernel in Rust RustBelt: Securing the Foundations of the Rust Programming Language Oxide: The Essence of Rust . By Aaron Weiss, Olek Gierczak, Daniel Patterson, Nicholas D. Matsakis, and Amal Ahmed.","breadcrumbs":"Appendix E: Bibliography » Papers about Rust","id":"1295","title":"Papers about Rust"},"1296":{"body":"What's a project without a sense of humor? And frankly some of these are enlightening? Weird exprs test Ferris Rap The Genesis of Generic Germination The Bastion of the Turbofish test Rust Koans break rust; The Nomicon Intro rustc-ty renaming punfest try using their name \"ferris\" instead Forbid pineapple on pizza","breadcrumbs":"Appendix Z: HumorRust » Humor in Rust","id":"1296","title":"Humor in Rust"},"13":{"body":"There are a bunch of other ways you can contribute, especially if you don't feel comfortable jumping straight into the large rust-lang/rust codebase. The following tasks are doable without much background knowledge but are incredibly helpful: Writing documentation : if you are feeling a bit more intrepid, you could try to read a part of the code and write doc comments for it. This will help you to learn some part of the compiler while also producing a useful artifact! Triaging issues : categorizing, replicating, and minimizing issues is very helpful to the Rust maintainers. Working groups : there are a bunch of working groups on a wide variety of rust-related things. Answer questions in the Get Help! channels on the Rust Discord server , on users.rust-lang.org , or on StackOverflow . Participate in the RFC process . Find a requested community library , build it, and publish it to Crates.io . Easier said than done, but very, very valuable!","breadcrumbs":"Getting Started » Other ways to contribute","id":"13","title":"Other ways to contribute"},"130":{"body":"Sometimes we want to run a subset of the test suite on CI for a given PR, or build a set of compiler artifacts from that PR, without attempting to merge it. We call this a \"try build\". A try build is started after a user with the proper permissions posts a PR comment with the @bors try command. There are several use-cases for try builds: Run a set of performance benchmarks using our rustc-perf benchmark suite. For this, a working compiler build is needed, which can be generated with a try build that runs the dist-x86_64-linux CI job, which builds an optimized version of the compiler on Linux (this job is currently executed by default when you start a try build). To create a try build and schedule it for a performance benchmark, you can use the @bors try @rust-timer queue command combination. Check the impact of the PR across the Rust ecosystem, using a crater run. Again, a working compiler build is needed for this, which can be produced by the dist-x86_64-linux CI job. Run a specific CI job (e.g. Windows tests) on a PR, to quickly test if it passes the test suite executed by that job. By default, if you send a comment with @bors try, the jobs defined in the try section of jobs.yml will be executed. We call this mode a \"fast try build\". Such a try build will not execute any tests, and it will allow compilation warnings. It is useful when you want to get an optimized toolchain as fast as possible, for a crater run or performance benchmarks, even if it might not be working fully correctly. If you want to run a custom CI job in a try build and make sure that it passes all tests and does not produce any compilation warnings, you can select CI jobs to be executed by adding lines containing try-job: to the PR description. All such specified jobs will be executed in the try build once the @bors try command is used on the PR. Each pattern can either be an exact name of a job or a glob pattern that matches multiple jobs, for example *msvc* or *-alt. You can start at most 20 jobs in a single try build. When using glob patterns, you might want to wrap them in backticks (`) to avoid GitHub rendering the pattern as Markdown. Using try-job PR description directives Identify which set of try-jobs you would like to exercise. You can find the name of the CI jobs in jobs.yml . Amend PR description to include a set of patterns (usually at the end of the PR description), for example: This PR fixes #123456. try-job: x86_64-msvc\ntry-job: test-various\ntry-job: `*-alt` Each try-job pattern must be on its own line. Run the prescribed try jobs with @bors try. As aforementioned, this requires the user to either (1) have try permissions or (2) be delegated with try permissions by @bors delegate by someone who has try permissions. Note that this is usually easier to do than manually edit jobs.yml . However, it can be less flexible because you cannot adjust the set of tests that are exercised this way. Try jobs are defined in the try section of jobs.yml . They are executed on the try branch under the rust-lang/rust repository and their results can be seen here , although usually you will be notified of the result by a comment made by bors on the corresponding PR. Note that if you start the default try job using @bors try, it will skip building several dist components and running post-optimization tests, to make the build duration shorter. If you want to execute the full build as it would happen before a merge, add an explicit try-job pattern with the name of the default try job (currently dist-x86_64-linux). Multiple try builds can execute concurrently across different PRs. Bors identifies try jobs by commit hash. This means that if you have two PRs containing the same (latest) commits, running @bors try will result in the same try job and it really confuses bors. Please refrain from doing so.","breadcrumbs":"Testing the compiler » Running tests » Testing with CI » Try builds","id":"130","title":"Try builds"},"131":{"body":"If you want to modify what gets executed on our CI, you can simply modify the pr, auto or try sections of the jobs.yml file. You can also modify what gets executed temporarily, for example to test a particular platform or configuration that is challenging to test locally (for example, if a Windows build fails, but you don't have access to a Windows machine). Don't hesitate to use CI resources in such situations to try out a fix! You can perform an arbitrary CI job in two ways: Use the try build functionality, and specify the CI jobs that you want to be executed in try builds in your PR description. Modify the pr section of jobs.yml to specify which CI jobs should be executed after each push to your PR. This might be faster than repeatedly starting try builds. To modify the jobs executed after each push to a PR, you can simply copy one of the job definitions from the auto section to the pr section. For example, the x86_64-msvc job is responsible for running the 64-bit MSVC tests. You can copy it to the pr section to cause it to be executed after a commit is pushed to your PR, like this: pr: ... - image: x86_64-gnu-tools <<: *job-linux-16c # this item was copied from the `auto` section # vvvvvvvvvvvvvvvvvv - image: x86_64-msvc env: RUST_CONFIGURE_ARGS: --build=x86_64-pc-windows-msvc --enable-profiler SCRIPT: make ci-msvc <<: *job-windows-8c Then you can commit the file and push it to your PR branch on GitHub. GitHub Actions should then execute this CI job after each push to your PR. After you have finished your experiments, don't forget to remove any changes you have made to jobs.yml, if they were supposed to be temporary! A good practice is to prefix [WIP] in PR title while still running try jobs and [DO NOT MERGE] in the commit that modifies the CI jobs for testing purposes. Although you are welcome to use CI, just be conscious that this is a shared resource with limited concurrency. Try not to enable too many jobs at once (one or two should be sufficient in most cases).","breadcrumbs":"Testing the compiler » Running tests » Testing with CI » Modifying CI jobs","id":"131","title":"Modifying CI jobs"},"132":{"body":"CI services usually test the last commit of a branch merged with the last commit in master, and while that’s great to check if the feature works in isolation, it doesn’t provide any guarantee the code is going to work once it’s merged. Breakages like these usually happen when another, incompatible PR is merged after the build happened. To ensure a master branch that works all the time, we forbid manual merges. Instead, all PRs have to be approved through our bot, bors (the software behind it is called homu ). All the approved PRs are put in a merge queue (sorted by priority and creation date) and are automatically tested one at the time. If all the builders are green, the PR is merged, otherwise the failure is recorded and the PR will have to be re-approved again. Bors doesn’t interact with CI services directly, but it works by pushing the merge commit it wants to test to specific branches (like auto or try), which are configured to execute CI checks. Bors then detects the outcome of the build by listening for either Commit Statuses or Check Runs. Since the merge commit is based on the latest master and only one can be tested at the same time, when the results are green, master is fast-forwarded to that merge commit. Unfortunately testing a single PR at the time, combined with our long CI (~2 hours for a full run), means we can’t merge too many PRs in a single day, and a single failure greatly impacts our throughput for the day. The maximum number of PRs we can merge in a day is around ~10. The large CI run times and requirement for a large builder pool is largely due to the fact that full release artifacts are built in the dist- builders. This is worth it because these release artifacts: Allow perf testing even at a later date. Allow bisection when bugs are discovered later. Ensure release quality since if we're always releasing, we can catch problems early.","breadcrumbs":"Testing the compiler » Running tests » Testing with CI » Merging PRs serially with bors","id":"132","title":"Merging PRs serially with bors"},"133":{"body":"Some PRs don’t need the full test suite to be executed: trivial changes like typo fixes or README improvements shouldn’t break the build, and testing every single one of them for 2+ hours is a big waste of time. To solve this, we regularly create a \"rollup\", a PR where we merge several pending trivial PRs so they can be tested together. Rollups are created manually by a team member using the \"create a rollup\" button on the merge queue . The team member uses their judgment to decide if a PR is risky or not, and are the best tool we have at the moment to keep the queue in a manageable state.","breadcrumbs":"Testing the compiler » Running tests » Testing with CI » Rollups","id":"133","title":"Rollups"},"134":{"body":"All CI jobs, except those on macOS and Windows, are executed inside that platform’s custom Docker container . This has a lot of advantages for us: The build environment is consistent regardless of the changes of the underlying image (switching from the trusty image to xenial was painless for us). We can use ancient build environments to ensure maximum binary compatibility, for example using older CentOS releases on our Linux builders. We can avoid reinstalling tools (like QEMU or the Android emulator) every time thanks to Docker image caching. Users can run the same tests in the same environment locally by just running cargo run --manifest-path src/ci/citool/Cargo.toml run-local , which is awesome to debug failures. Note that there are only linux docker images available locally due to licensing and other restrictions. The docker images prefixed with dist- are used for building artifacts while those without that prefix run tests and checks. We also run tests for less common architectures (mainly Tier 2 and Tier 3 platforms) in CI. Since those platforms are not x86 we either run everything inside QEMU or just cross-compile if we don’t want to run the tests for that platform. These builders are running on a special pool of builders set up and maintained for us by GitHub.","breadcrumbs":"Testing the compiler » Running tests » Testing with CI » Docker","id":"134","title":"Docker"},"135":{"body":"Our CI workflow uses various caching mechanisms, mainly for two things:","breadcrumbs":"Testing the compiler » Running tests » Testing with CI » Caching","id":"135","title":"Caching"},"136":{"body":"The Docker images we use to run most of the Linux-based builders take a long time to fully build. To speed up the build, we cache them using Docker registry caching , with the intermediate artifacts being stored on ghcr.io . We also push the built Docker images to ghcr, so that they can be reused by other tools (rustup) or by developers running the Docker build locally (to speed up their build). Since we test multiple, diverged branches (master, beta and stable), we can’t rely on a single cache for the images, otherwise builds on a branch would override the cache for the others. Instead, we store the images under different tags, identifying them with a custom hash made from the contents of all the Dockerfiles and related scripts. The CI calculates a hash key, so that the cache of a Docker image is invalidated if one of the following changes: Dockerfile Files copied into the Docker image in the Dockerfile The architecture of the GitHub runner (x86 or ARM)","breadcrumbs":"Testing the compiler » Running tests » Testing with CI » Docker images caching","id":"136","title":"Docker images caching"},"137":{"body":"We build some C/C++ stuff in various CI jobs, and we rely on sccache to cache the intermediate LLVM artifacts. Sccache is a distributed ccache developed by Mozilla, which can use an object storage bucket as the storage backend. With sccache there's no need to calculate the hash key ourselves. Sccache invalidates the cache automatically when it detects changes to relevant inputs, such as the source code, the version of the compiler, and important environment variables. So we just pass the sccache wrapper on top of cargo and sccache does the rest. We store the persistent artifacts on the S3 bucket rust-lang-ci-sccache2. So when the CI runs, if sccache sees that LLVM is being compiled with the same C/C++ compiler and the LLVM source code is the same, sccache retrieves the individual compiled translation units from S3.","breadcrumbs":"Testing the compiler » Running tests » Testing with CI » LLVM caching with sccache","id":"137","title":"LLVM caching with sccache"},"138":{"body":"During the years we developed some custom tooling to improve our CI experience.","breadcrumbs":"Testing the compiler » Running tests » Testing with CI » Custom tooling around CI","id":"138","title":"Custom tooling around CI"},"139":{"body":"The build logs for rust-lang/rust are huge, and it’s not practical to find what caused the build to fail by looking at the logs. To improve the developers’ experience we developed a bot called Rust Log Analyzer (RLA) that receives the build logs on failure and extracts the error message automatically, posting it on the PR. The bot is not hardcoded to look for error strings, but was trained with a bunch of build failures to recognize which lines are common between builds and which are not. While the generated snippets can be weird sometimes, the bot is pretty good at identifying the relevant lines even if it’s an error we've never seen before.","breadcrumbs":"Testing the compiler » Running tests » Testing with CI » Rust Log Analyzer to show the error message in PRs","id":"139","title":"Rust Log Analyzer to show the error message in PRs"},"14":{"body":"See \"How to build and run the compiler\" .","breadcrumbs":"Getting Started » Cloning and Building","id":"14","title":"Cloning and Building"},"140":{"body":"The rust-lang/rust repo doesn’t only test the compiler on its CI, but also a variety of tools and documentation. Some documentation is pulled in via git submodules. If we blocked merging rustc PRs on the documentation being fixed, we would be stuck in a chicken-and-egg problem, because the documentation's CI would not pass since updating it would need the not-yet-merged version of rustc to test against (and we usually require CI to be passing). To avoid the problem, submodules are allowed to fail, and their status is recorded in rust-toolstate . When a submodule breaks, a bot automatically pings the maintainers so they know about the breakage, and it records the failure on the toolstate repository. The release process will then ignore broken tools on nightly, removing them from the shipped nightlies. While tool failures are allowed most of the time, they’re automatically forbidden a week before a release: we don’t care if tools are broken on nightly but they must work on beta and stable, so they also need to work on nightly a few days before we promote nightly to beta. More information is available in the toolstate documentation .","breadcrumbs":"Testing the compiler » Running tests » Testing with CI » Toolstate to support allowed failures","id":"140","title":"Toolstate to support allowed failures"},"141":{"body":"To monitor the Rust CI, you can have a look at the public dashboard maintained by the infra-team. These are some useful panels from the dashboard: Pipeline duration: check how long the auto builds takes to run. Top slowest jobs: check which jobs are taking the longest to run. Change in median job duration: check what jobs are slowest than before. Useful to detect regressions. Top failed jobs: check which jobs are failing the most. To learn more about the dashboard, see the Datadog CI docs .","breadcrumbs":"Testing the compiler » Running tests » Testing with CI » Public CI dashboard","id":"141","title":"Public CI dashboard"},"142":{"body":"If you want to determine which bootstrap.toml settings are used in CI for a particular job, it is probably easiest to just look at the build log. To do this: Go to https://github.com/rust-lang/rust/actions?query=branch%3Aauto+is%3Asuccess to find the most recently successful build, and click on it. Choose the job you are interested in on the left-hand side. Click on the gear icon and choose \"View raw logs\" Search for the string \"Configure the build\" All of the build settings are listed below that starting with the configure: prefix.","breadcrumbs":"Testing the compiler » Running tests » Testing with CI » Determining the CI configuration","id":"142","title":"Determining the CI configuration"},"143":{"body":"UI test walkthrough Step 1: Add a test file Step 2: Generate the expected output Step 3: Add error annotations Step 4: Review the output Step 5: Check other tests Comment explaining what the test is about In general, we expect every PR that fixes a bug in rustc to come accompanied by a regression test of some kind. This test should fail in master but pass after the PR. These tests are really useful for preventing us from repeating the mistakes of the past. The first thing to decide is which kind of test to add. This will depend on the nature of the change and what you want to exercise. Here are some rough guidelines: The majority of compiler tests are done with compiletest . The majority of compiletest tests are UI tests in the tests/ui directory. Changes to the standard library are usually tested within the standard library itself. The majority of standard library tests are written as doctests, which illustrate and exercise typical API behavior. Additional unit tests should go in library/${crate}/tests (where ${crate} is usually core, alloc, or std). If the code is part of an isolated system, and you are not testing compiler output, consider using a unit or integration test . Need to run rustdoc? Prefer a rustdoc or rustdoc-ui test. Occasionally you'll need rustdoc-js as well. Other compiletest test suites are generally used for special purposes: Need to run gdb or lldb? Use the debuginfo test suite. Need to inspect LLVM IR or MIR IR? Use the codegen or mir-opt test suites. Need to inspect the resulting binary in some way? Or if all the other test suites are too limited for your purposes? Then use run-make. Check out the compiletest chapter for more specialized test suites. After deciding on which kind of test to add, see best practices for guidance on how to author tests that are easy to work with that stand the test of time (i.e. if a test fails or need to be modified several years later, how can we make it easier for them?).","breadcrumbs":"Testing the compiler » Adding new tests » Adding new tests","id":"143","title":"Adding new tests"},"144":{"body":"The following is a basic guide for creating a UI test , which is one of the most common compiler tests. For this tutorial, we'll be adding a test for an async error message.","breadcrumbs":"Testing the compiler » Adding new tests » UI test walkthrough","id":"144","title":"UI test walkthrough"},"145":{"body":"The first step is to create a Rust source file somewhere in the tests/ui tree. When creating a test, do your best to find a good location and name (see Test organization for more). Since naming is the hardest part of development, everything should be downhill from here! Let's place our async test at tests/ui/async-await/await-without-async.rs: // Provide diagnostics when the user writes `await` in a non-`async` function.\n//@ edition:2018 async fn foo() {} fn bar() { foo().await\n} fn main() {} A few things to notice about our test: The top should start with a short comment that explains what the test is for . The //@ edition:2018 comment is called a directive which provides instructions to compiletest on how to build the test. Here we need to set the edition for async to work (the default is edition 2015). Following that is the source of the test. Try to keep it succinct and to the point. This may require some effort if you are trying to minimize an example from a bug report. We end this test with an empty fn main function. This is because the default for UI tests is a bin crate-type, and we don't want the \"main not found\" error in our test. Alternatively, you could add #![crate_type=\"lib\"].","breadcrumbs":"Testing the compiler » Adding new tests » Step 1: Add a test file","id":"145","title":"Step 1: Add a test file"},"146":{"body":"The next step is to create the expected output snapshots from the compiler. This can be done with the --bless option: ./x test tests/ui/async-await/await-without-async.rs --bless This will build the compiler (if it hasn't already been built), compile the test, and place the output of the compiler in a file called tests/ui/async-await/await-without-async.stderr. However, this step will fail! You should see an error message, something like this: error: /rust/tests/ui/async-await/await-without-async.rs:7: unexpected error: '7:10: 7:16: await is only allowed inside async functions and blocks E0728' This is because the stderr contains errors which were not matched by error annotations in the source file.","breadcrumbs":"Testing the compiler » Adding new tests » Step 2: Generate the expected output","id":"146","title":"Step 2: Generate the expected output"},"147":{"body":"Every error needs to be annotated with a comment in the source with the text of the error. In this case, we can add the following comment to our test file: fn bar() { foo().await //~^ ERROR `await` is only allowed inside `async` functions and blocks\n} The //~^ squiggle caret comment tells compiletest that the error belongs to the previous line (more on this in the Error annotations section). Save that, and run the test again: ./x test tests/ui/async-await/await-without-async.rs It should now pass, yay!","breadcrumbs":"Testing the compiler » Adding new tests » Step 3: Add error annotations","id":"147","title":"Step 3: Add error annotations"},"148":{"body":"Somewhat hand-in-hand with the previous step, you should inspect the .stderr file that was created to see if it looks like how you expect. If you are adding a new diagnostic message, now would be a good time to also consider how readable the message looks overall, particularly for people new to Rust. Our example tests/ui/async-await/await-without-async.stderr file should look like this: error[E0728]: `await` is only allowed inside `async` functions and blocks --> $DIR/await-without-async.rs:7:10 |\nLL | fn bar() { | --- this is not `async`\nLL | foo().await | ^^^^^^ only allowed inside `async` functions and blocks error: aborting due to previous error For more information about this error, try `rustc --explain E0728`. You may notice some things look a little different than the regular compiler output. The $DIR removes the path information which will differ between systems. The LL values replace the line numbers. That helps avoid small changes in the source from triggering large diffs. See the Normalization section for more. Around this stage, you may need to iterate over the last few steps a few times to tweak your test, re-bless the test, and re-review the output.","breadcrumbs":"Testing the compiler » Adding new tests » Step 4: Review the output","id":"148","title":"Step 4: Review the output"},"149":{"body":"Sometimes when adding or changing a diagnostic message, this will affect other tests in the test suite. The final step before posting a PR is to check if you have affected anything else. Running the UI suite is usually a good start: ./x test tests/ui If other tests start failing, you may need to investigate what has changed and if the new output makes sense. You may also need to re-bless the output with the --bless flag.","breadcrumbs":"Testing the compiler » Adding new tests » Step 5: Check other tests","id":"149","title":"Step 5: Check other tests"},"15":{"body":"This section has moved to the \"Contribution Procedures\" chapter.","breadcrumbs":"Getting Started » Contributor Procedures","id":"15","title":"Contributor Procedures"},"150":{"body":"The first comment of a test file should summarize the point of the test , and highlight what is important about it. If there is an issue number associated with the test, include the issue number. This comment doesn't have to be super extensive. Just something like \"Regression test for #18060: match arms were matching in the wrong order.\" might already be enough. These comments are very useful to others later on when your test breaks, since they often can highlight what the problem is. They are also useful if for some reason the tests need to be refactored, since they let others know which parts of the test were important. Often a test must be rewritten because it no longer tests what it was meant to test, and then it's useful to know what it was meant to test exactly.","breadcrumbs":"Testing the compiler » Adding new tests » Comment explaining what the test is about","id":"150","title":"Comment explaining what the test is about"},"151":{"body":"This chapter describes best practices related to authoring and modifying tests. We want to make sure the tests we author are easy to understand and modify, even several years later, without needing to consult the original author and perform a bunch of git archeology. It's good practice to review the test that you authored by pretending that you are a different contributor who is looking at the test that failed several years later without much context (this also helps yourself even a few days or months later!). Then ask yourself: how can I make my life and their lives easier? To help put this into perspective, let's start with an aside on how to write a test that makes the life of another contributor as hard as possible. Aside: Simple Test Sabotage Field Manual To make the life of another contributor as hard as possible, one might: Name the test after an issue number alone without any other context, e.g. issue-123456.rs. Have no comments at all on what the test is trying to exercise, no links to relevant context. Include a test that is massive (that can otherwise be minimized) and contains non-essential pieces which distracts from the core thing the test is actually trying to test. Include a bunch of unrelated syntax errors and other errors which are not critical to what the test is trying to check. Weirdly format the snippets. Include a bunch of unused and unrelated features. Have e.g. ignore-windows compiletest directives but don't offer any explanation as to why they are needed.","breadcrumbs":"Testing the compiler » Best practices » Best practices for writing tests","id":"151","title":"Best practices for writing tests"},"152":{"body":"Make it easy for the reader to immediately understand what the test is exercising, instead of having to type in the issue number and dig through github search for what the test is trying to exercise. This has an additional benefit of making the test possible to be filtered via --test-args as a collection of related tests. Name the test after what it's trying to exercise or prevent regressions of. Keep it concise. Avoid using issue numbers alone as test names. Avoid starting the test name with issue-xxxxx prefix as it degrades auto-completion. Avoid using only issue numbers as test names Prefer including them as links or #123456 in test comments instead. Or if it makes sense to include the issue number, also include brief keywords like macro-external-span-ice-123956.rs. tests/ui/typeck/issue-123456.rs // bad\ntests/ui/typeck/issue-123456-asm-macro-external-span-ice.rs // bad (for tab completion)\ntests/ui/typeck/asm-macro-external-span-ice-123456.rs // good\ntests/ui/typeck/asm-macro-external-span-ice.rs // good issue-123456.rs does not tell you immediately anything about what the test is actually exercising meaning you need to do additional searching. Including the issue number in the test name as a prefix makes tab completion less useful (if you ls a test directory and get a bunch of issue-xxxxx prefixes). We can link to the issue in a test comment. //! Check that `asm!` macro including nested macros that come from external\n//! crates do not lead to a codepoint boundary assertion ICE.\n//!\n//! Regression test for . One exception to this rule is crashes tests : there it is canonical that tests are named only after issue numbers because its purpose is to track snippets from which issues no longer ICE/crash, and they would either be removed or converted into proper ui/other tests in the fix PRs.","breadcrumbs":"Testing the compiler » Best practices » Test naming","id":"152","title":"Test naming"},"153":{"body":"For most test suites, try to find a semantically meaningful subdirectory to home the test. E.g. for an implementation of RFC 2093 specifically, we can group a collection of tests under tests/ui/rfc-2093-infer-outlives/. For the directory name, include what the RFC is about. For the run-make test suite, each rmake.rs must be contained within an immediate subdirectory under tests/run-make/. Further nesting is not presently supported. Avoid including issue number in the directory name too, include that info in a comment inside rmake.rs.","breadcrumbs":"Testing the compiler » Best practices » Test organization","id":"153","title":"Test organization"},"154":{"body":"To help other contributors understand what the test is about if their changes lead to the test failing, we should make sure a test has sufficient docs about its intent/purpose, links to relevant context (incl. issue numbers or other discussions) and possibly relevant resources (e.g. can be helpful to link to Win32 APIs for specific behavior). Synopsis of a test with good comments //! Brief summary of what the test is exercising.\n//! Example: Regression test for #123456: make sure coverage attribute don't ICE\n//! when applied to non-items.\n//!\n//! Optional: Remarks on related tests/issues, external APIs/tools, crash\n//! mechanism, how it's fixed, FIXMEs, limitations, etc.\n//! Example: This test is like `tests/attrs/linkage.rs`, but this test is\n//! specifically checking `#[coverage]` which exercises a different code\n//! path. The ICE was triggered during attribute validation when we tried\n//! to construct a `def_path_str` but only emitted the diagnostic when the\n//! platform is windows, causing an ICE on unix.\n//!\n//! Links to relevant issues and discussions. Examples below:\n//! Regression test for .\n//! See also .\n//! See discussion at .\n//! See [`clone(2)`].\n//!\n//! [`clone(2)`]: https://man7.org/linux/man-pages/man2/clone.2.html //@ ignore-windows\n// Reason: (why is this test ignored for windows? why not specifically\n// windows-gnu or windows-msvc?) // Optional: Summary of test cases: What positive cases are checked?\n// What negative cases are checked? Any specific quirks? fn main() { #[coverage] //~^ ERROR coverage attribute can only be applied to function items. let _ = { // Comment highlighting something that deserves reader attention. fn foo() {} };\n} For how much context/explanation is needed, it is up to the author and reviewer's discretion. A good rule of thumb is non-trivial things exercised in the test deserves some explanation to help other contributors to understand. This may include remarks on: How an ICE can get triggered if it's quite elaborate. Related issues and tests (e.g. this test is like another test but is kept separate because...). Platform-specific behaviors. Behavior of external dependencies and APIs: syscalls, linkers, tools, environments and the likes.","breadcrumbs":"Testing the compiler » Best practices » Test descriptions","id":"154","title":"Test descriptions"},"155":{"body":"Try to make sure the test is as minimal as possible. Minimize non-critical code and especially minimize unnecessary syntax and type errors which can clutter stderr snapshots. Where possible, use semantically meaningful names (e.g. fn bare_coverage_attributes() {}).","breadcrumbs":"Testing the compiler » Best practices » Test content","id":"155","title":"Test content"},"156":{"body":"All tests need to strive to be reproducible and reliable. Flaky tests are the worst kind of tests, arguably even worse than not having the test in the first place. Flaky tests can fail in completely unrelated PRs which can confuse other contributors and waste their time trying to figure out if test failure is related. Flaky tests provide no useful information from its test results other than it's flaky and not reliable: if a test passed but it's flakey, did I just get lucky? if a test is flakey but it failed, was it just spurious? Flaky tests degrade confidence in the whole test suite. If a test suite can randomly spuriously fail due to flaky tests, did the whole test suite pass or did I just get lucky/unlucky? Flaky tests can randomly fail in full CI, wasting previous full CI resources.","breadcrumbs":"Testing the compiler » Best practices » Flaky tests","id":"156","title":"Flaky tests"},"157":{"body":"See compiletest directives for a listing of directives. For ignore-*/needs-*/only-* directives, unless extremely obvious, provide a brief remark on why the directive is needed. E.g. \"//@ ignore-wasi (wasi codegens the main symbol differently)\". When using //@ ignore-auxiliary, specify the corresponding main test files, e.g. //@ ignore-auxiliary (used by `./foo.rs`).","breadcrumbs":"Testing the compiler » Best practices » Compiletest directives","id":"157","title":"Compiletest directives"},"158":{"body":"See LLVM FileCheck guide for details. Avoid matching on specific register numbers or basic block numbers unless they're special or critical for the test. Consider using patterns to match them where suitable. TODO Pending concrete advice.","breadcrumbs":"Testing the compiler » Best practices » FileCheck best practices","id":"158","title":"FileCheck best practices"},"159":{"body":"Introduction Test suites Compiler-specific test suites General purpose test suite Rustdoc test suites Pretty-printer tests Incremental tests Debuginfo tests Codegen tests Assembly tests Codegen-units tests Mir-opt tests run-make tests Using Rust recipes Quickly check if rmake.rs tests can be compiled Using rust-analyzer with rmake.rs Coverage tests coverage-map suite coverage-run suite coverage-run-rustdoc suite Crashes tests Building auxiliary crates Auxiliary proc-macro Revisions Ignoring unused revision names Compare modes","breadcrumbs":"Testing the compiler » Compiletest » Compiletest","id":"159","title":"Compiletest"},"16":{"body":"This section has moved to the \"About this guide\" chapter.","breadcrumbs":"Getting Started » Other Resources","id":"16","title":"Other Resources"},"160":{"body":"compiletest is the main test harness of the Rust test suite. It allows test authors to organize large numbers of tests (the Rust compiler has many thousands), efficient test execution (parallel execution is supported), and allows the test author to configure behavior and expected results of both individual and groups of tests. Note for macOS users For macOS users, SIP (System Integrity Protection) may consistently check the compiled binary by sending network requests to Apple , so you may get a huge performance degradation when running tests. You can resolve it by tweaking the following settings: Privacy & Security -> Developer Tools -> Add Terminal (Or VsCode, etc.). compiletest may check test code for compile-time or run-time success/failure. Tests are typically organized as a Rust source file with annotations in comments before and/or within the test code. These comments serve to direct compiletest on if or how to run the test, what behavior to expect, and more. See directives and the test suite documentation below for more details on these annotations. See the Adding new tests and Best practies chapters for a tutorial on creating a new test and advice on writing a good test, and the Running tests chapter on how to run the test suite. Arguments can be passed to compiletest using --test-args or by placing them after --, e.g. x test --test-args --force-rerun x test -- --force-rerun Additionally, bootstrap accepts several common arguments directly, e.g. x test --no-capture --force-rerun --run --pass. Compiletest itself tries to avoid running tests when the artifacts that are involved (mainly the compiler) haven't changed. You can use x test --test-args --force-rerun to rerun a test even when none of the inputs have changed.","breadcrumbs":"Testing the compiler » Compiletest » Introduction","id":"160","title":"Introduction"},"161":{"body":"All of the tests are in the tests directory. The tests are organized into \"suites\", with each suite in a separate subdirectory. Each test suite behaves a little differently, with different compiler behavior and different checks for correctness. For example, the tests/incremental directory contains tests for incremental compilation. The various suites are defined in src/tools/compiletest/src/common.rs in the pub enum Mode declaration. The following test suites are available, with links for more information:","breadcrumbs":"Testing the compiler » Compiletest » Test suites","id":"161","title":"Test suites"},"162":{"body":"Test suite Purpose ui Check the stdout/stderr snapshots from the compilation and/or running the resulting executable ui-fulldeps ui tests which require a linkable build of rustc (such as using extern crate rustc_span; or used as a plugin) pretty Check pretty printing incremental Check incremental compilation behavior debuginfo Check debuginfo generation running debuggers codegen Check code generation codegen-units Check codegen unit partitioning assembly Check assembly output mir-opt Check MIR generation and optimizations coverage Check coverage instrumentation coverage-run-rustdoc coverage tests that also run instrumented doctests crashes Check that the compiler ICEs/panics/crashes on certain inputs to catch accidental fixes","breadcrumbs":"Testing the compiler » Compiletest » Compiler-specific test suites","id":"162","title":"Compiler-specific test suites"},"163":{"body":"run-make are general purpose tests using Rust programs.","breadcrumbs":"Testing the compiler » Compiletest » General purpose test suite","id":"163","title":"General purpose test suite"},"164":{"body":"Test suite Purpose rustdoc Check HTML output of rustdoc rustdoc-gui Check rustdoc's GUI using a web browser rustdoc-js Check rustdoc's search engine and index rustdoc-js-std Check rustdoc's search engine and index on the std library docs rustdoc-json Check JSON output of rustdoc rustdoc-ui Check terminal output of rustdoc ( see also ) Some rustdoc-specific tests can also be found in ui/rustdoc/. These check rustdoc-related or -specific lints that (also) run as part of rustc, not (only) rustdoc. Run-make tests pertaining to rustdoc are typically named run-make/rustdoc-*/.","breadcrumbs":"Testing the compiler » Compiletest » Rustdoc test suites","id":"164","title":"Rustdoc test suites"},"165":{"body":"The tests in tests/pretty exercise the \"pretty-printing\" functionality of rustc. The -Z unpretty CLI option for rustc causes it to translate the input source into various different formats, such as the Rust source after macro expansion. The pretty-printer tests have several directives described below. These commands can significantly change the behavior of the test, but the default behavior without any commands is to: Run rustc -Zunpretty=normal on the source file. Run rustc -Zunpretty=normal on the output of the previous step. The output of the previous two steps should be the same. Run rustc -Zno-codegen on the output to make sure that it can type check (similar to cargo check). If any of the commands above fail, then the test fails. The directives for pretty-printing tests are: pretty-mode specifies the mode pretty-print tests should run in (that is, the argument to -Zunpretty). The default is normal if not specified. pretty-compare-only causes a pretty test to only compare the pretty-printed output (stopping after step 3 from above). It will not try to compile the expanded output to type check it. This is needed for a pretty-mode that does not expand to valid Rust, or for other situations where the expanded output cannot be compiled. pp-exact is used to ensure a pretty-print test results in specific output. If specified without a value, then it means the pretty-print output should match the original source. If specified with a value, as in //@ pp-exact:foo.pp, it will ensure that the pretty-printed output matches the contents of the given file. Otherwise, if pp-exact is not specified, then the pretty-printed output will be pretty-printed one more time, and the output of the two pretty-printing rounds will be compared to ensure that the pretty-printed output converges to a steady state.","breadcrumbs":"Testing the compiler » Compiletest » Pretty-printer tests","id":"165","title":"Pretty-printer tests"},"166":{"body":"The tests in tests/incremental exercise incremental compilation. They use revisions directive to tell compiletest to run the compiler in a series of steps. Compiletest starts with an empty directory with the -C incremental flag, and then runs the compiler for each revision, reusing the incremental results from previous steps. The revisions should start with: rpass — the test should compile and run successfully rfail — the test should compile successfully, but the executable should fail to run cfail — the test should fail to compile To make the revisions unique, you should add a suffix like rpass1 and rpass2. To simulate changing the source, compiletest also passes a --cfg flag with the current revision name. For example, this will run twice, simulating changing a function: //@ revisions: rpass1 rpass2 #[cfg(rpass1)]\nfn foo() { println!(\"one\");\n} #[cfg(rpass2)]\nfn foo() { println!(\"two\");\n} fn main() { foo(); } cfail tests support the forbid-output directive to specify that a certain substring must not appear anywhere in the compiler output. This can be useful to ensure certain errors do not appear, but this can be fragile as error messages change over time, and a test may no longer be checking the right thing but will still pass. cfail tests support the should-ice directive to specify that a test should cause an Internal Compiler Error (ICE). This is a highly specialized directive to check that the incremental cache continues to work after an ICE.","breadcrumbs":"Testing the compiler » Compiletest » Incremental tests","id":"166","title":"Incremental tests"},"167":{"body":"The tests in tests/debuginfo test debuginfo generation. They build a program, launch a debugger, and issue commands to the debugger. A single test can work with cdb, gdb, and lldb. Most tests should have the //@ compile-flags: -g directive or something similar to generate the appropriate debuginfo. To set a breakpoint on a line, add a // #break comment on the line. The debuginfo tests consist of a series of debugger commands along with \"check\" lines which specify output that is expected from the debugger. The commands are comments of the form // $DEBUGGER-command:$COMMAND where $DEBUGGER is the debugger being used and $COMMAND is the debugger command to execute. The debugger values can be: cdb gdb gdbg — GDB without Rust support (versions older than 7.11) gdbr — GDB with Rust support lldb lldbg — LLDB without Rust support lldbr — LLDB with Rust support (this no longer exists) The command to check the output are of the form // $DEBUGGER-check:$OUTPUT where $OUTPUT is the output to expect. For example, the following will build the test, start the debugger, set a breakpoint, launch the program, inspect a value, and check what the debugger prints: //@ compile-flags: -g //@ lldb-command: run\n//@ lldb-command: print foo\n//@ lldb-check: $0 = 123 fn main() { let foo = 123; b(); // #break\n} fn b() {} The following directives are available to disable a test based on the debugger currently being used: min-cdb-version: 10.0.18317.1001 — ignores the test if the version of cdb is below the given version min-gdb-version: 8.2 — ignores the test if the version of gdb is below the given version ignore-gdb-version: 9.2 — ignores the test if the version of gdb is equal to the given version ignore-gdb-version: 7.11.90 - 8.0.9 — ignores the test if the version of gdb is in a range (inclusive) min-lldb-version: 310 — ignores the test if the version of lldb is below the given version rust-lldb — ignores the test if lldb is not contain the Rust plugin. NOTE: The \"Rust\" version of LLDB doesn't exist anymore, so this will always be ignored. This should probably be removed. By passing the --debugger option to compiletest, you can specify a single debugger to run tests with. For example, ./x test tests/debuginfo -- --debugger gdb will only test GDB commands. Note on running lldb debuginfo tests locally If you want to run lldb debuginfo tests locally, then currently on Windows it is required that: You have Python 3.10 installed. You have python310.dll available in your PATH env var. This is not provided by the standard Python installer you obtain from python.org; you need to add this to PATH manually. Otherwise the lldb debuginfo tests can produce crashes in mysterious ways. Note on acquiring cdb.exe on Windows 11 cdb.exe is acquired alongside a suitable \"Windows 11 SDK\" which is part of the \"Desktop Development with C++\" workload profile in a Visual Studio installer (e.g. Visual Studio 2022 installer). HOWEVER this is not sufficient by default alone. If you need cdb.exe, you must go to Installed Apps, find the newest \"Windows Software Development Kit\" (and yes, this can still say Windows 10.0.22161.3233 even though the OS is called Windows 11). You must then click \"Modify\" -> \"Change\" and then selected \"Debugging Tools for Windows\" in order to acquire cdb.exe.","breadcrumbs":"Testing the compiler » Compiletest » Debuginfo tests","id":"167","title":"Debuginfo tests"},"168":{"body":"The tests in tests/codegen test LLVM code generation. They compile the test with the --emit=llvm-ir flag to emit LLVM IR. They then run the LLVM FileCheck tool. The test is annotated with various // CHECK comments to check the generated code. See the FileCheck documentation for a tutorial and more information. See also the assembly tests for a similar set of tests. If you need to work with #![no_std] cross-compiling tests, consult the minicore test auxiliary chapter.","breadcrumbs":"Testing the compiler » Compiletest » Codegen tests","id":"168","title":"Codegen tests"},"169":{"body":"The tests in tests/assembly test LLVM assembly output. They compile the test with the --emit=asm flag to emit a .s file with the assembly output. They then run the LLVM FileCheck tool. Each test should be annotated with the //@ assembly-output: directive with a value of either emit-asm or ptx-linker to indicate the type of assembly output. Then, they should be annotated with various // CHECK comments to check the assembly output. See the FileCheck documentation for a tutorial and more information. See also the codegen tests for a similar set of tests. If you need to work with #![no_std] cross-compiling tests, consult the minicore test auxiliary chapter.","breadcrumbs":"Testing the compiler » Compiletest » Assembly tests","id":"169","title":"Assembly tests"},"17":{"body":"This guide is meant to help document how rustc – the Rust compiler – works, as well as to help new contributors get involved in rustc development. There are several parts to this guide: Building and debugging rustc : Contains information that should be useful no matter how you are contributing, about building, debugging, profiling, etc. Contributing to Rust : Contains information that should be useful no matter how you are contributing, about procedures for contribution, using git and Github, stabilizing features, etc. Bootstrapping : Describes how the Rust compiler builds itself using previous versions, including an introduction to the bootstrap process and debugging methods. High-level Compiler Architecture : Discusses the high-level architecture of the compiler and stages of the compile process. Source Code Representation : Describes the process of taking raw source code from the user and transforming it into various forms that the compiler can work with easily. Supporting Infrastructure : Covers command-line argument conventions, compiler entry points like rustc_driver and rustc_interface, and the design and implementation of errors and lints. Analysis : Discusses the analyses that the compiler uses to check various properties of the code and inform later stages of the compile process (e.g., type checking). MIR to Binaries : How linked executable machine code is generated. Appendices at the end with useful reference information. There are a few of these with different information, including a glossary.","breadcrumbs":"About this guide » About this guide","id":"17","title":"About this guide"},"170":{"body":"The tests in tests/codegen-units test the monomorphization collector and CGU partitioning. These tests work by running rustc with a flag to print the result of the monomorphization collection pass, i.e., -Zprint-mono-items, and then special annotations in the file are used to compare against that. Then, the test should be annotated with comments of the form //~ MONO_ITEM name where name is the monomorphized string printed by rustc like fn ::foo. To check for CGU partitioning, a comment of the form //~ MONO_ITEM name @@ cgu where cgu is a space separated list of the CGU names and the linkage information in brackets. For example: //~ MONO_ITEM static function::FOO @@ statics[Internal]","breadcrumbs":"Testing the compiler » Compiletest » Codegen-units tests","id":"170","title":"Codegen-units tests"},"171":{"body":"The tests in tests/mir-opt check parts of the generated MIR to make sure it is generated correctly and is doing the expected optimizations. Check out the MIR Optimizations chapter for more. Compiletest will build the test with several flags to dump the MIR output and set a baseline for optimizations: -Copt-level=1 -Zdump-mir=all -Zmir-opt-level=4 -Zvalidate-mir -Zdump-mir-exclude-pass-number The test should be annotated with // EMIT_MIR comments that specify files that will contain the expected MIR output. You can use x test --bless to create the initial expected files. There are several forms the EMIT_MIR comment can take: // EMIT_MIR $MIR_PATH.mir — This will check that the given filename matches the exact output from the MIR dump. For example, my_test.main.SimplifyCfg-elaborate-drops.after.mir will load that file from the test directory, and compare it against the dump from rustc. Checking the \"after\" file (which is after optimization) is useful if you are interested in the final state after an optimization. Some rare cases may want to use the \"before\" file for completeness. // EMIT_MIR $MIR_PATH.diff — where $MIR_PATH is the filename of the MIR dump, such as my_test_name.my_function.EarlyOtherwiseBranch. Compiletest will diff the .before.mir and .after.mir files, and compare the diff output to the expected .diff file from the EMIT_MIR comment. This is useful if you want to see how an optimization changes the MIR. // EMIT_MIR $MIR_PATH.dot — When using specific flags that dump additional MIR data (e.g. -Z dump-mir-graphviz to produce .dot files), this will check that the output matches the given file. By default 32 bit and 64 bit targets use the same dump files, which can be problematic in the presence of pointers in constants or other bit width dependent things. In that case you can add // EMIT_MIR_FOR_EACH_BIT_WIDTH to your test, causing separate files to be generated for 32bit and 64bit systems.","breadcrumbs":"Testing the compiler » Compiletest » Mir-opt tests","id":"171","title":"Mir-opt tests"},"172":{"body":"The tests in tests/run-make are general-purpose tests using Rust recipes , which are small programs (rmake.rs) allowing arbitrary Rust code such as rustc invocations, and is supported by a run_make_support library. Using Rust recipes provide the ultimate in flexibility. run-make tests should be used if no other test suites better suit your needs. Using Rust recipes Each test should be in a separate directory with a rmake.rs Rust program, called the recipe . A recipe will be compiled and executed by compiletest with the run_make_support library linked in. If you need new utilities or functionality, consider extending and improving the run_make_support library. Compiletest directives like //@ only- or //@ ignore- are supported in rmake.rs, like in UI tests. However, revisions or building auxiliary via directives are not currently supported. rmake.rs and run-make-support may not use any nightly/unstable features, as they must be compilable by a stage 0 rustc that may be a beta or even stable rustc. Quickly check if rmake.rs tests can be compiled You can quickly check if rmake.rs tests can be compiled without having to build stage1 rustc by forcing rmake.rs to be compiled with the stage0 compiler: $ COMPILETEST_FORCE_STAGE0=1 x test --stage 0 tests/run-make/ Of course, some tests will not successfully run in this way. Using rust-analyzer with rmake.rs Like other test programs, the rmake.rs scripts used by run-make tests do not have rust-analyzer integration by default. To work around this when working on a particular test, temporarily create a Cargo.toml file in the test's directory (e.g. tests/run-make/sysroot-crates-are-unstable/Cargo.toml) with these contents: Be careful not to add this Cargo.toml or its Cargo.lock to your actual PR! # Convince cargo that this isn't part of an enclosing workspace.\n[workspace] [package]\nname = \"rmake\"\nversion = \"0.1.0\"\nedition = \"2021\" [dependencies]\nrun_make_support = { path = \"../../../src/tools/run-make-support\" } [[bin]]\nname = \"rmake\"\npath = \"rmake.rs\" Then add a corresponding entry to \"rust-analyzer.linkedProjects\" (e.g. in .vscode/settings.json): \"rust-analyzer.linkedProjects\": [ \"tests/run-make/sysroot-crates-are-unstable/Cargo.toml\"\n],","breadcrumbs":"Testing the compiler » Compiletest » run-make tests","id":"172","title":"run-make tests"},"173":{"body":"The tests in tests/coverage are shared by multiple test modes that test coverage instrumentation in different ways. Running the coverage test suite will automatically run each test in all of the different coverage modes. Each mode also has an alias to run the coverage tests in just that mode: ./x test coverage # runs all of tests/coverage in all coverage modes\n./x test tests/coverage # same as above ./x test tests/coverage/if.rs # runs the specified test in all coverage modes ./x test coverage-map # runs all of tests/coverage in \"coverage-map\" mode only\n./x test coverage-run # runs all of tests/coverage in \"coverage-run\" mode only ./x test coverage-map -- tests/coverage/if.rs # runs the specified test in \"coverage-map\" mode only If a particular test should not be run in one of the coverage test modes for some reason, use the //@ ignore-coverage-map or //@ ignore-coverage-run directives. coverage-map suite In coverage-map mode, these tests verify the mappings between source code regions and coverage counters that are emitted by LLVM. They compile the test with --emit=llvm-ir, then use a custom tool ( src/tools/coverage-dump ) to extract and pretty-print the coverage mappings embedded in the IR. These tests don't require the profiler runtime, so they run in PR CI jobs and are easy to run/bless locally. These coverage map tests can be sensitive to changes in MIR lowering or MIR optimizations, producing mappings that are different but produce identical coverage reports. As a rule of thumb, any PR that doesn't change coverage-specific code should feel free to re-bless the coverage-map tests as necessary, without worrying about the actual changes, as long as the coverage-run tests still pass. coverage-run suite In coverage-run mode, these tests perform an end-to-end test of coverage reporting. They compile a test program with coverage instrumentation, run that program to produce raw coverage data, and then use LLVM tools to process that data into a human-readable code coverage report. Instrumented binaries need to be linked against the LLVM profiler runtime, so coverage-run tests are automatically skipped unless the profiler runtime is enabled in bootstrap.toml: # bootstrap.toml\n[build]\nprofiler = true This also means that they typically don't run in PR CI jobs, though they do run as part of the full set of CI jobs used for merging. coverage-run-rustdoc suite The tests in tests/coverage-run-rustdoc also run instrumented doctests and include them in the coverage report. This avoids having to build rustdoc when only running the main coverage suite.","breadcrumbs":"Testing the compiler » Compiletest » Coverage tests","id":"173","title":"Coverage tests"},"174":{"body":"tests/crashes serve as a collection of tests that are expected to cause the compiler to ICE, panic or crash in some other way, so that accidental fixes are tracked. Formerly, this was done at https://github.com/rust-lang/glacier but doing it inside the rust-lang/rust testsuite is more convenient. It is imperative that a test in the suite causes rustc to ICE, panic, or crash in some other way. A test will \"pass\" if rustc exits with an exit status other than 1 or 0. If you want to see verbose stdout/stderr, you need to set COMPILETEST_VERBOSE_CRASHES=1, e.g. $ COMPILETEST_VERBOSE_CRASHES=1 ./x test tests/crashes/999999.rs --stage 1 Anyone can add \"untracked\" crashes from the issue tracker. It's strongly recommended to include test cases from several issues in a single PR. When you do so, each issue number should be noted in the file name (12345.rs should suffice) and also inside the file by means of a //@ known-bug: #12345 directive. Please label the relevant issues with S-bug-has-test afterwards. If you happen to fix one of the crashes, please move it to a fitting subdirectory in tests/ui and give it a meaningful name. Please add a doc comment at the top of the file explaining why this test exists, even better if you can briefly explain how the example causes rustc to crash previously and what was done to prevent rustc to ICE/panic/crash. Adding Fixes #NNNNN\nFixes #MMMMM to the description of your pull request will ensure the corresponding tickets be closed automatically upon merge. Make sure that your fix actually fixes the root cause of the issue and not just a subset first. The issue numbers can be found in the file name or the //@ known-bug directive inside the test file.","breadcrumbs":"Testing the compiler » Compiletest » Crashes tests","id":"174","title":"Crashes tests"},"175":{"body":"It is common that some tests require additional auxiliary crates to be compiled. There are multiple directives to assist with that: aux-build aux-crate aux-bin aux-codegen-backend proc-macro aux-build will build a separate crate from the named source file. The source file should be in a directory called auxiliary beside the test file. //@ aux-build: my-helper.rs extern crate my_helper;\n// ... You can use my_helper. The aux crate will be built as a dylib if possible (unless on a platform that does not support them, or the no-prefer-dynamic header is specified in the aux file). The -L flag is used to find the extern crates. aux-crate is very similar to aux-build. However, it uses the --extern flag to link to the extern crate to make the crate be available as an extern prelude. That allows you to specify the additional syntax of the --extern flag, such as renaming a dependency. For example, //@ aux-crate:foo=bar.rs will compile auxiliary/bar.rs and make it available under then name foo within the test. This is similar to how Cargo does dependency renaming. aux-bin is similar to aux-build but will build a binary instead of a library. The binary will be available in auxiliary/bin relative to the working directory of the test. aux-codegen-backend is similar to aux-build, but will then pass the compiled dylib to -Zcodegen-backend when building the main file. This will only work for tests in tests/ui-fulldeps, since it requires the use of compiler crates.","breadcrumbs":"Testing the compiler » Compiletest » Building auxiliary crates","id":"175","title":"Building auxiliary crates"},"176":{"body":"If you want a proc-macro dependency, then you can use the proc-macro directive. This directive behaves just like aux-build, i.e. that you should place the proc-macro test auxiliary file under a auxiliary folder under the same parent folder as the main test file. However, it also has four additional preset behavior compared to aux-build for the proc-macro test auxiliary: The aux test file is built with --crate-type=proc-macro. The aux test file is built without -C prefer-dynamic, i.e. it will not try to produce a dylib for the aux crate. The aux crate is made available to the test file via extern prelude with --extern . Note that since UI tests default to edition 2015, you still need to specify extern unless the main test file is using an edition that is 2018 or newer if you want to use the aux crate name in a use import. The proc_macro crate is made available as an extern prelude module. Same edition 2015 vs newer edition distinction for extern proc_macro; applies. For example, you might have a test tests/ui/cat/meow.rs and proc-macro auxiliary tests/ui/cat/auxiliary/whiskers.rs: tests/ui/cat/ meow.rs # main test file auxiliary/whiskers.rs # auxiliary // tests/ui/cat/meow.rs //@ proc-macro: whiskers.rs extern crate whiskers; // needed as ui test defaults to edition 2015 fn main() { whiskers::identity!();\n} // tests/ui/cat/auxiliary/whiskers.rs extern crate proc_macro;\nuse proc_macro::*; #[proc_macro]\npub fn identity(ts: TokenStream) -> TokenStream { ts\n} Note : The proc-macro header currently does not work with the build-aux-doc header for rustdoc tests. In that case, you will need to use the aux-build header, and use #![crate_type=\"proc_macro\"], and //@ force-host and //@ no-prefer-dynamic headers in the proc-macro.","breadcrumbs":"Testing the compiler » Compiletest » Auxiliary proc-macro","id":"176","title":"Auxiliary proc-macro"},"177":{"body":"Revisions allow a single test file to be used for multiple tests. This is done by adding a special directive at the top of the file: //@ revisions: foo bar baz This will result in the test being compiled (and tested) three times, once with --cfg foo, once with --cfg bar, and once with --cfg baz. You can therefore use #[cfg(foo)] etc within the test to tweak each of these results. You can also customize directives and expected error messages to a particular revision. To do this, add [revision-name] after the //@ for directives, and after // for UI error annotations, like so: // A flag to pass in only for cfg `foo`:\n//@[foo]compile-flags: -Z verbose-internals #[cfg(foo)]\nfn test_foo() { let x: usize = 32_u32; //[foo]~ ERROR mismatched types\n} Multiple revisions can be specified in a comma-separated list, such as //[foo,bar,baz]~^. In test suites that use the LLVM FileCheck tool, the current revision name is also registered as an additional prefix for FileCheck directives: //@ revisions: NORMAL COVERAGE\n//@[COVERAGE] compile-flags: -Cinstrument-coverage\n//@[COVERAGE] needs-profiler-runtime // COVERAGE: @__llvm_coverage_mapping\n// NORMAL-NOT: @__llvm_coverage_mapping // CHECK: main\nfn main() {} Note that not all directives have meaning when customized to a revision. For example, the ignore-test directives (and all \"ignore\" directives) currently only apply to the test as a whole, not to particular revisions. The only directives that are intended to really work when customized to a revision are error patterns and compiler flags. The following test suites support revisions: ui assembly codegen coverage debuginfo rustdoc UI tests incremental (these are special in that they inherently cannot be run in parallel)","breadcrumbs":"Testing the compiler » Compiletest » Revisions","id":"177","title":"Revisions"},"178":{"body":"Normally, revision names mentioned in other directives and error annotations must correspond to an actual revision declared in a revisions directive. This is enforced by an ./x test tidy check. If a revision name needs to be temporarily removed from the revision list for some reason, the above check can be suppressed by adding the revision name to an //@ unused-revision-names: header instead. Specifying an unused name of * (i.e. //@ unused-revision-names: *) will permit any unused revision name to be mentioned.","breadcrumbs":"Testing the compiler » Compiletest » Ignoring unused revision names","id":"178","title":"Ignoring unused revision names"},"179":{"body":"Compiletest can be run in different modes, called compare modes , which can be used to compare the behavior of all tests with different compiler flags enabled. This can help highlight what differences might appear with certain flags, and check for any problems that might arise. To run the tests in a different mode, you need to pass the --compare-mode CLI flag: ./x test tests/ui --compare-mode=chalk The possible compare modes are: polonius — Runs with Polonius with -Zpolonius. chalk — Runs with Chalk with -Zchalk. split-dwarf — Runs with unpacked split-DWARF with -Csplit-debuginfo=unpacked. split-dwarf-single — Runs with packed split-DWARF with -Csplit-debuginfo=packed. See UI compare modes for more information about how UI tests support different output for different modes. In CI, compare modes are only used in one Linux builder, and only with the following settings: tests/debuginfo: Uses split-dwarf mode. This helps ensure that none of the debuginfo tests are affected when enabling split-DWARF. Note that compare modes are separate to revisions . All revisions are tested when running ./x test tests/ui, however compare-modes must be manually run individually via the --compare-mode flag.","breadcrumbs":"Testing the compiler » Compiletest » Compare modes","id":"179","title":"Compare modes"},"18":{"body":"Keep in mind that rustc is a real production-quality product, being worked upon continuously by a sizeable set of contributors. As such, it has its fair share of codebase churn and technical debt. In addition, many of the ideas discussed throughout this guide are idealized designs that are not fully realized yet. All this makes keeping this guide completely up to date on everything very hard! The Guide itself is of course open-source as well, and the sources can be found at the GitHub repository . If you find any mistakes in the guide, please file an issue about it. Even better, open a PR with a correction! If you do contribute to the guide, please see the corresponding subsection on writing documentation in this guide . “‘All conditioned things are impermanent’ — when one sees this with wisdom, one turns away from suffering.” The Dhammapada, verse 277","breadcrumbs":"About this guide » Constant change","id":"18","title":"Constant change"},"180":{"body":"Introduction General structure of a test Output comparison Normalization Error annotations Error annotation examples Positioned on error line Positioned below error line Use same error line as defined on error annotation line above Positioned above error line Error without line information error-pattern Diagnostic kinds (error levels) cfg revisions Controlling pass/fail expectations Known bugs Test organization Rustfix tests Compare modes rustc_* TEST attributes UI test mode preset lint levels UI tests are a particular test suite of compiletest.","breadcrumbs":"Testing the compiler » Compiletest » UI tests » UI tests","id":"180","title":"UI tests"},"181":{"body":"The tests in tests/ui are a collection of general-purpose tests which primarily focus on validating the console output of the compiler, but can be used for many other purposes. For example, tests can also be configured to run the resulting program to verify its behavior. If you need to work with #![no_std] cross-compiling tests, consult the minicore test auxiliary chapter.","breadcrumbs":"Testing the compiler » Compiletest » UI tests » Introduction","id":"181","title":"Introduction"},"182":{"body":"A test consists of a Rust source file located anywhere in the tests/ui directory, but they should be placed in a suitable sub-directory. For example, tests/ui/hello.rs is a basic hello-world test. Compiletest will use rustc to compile the test, and compare the output against the expected output which is stored in a .stdout or .stderr file located next to the test. See Output comparison for more. Additionally, errors and warnings should be annotated with comments within the source file. See Error annotations for more. Compiletest directives in the form of special comments prefixed with //@ control how the test is compiled and what the expected behavior is. Tests are expected to fail to compile, since most tests are testing compiler errors. You can change that behavior with a directive, see Controlling pass/fail expectations . By default, a test is built as an executable binary. If you need a different crate type, you can use the #![crate_type] attribute to set it as needed.","breadcrumbs":"Testing the compiler » Compiletest » UI tests » General structure of a test","id":"182","title":"General structure of a test"},"183":{"body":"UI tests store the expected output from the compiler in .stderr and .stdout snapshots next to the test. You normally generate these files with the --bless CLI option, and then inspect them manually to verify they contain what you expect. The output is normalized to ignore unwanted differences, see the Normalization section. If the file is missing, then compiletest expects the corresponding output to be empty. There can be multiple stdout/stderr files. The general form is: *test-name*`.`*revision*`.`*compare_mode*`.`*extension* test-name cannot contain dots. This is so that the general form of test output filenames have a predictable form we can pattern match on in order to track stray test output files. revision is the revision name. This is not included when not using revisions. compare_mode is the compare mode . This will only be checked when the given compare mode is active. If the file does not exist, then compiletest will check for a file without the compare mode. extension is the kind of output being checked: stderr — compiler stderr stdout — compiler stdout run.stderr — stderr when running the test run.stdout — stdout when running the test 64bit.stderr — compiler stderr with stderr-per-bitwidth directive on a 64-bit target 32bit.stderr — compiler stderr with stderr-per-bitwidth directive on a 32-bit target A simple example would be foo.stderr next to a foo.rs test. A more complex example would be foo.my-revision.polonius.stderr. There are several directives which will change how compiletest will check for output files: stderr-per-bitwidth — checks separate output files based on the target pointer width. Consider using the normalize-stderr directive instead (see Normalization ). dont-check-compiler-stderr — Ignores stderr from the compiler. dont-check-compiler-stdout — Ignores stdout from the compiler. UI tests run with -Zdeduplicate-diagnostics=no flag which disables rustc's built-in diagnostic deduplication mechanism. This means you may see some duplicate messages in the output. This helps illuminate situations where duplicate diagnostics are being generated.","breadcrumbs":"Testing the compiler » Compiletest » UI tests » Output comparison","id":"183","title":"Output comparison"},"184":{"body":"The compiler output is normalized to eliminate output difference between platforms, mainly about filenames. Compiletest makes the following replacements on the compiler output: The directory where the test is defined is replaced with $DIR. Example: /path/to/rust/tests/ui/error-codes The directory to the standard library source is replaced with $SRC_DIR. Example: /path/to/rust/library Line and column numbers for paths in $SRC_DIR are replaced with LL:COL. This helps ensure that changes to the layout of the standard library do not cause widespread changes to the .stderr files. Example: $SRC_DIR/alloc/src/sync.rs:53:46 The base directory where the test's output goes is replaced with $TEST_BUILD_DIR. This only comes up in a few rare circumstances. Example: /path/to/rust/build/x86_64-unknown-linux-gnu/test/ui Tabs are replaced with \\t. Backslashes (\\) are converted to forward slashes (/) within paths (using a heuristic). This helps normalize differences with Windows-style paths. CRLF newlines are converted to LF. Error line annotations like //~ ERROR some message are removed. Various v0 and legacy symbol hashes are replaced with placeholders like [HASH] or . Additionally, the compiler is run with the -Z ui-testing flag which causes the compiler itself to apply some changes to the diagnostic output to make it more suitable for UI testing. For example, it will anonymize line numbers in the output (line numbers prefixing each source line are replaced with LL). In extremely rare situations, this mode can be disabled with the directive //@ compile-flags: -Z ui-testing=no. Note: The line and column numbers for --> lines pointing to the test are not normalized, and left as-is. This ensures that the compiler continues to point to the correct location, and keeps the stderr files readable. Ideally all line/column information would be retained, but small changes to the source causes large diffs, and more frequent merge conflicts and test errors. Sometimes these built-in normalizations are not enough. In such cases, you may provide custom normalization rules using normalize-* directives, e.g. //@ normalize-stdout: \"foo\" -> \"bar\"\n//@ normalize-stderr: \"foo\" -> \"bar\"\n//@ normalize-stderr-32bit: \"fn\\(\\) \\(32 bits\\)\" -> \"fn\\(\\) \\($$PTR bits\\)\"\n//@ normalize-stderr-64bit: \"fn\\(\\) \\(64 bits\\)\" -> \"fn\\(\\) \\($$PTR bits\\)\" This tells the test, on 32-bit platforms, whenever the compiler writes fn() (32 bits) to stderr, it should be normalized to read fn() ($PTR bits) instead. Similar for 64-bit. The replacement is performed by regexes using default regex flavor provided by regex crate. The corresponding reference file will use the normalized output to test both 32-bit and 64-bit platforms: ... | = note: source type: fn() ($PTR bits) = note: target type: u16 (16 bits)\n... Please see ui/transmute/main.rs and main.stderr for a concrete usage example.","breadcrumbs":"Testing the compiler » Compiletest » UI tests » Normalization","id":"184","title":"Normalization"},"185":{"body":"Error annotations specify the errors that the compiler is expected to emit. They are \"attached\" to the line in source where the error is located. fn main() { boom //~ ERROR cannot find value `boom` in this scope [E0425]\n} Although UI tests have a .stderr file which contains the entire compiler output, UI tests require that errors are also annotated within the source. This redundancy helps avoid mistakes since the .stderr files are usually auto-generated. It also helps to directly see where the error spans are expected to point to by looking at one file instead of having to compare the .stderr file with the source. Finally, they ensure that no additional unexpected errors are generated. They have several forms, but generally are a comment with the diagnostic level (such as ERROR) and a substring of the expected error output. You don't have to write out the entire message, just make sure to include the important part of the message to make it self-documenting. Most error annotations need to match with the line of the diagnostic. There are several ways to match the message with the line (see the examples below): ~: Associates the error level and message with the current line ~^: Associates the error level and message with the previous error annotation line. Each caret (^) that you add adds a line to this, so ~^^^ is three lines above the error annotation line. ~|: Associates the error level and message with the same line as the previous comment . This is more convenient than using multiple carets when there are multiple messages associated with the same line. ~v: Associates the error level and message with the next error annotation line. Each symbol (v) that you add adds a line to this, so ~vvv is three lines below the error annotation line. Example: let _ = same_line; //~ ERROR undeclared variable\nfn meow(_: [u8]) {}\n//~^ ERROR unsized\n//~| ERROR anonymous parameters The space character between //~ (or other variants) and the subsequent text is negligible (i.e. there is no semantic difference between //~ ERROR and //~ERROR although the former is more common in the codebase). ~? (example being ~? ERROR) is used to match diagnostics without line info at all, or where the line info is outside the main test file [1] . These annotations can be placed on any line in the test file. This is a file that has the ~? annotations, as distinct from aux files, or sources that we have no control over.","breadcrumbs":"Testing the compiler » Compiletest » UI tests » Error annotations","id":"185","title":"Error annotations"},"186":{"body":"Here are examples of error annotations on different lines of UI test source. Positioned on error line Use the //~ ERROR idiom: fn main() { let x = (1, 2, 3); match x { (_a, _x @ ..) => {} //~ ERROR `_x @` is not allowed in a tuple _ => {} }\n} Positioned below error line Use the //~^ idiom with number of carets in the string to indicate the number of lines above. In the example below, the error line is four lines above the error annotation line so four carets are included in the annotation. fn main() { let x = (1, 2, 3); match x { (_a, _x @ ..) => {} // <- the error is on this line _ => {} }\n}\n//~^^^^ ERROR `_x @` is not allowed in a tuple Use same error line as defined on error annotation line above Use the //~| idiom to define the same error line as the error annotation line above: struct Binder(i32, i32, i32); fn main() { let x = Binder(1, 2, 3); match x { Binder(_a, _x @ ..) => {} // <- the error is on this line _ => {} }\n}\n//~^^^^ ERROR `_x @` is not allowed in a tuple struct\n//~| ERROR this pattern has 1 field, but the corresponding tuple struct has 3 fields [E0023] Positioned above error line Use the //~v idiom with number of v's in the string to indicate the number of lines below. This is typically used in lexer or parser tests matching on errors like unclosed delimiter or unclosed literal happening at the end of file. // ignore-tidy-trailing-newlines\n//~v ERROR this file contains an unclosed delimiter\nfn main((ؼ Error without line information Use //~? to match an error without line information. //~? is precise and will not match errors if their line information is available. It should be preferred to using error-pattern, which is imprecise and non-exhaustive. //@ compile-flags: --print yyyy //~? ERROR unknown print request: `yyyy`","breadcrumbs":"Testing the compiler » Compiletest » UI tests » Error annotation examples","id":"186","title":"Error annotation examples"},"187":{"body":"The error-pattern directive can be used for runtime messages, which don't have a specific span, or in exceptional cases, for compile time messages. Let's think about this test: fn main() { let a: *const [_] = &[1, 2, 3]; unsafe { let _b = (*a)[3]; }\n} We want to ensure this shows \"index out of bounds\", but we cannot use the ERROR annotation since the runtime error doesn't have any span. Then it's time to use the error-pattern directive: //@ error-pattern: index out of bounds\nfn main() { let a: *const [_] = &[1, 2, 3]; unsafe { let _b = (*a)[3]; }\n} Use of error-pattern is not recommended in general. For strict testing of compile time output, try to use the line annotations //~ as much as possible, including //~? annotations for diagnostics without spans. If the compile time output is target dependent or too verbose, use directive //@ dont-require-annotations: to make the line annotation checking non-exhaustive. Some of the compiler messages can stay uncovered by annotations in this mode. For checking runtime output, //@ check-run-results may be preferable. Only use error-pattern if none of the above works. Line annotations //~ and error-pattern are compatible and can be used in the same test.","breadcrumbs":"Testing the compiler » Compiletest » UI tests » error-pattern","id":"187","title":"error-pattern"},"188":{"body":"The diagnostic kinds that you can have are: ERROR WARN (or WARNING) NOTE HELP SUGGESTION RAW The SUGGESTION kind is used for specifying what the expected replacement text should be for a diagnostic suggestion. The RAW kind can be used for matching on lines from non-structured output sometimes emitted by the compiler instead of or in addition to structured json. ERROR and WARN kinds are required to be exhaustively covered by line annotations //~ by default. Other kinds only need to be line-annotated if at least one annotation of that kind appears in the test file. For example, one //~ NOTE will also require all other //~ NOTEs in the file to be written out explicitly. Use directive //@ dont-require-annotations to opt out of exhaustive annotations. E.g. use //@ dont-require-annotations: NOTE to annotate notes selectively. Avoid using this directive for ERRORs and WARNings, unless there's a serious reason, like target-dependent compiler output. Some diagnostics are never required to be line-annotated, regardless of their kind or directives, for example secondary lines of multiline diagnostics, or ubiquitous diagnostics like aborting due to N previous errors. UI tests use the -A unused flag by default to ignore all unused warnings, as unused warnings are usually not the focus of a test. However, simple code samples often have unused warnings. If the test is specifically testing an unused warning, just add the appropriate #![warn(unused)] attribute as needed.","breadcrumbs":"Testing the compiler » Compiletest » UI tests » Diagnostic kinds (error levels)","id":"188","title":"Diagnostic kinds (error levels)"},"189":{"body":"When using revisions , different messages can be conditionally checked based on the current revision. This is done by placing the revision cfg name in brackets like this: //@ edition:2018\n//@ revisions: mir thir\n//@[thir] compile-flags: -Z thir-unsafeck async unsafe fn f() {} async fn g() { f(); //~ ERROR call to unsafe function is unsafe\n} fn main() { f(); //[mir]~ ERROR call to unsafe function is unsafe\n} In this example, the second error message is only emitted in the mir revision. The thir revision only emits the first error. If the cfg causes the compiler to emit different output, then a test can have multiple .stderr files for the different outputs. In the example above, there would be a .mir.stderr and .thir.stderr file with the different outputs of the different revisions. Note: cfg revisions also work inside the source code with #[cfg] attributes. By convention, the FALSE cfg is used to have an always-false config.","breadcrumbs":"Testing the compiler » Compiletest » UI tests » cfg revisions","id":"189","title":"cfg revisions"},"19":{"body":"You might also find the following sites useful: This guide contains information about how various parts of the compiler work and how to contribute to the compiler. rustc API docs -- rustdoc documentation for the compiler, devtools, and internal tools Forge -- contains documentation about Rust infrastructure, team procedures, and more compiler-team -- the home-base for the Rust compiler team, with description of the team procedures, active working groups, and the team calendar. std-dev-guide -- a similar guide for developing the standard library. The t-compiler zulip #contribute and #wg-rustup on Discord . The Rust Internals forum , a place to ask questions and discuss Rust's internals The Rust reference , even though it doesn't specifically talk about Rust's internals, is a great resource nonetheless Although out of date, Tom Lee's great blog article is very helpful The Rust Compiler Testing Docs For @bors , this cheat sheet is helpful Google is always helpful when programming. You can search all Rust documentation (the standard library, the compiler, the books, the references, and the guides) to quickly find information about the language and compiler. You can also use Rustdoc's built-in search feature to find documentation on types and functions within the crates you're looking at. You can also search by type signature! For example, searching for * -> vec should find all functions that return a Vec. Hint: Find more tips and keyboard shortcuts by typing ? on any Rustdoc page!","breadcrumbs":"About this guide » Other places to find information","id":"19","title":"Other places to find information"},"190":{"body":"By default, a UI test is expected to generate a compile error because most of the tests are checking for invalid input and error diagnostics. However, you can also make UI tests where compilation is expected to succeed, and you can even run the resulting program. Just add one of the following directives : Pass directives: //@ check-pass — compilation should succeed but skip codegen (which is expensive and isn't supposed to fail in most cases). //@ build-pass — compilation and linking should succeed but do not run the resulting binary. //@ run-pass — compilation should succeed and running the resulting binary should also succeed. Fail directives: //@ check-fail — compilation should fail (the codegen phase is skipped). This is the default for UI tests. //@ build-fail — compilation should fail during the codegen phase. This will run rustc twice, once to verify that it compiles successfully without the codegen phase, then a second time the full compile should fail. //@ run-fail — compilation should succeed, but running the resulting binary should fail. For run-pass and run-fail tests, by default the output of the program itself is not checked. If you want to check the output of running the program, include the check-run-results directive. This will check for a .run.stderr and .run.stdout files to compare against the actual output of the program. Tests with the *-pass directives can be overridden with the --pass command-line option: ./x test tests/ui --pass check The --pass option only affects UI tests. Using --pass check can run the UI test suite much faster (roughly twice as fast on my system), though obviously not exercising as much. The ignore-pass directive can be used to ignore the --pass CLI flag if the test won't work properly with that override.","breadcrumbs":"Testing the compiler » Compiletest » UI tests » Controlling pass/fail expectations","id":"190","title":"Controlling pass/fail expectations"},"191":{"body":"The known-bug directive may be used for tests that demonstrate a known bug that has not yet been fixed. Adding tests for known bugs is helpful for several reasons, including: Maintaining a functional test that can be conveniently reused when the bug is fixed. Providing a sentinel that will fail if the bug is incidentally fixed. This can alert the developer so they know that the associated issue has been fixed and can possibly be closed. This directive takes comma-separated issue numbers as arguments, or \"unknown\": //@ known-bug: #123, #456 (when the issues are on rust-lang/rust) //@ known-bug: rust-lang/chalk#123456 (allows arbitrary text before the #, which is useful when the issue is on another repo) //@ known-bug: unknown (when there is no known issue yet; preferrably open one if it does not already exist) Do not include error annotations in a test with known-bug. The test should still include other normal directives and stdout/stderr files.","breadcrumbs":"Testing the compiler » Compiletest » UI tests » Known bugs","id":"191","title":"Known bugs"},"192":{"body":"When deciding where to place a test file, please try to find a subdirectory that best matches what you are trying to exercise. Do your best to keep things organized. Admittedly it can be difficult as some tests can overlap different categories, and the existing layout may not fit well. Name the test by a concise description of what the test is checking. Avoid including the issue number in the test name. See best practices for a more in-depth discussion of this. Ideally, the test should be added to a directory that helps identify what piece of code is being tested here (e.g., tests/ui/borrowck/reject-move-out-of-borrow-via-pat.rs) When writing a new feature, you may want to create a subdirectory to store your tests . For example, if you are implementing RFC 1234 (\"Widgets\"), then it might make sense to put the tests in a directory like tests/ui/rfc1234-widgets/. In other cases, there may already be a suitable directory. Over time, the tests/ui directory has grown very fast. There is a check in tidy that will ensure none of the subdirectories has more than 1000 entries. Having too many files causes problems because it isn't editor/IDE friendly and the GitHub UI won't show more than 1000 entries. However, since tests/ui (UI test root directory) and tests/ui/issues directories have more than 1000 entries, we set a different limit for those directories. So, please avoid putting a new test there and try to find a more relevant place. For example, if your test is related to closures, you should put it in tests/ui/closures. When you reach the limit, you could increase it by tweaking here .","breadcrumbs":"Testing the compiler » Compiletest » UI tests » Test organization","id":"192","title":"Test organization"},"193":{"body":"UI tests can validate that diagnostic suggestions apply correctly and that the resulting changes compile correctly. This can be done with the run-rustfix directive: //@ run-rustfix\n//@ check-pass\n#![crate_type = \"lib\"] pub struct not_camel_case {}\n//~^ WARN `not_camel_case` should have an upper camel case name\n//~| HELP convert the identifier to upper camel case\n//~| SUGGESTION NotCamelCase Rustfix tests should have a file with the .fixed extension which contains the source file after the suggestion has been applied. When the test is run, compiletest first checks that the correct lint/warning is generated. Then, it applies the suggestion and compares against .fixed (they must match). Finally, the fixed source is compiled, and this compilation is required to succeed. Usually when creating a rustfix test you will generate the .fixed file automatically with the x test --bless option. The run-rustfix directive will cause all suggestions to be applied, even if they are not MachineApplicable . If this is a problem, then you can add the rustfix-only-machine-applicable directive in addition to run-rustfix. This should be used if there is a mixture of different suggestion levels, and some of the non-machine-applicable ones do not apply cleanly.","breadcrumbs":"Testing the compiler » Compiletest » UI tests » Rustfix tests","id":"193","title":"Rustfix tests"},"194":{"body":"Compare modes can be used to run all tests with different flags from what they are normally compiled with. In some cases, this might result in different output from the compiler. To support this, different output files can be saved which contain the output based on the compare mode. For example, when using the Polonius mode, a test foo.rs will first look for expected output in foo.polonius.stderr, falling back to the usual foo.stderr if not found. This is useful as different modes can sometimes result in different diagnostics and behavior. This can help track which tests have differences between the modes, and to visually inspect those diagnostic differences. If in the rare case you encounter a test that has different behavior, you can run something like the following to generate the alternate stderr file: ./x test tests/ui --compare-mode=polonius --bless Currently none of the compare modes are checked in CI for UI tests.","breadcrumbs":"Testing the compiler » Compiletest » UI tests » Compare modes","id":"194","title":"Compare modes"},"195":{"body":"The compiler defines several perma-unstable #[rustc_*] attributes gated behind the internal feature rustc_attrs that dump extra compiler-internal information. See the corresponding subsection in compiler debugging for more details. They can be used in tests to more precisely, legibly and easily test internal compiler state in cases where it would otherwise be very hard to do the same with \"user-facing\" Rust alone. Indeed, one could say that this slightly abuses the term \"UI\" ( user interface) and turns such UI tests from black-box tests into white-box ones. Use them carefully and sparingly.","breadcrumbs":"Testing the compiler » Compiletest » UI tests » rustc_* TEST attributes","id":"195","title":"rustc_* TEST attributes"},"196":{"body":"By default, test suites under UI test mode (tests/ui, tests/ui-fulldeps, but not tests/rustdoc-ui) will specify -A unused -A internal_features If: The ui test's pass mode is below run (i.e. check or build). No compare modes are specified. Since they can be very noisy in ui tests. You can override them with compile-flags lint level flags or in-source lint level attributes as required. Note that the rustfix version will not have -A unused passed, meaning that you may have to #[allow(unused)] to suppress unused lints on the rustfix'd file (because we might be testing rustfix on unused lints themselves).","breadcrumbs":"Testing the compiler » Compiletest » UI tests » UI test mode preset lint levels","id":"196","title":"UI test mode preset lint levels"},"197":{"body":"Listing of compiletest directives Assembly Auxiliary builds Controlling outcome expectations Controlling output snapshots and normalizations Controlling when tests are run Affecting how tests are built Rustdoc Test-suite-specific directives Pretty printing Misc directives Tool-specific directives Substitutions Adding a directive Adding a new directive parser Implementing the behavior change Directives are special comments that tell compiletest how to build and interpret a test. They may also appear in rmake.rs run-make tests . They are normally put after the short comment that explains the point of this test. Compiletest test suites use //@ to signal that a comment is a directive. For example, this test uses the //@ compile-flags command to specify a custom flag to give to rustc when the test is compiled: // Test the behavior of `0 - 1` when overflow checks are disabled. //@ compile-flags: -C overflow-checks=off fn main() { let x = 0 - 1; ...\n} Directives can be standalone (like //@ run-pass) or take a value (like //@ compile-flags: -C overflow-checks=off). Directives are written one directive per line: you cannot write multiple directives on the same line. For example, if you write //@ only-x86 only-windows then only-windows is interpreted as a comment, not a separate directive.","breadcrumbs":"Testing the compiler » Compiletest » Test directives » Compiletest directives","id":"197","title":"Compiletest directives"},"198":{"body":"The following is a list of compiletest directives. Directives are linked to sections that describe the command in more detail if available. This list may not be exhaustive. Directives can generally be found by browsing the TestProps structure found in header.rs from the compiletest source.","breadcrumbs":"Testing the compiler » Compiletest » Test directives » Listing of compiletest directives","id":"198","title":"Listing of compiletest directives"},"199":{"body":"Directive Explanation Supported test suites Possible values assembly-output Assembly output kind to check assembly emit-asm, bpf-linker, ptx-linker","breadcrumbs":"Testing the compiler » Compiletest » Test directives » Assembly","id":"199","title":"Assembly"},"2":{"body":"Not all t-compiler members are experts on all parts of rustc; it's a pretty large project. To find out who could have some expertise on different parts of the compiler, consult triagebot assign groups . The sections that start with [assign* in triagebot.toml file. But also, feel free to ask questions even if you can't figure out who to ping. Another way to find experts for a given part of the compiler is to see who has made recent commits. For example, to find people who have recently worked on name resolution since the 1.68.2 release, you could run git shortlog -n 1.68.2.. compiler/rustc_resolve/. Ignore any commits starting with \"Rollup merge\" or commits by @bors (see CI contribution procedures for more information about these commits).","breadcrumbs":"Getting Started » Experts","id":"2","title":"Experts"},"20":{"body":"Quick Start Get the source code Partial clone the repository Shallow clone the repository What is x.py? Running x.py Running x.py slightly more conveniently Create a bootstrap.toml Common x commands Building the compiler Build specific components Creating a rustup toolchain Building targets for cross-compilation Other x commands Cleaning out build directories Remarks on disk space The compiler is built using a tool called x.py. You will need to have Python installed to run it.","breadcrumbs":"How to build and run the compiler » How to build and run the compiler","id":"20","title":"How to build and run the compiler"},"200":{"body":"Directive Explanation Supported test suites Possible values aux-bin Build a aux binary, made available in auxiliary/bin relative to test directory All except run-make Path to auxiliary .rs file aux-build Build a separate crate from the named source file All except run-make Path to auxiliary .rs file aux-crate Like aux-build but makes available as extern prelude All except run-make = aux-codegen-backend Similar to aux-build but pass the compiled dylib to -Zcodegen-backend when building the main file ui-fulldeps Path to codegen backend file proc-macro Similar to aux-build, but for aux forces host and don't use -Cprefer-dynamic [1] . All except run-make Path to auxiliary proc-macro .rs file build-aux-docs Build docs for auxiliaries as well All except run-make N/A please see the Auxiliary proc-macro section in the compiletest chapter for specifics.","breadcrumbs":"Testing the compiler » Compiletest » Test directives » Auxiliary builds","id":"200","title":"Auxiliary builds"},"201":{"body":"See Controlling pass/fail expectations . Directive Explanation Supported test suites Possible values check-pass Building (no codegen) should pass ui, crashes, incremental N/A check-fail Building (no codegen) should fail ui, crashes N/A build-pass Building should pass ui, crashes, codegen, incremental N/A build-fail Building should fail ui, crashes N/A run-pass Running the test binary should pass ui, crashes, incremental N/A run-fail Running the test binary should fail ui, crashes N/A ignore-pass Ignore --pass flag ui, crashes, codegen, incremental N/A dont-check-failure-status Don't check exact failure status (i.e. 1) ui, incremental N/A failure-status Check ui, crashes Any u16 should-ice Check failure status is 101 coverage, incremental N/A should-fail Compiletest self-test All N/A","breadcrumbs":"Testing the compiler » Compiletest » Test directives » Controlling outcome expectations","id":"201","title":"Controlling outcome expectations"},"202":{"body":"See Normalization , Output comparison and Rustfix tests for more details. Directive Explanation Supported test suites Possible values check-run-results Check run test binary run-{pass,fail} output snapshot ui, crashes, incremental if run-pass N/A error-pattern Check that output contains a specific string ui, crashes, incremental if run-pass String regex-error-pattern Check that output contains a regex pattern ui, crashes, incremental if run-pass Regex check-stdout Check stdout against error-patterns from running test binary [2] ui, crashes, incremental N/A normalize-stderr-32bit Normalize actual stderr (for 32-bit platforms) with a rule \"\" -> \"\" before comparing against snapshot ui, incremental \"\" -> \"\", / is regex capture and replace syntax normalize-stderr-64bit Normalize actual stderr (for 64-bit platforms) with a rule \"\" -> \"\" before comparing against snapshot ui, incremental \"\" -> \"\", / is regex capture and replace syntax normalize-stderr Normalize actual stderr with a rule \"\" -> \"\" before comparing against snapshot ui, incremental \"\" -> \"\", / is regex capture and replace syntax normalize-stdout Normalize actual stdout with a rule \"\" -> \"\" before comparing against snapshot ui, incremental \"\" -> \"\", / is regex capture and replace syntax dont-check-compiler-stderr Don't check actual compiler stderr vs stderr snapshot ui N/A dont-check-compiler-stdout Don't check actual compiler stdout vs stdout snapshot ui N/A dont-require-annotations Don't require line annotations for the given diagnostic kind (//~ KIND) to be exhaustive ui, incremental ERROR, WARN, NOTE, HELP, SUGGESTION run-rustfix Apply all suggestions via rustfix, snapshot fixed output, and check fixed output builds ui N/A rustfix-only-machine-applicable run-rustfix but only machine-applicable suggestions ui N/A exec-env Env var to set when executing a test ui, crashes = unset-exec-env Env var to unset when executing a test ui, crashes Any env var name stderr-per-bitwidth Generate a stderr snapshot for each bitwidth ui N/A forbid-output A pattern which must not appear in stderr/cfail output ui, incremental Regex pattern run-flags Flags passed to the test executable ui Arbitrary flags known-bug No error annotation needed due to known bug ui, crashes, incremental Issue number #123456 presently this has a weird quirk where the test binary's stdout and stderr gets concatenated and then error-patterns are matched on this combined output, which is ??? slightly questionable to say the least.","breadcrumbs":"Testing the compiler » Compiletest » Test directives » Controlling output snapshots and normalizations","id":"202","title":"Controlling output snapshots and normalizations"},"203":{"body":"These directives are used to ignore the test in some situations, which means the test won't be compiled or run. ignore-X where X is a target detail or other criteria on which to ignore the test (see below) only-X is like ignore-X, but will only run the test on that target or stage ignore-auxiliary is intended for files that participate in one or more other main test files but that compiletest should not try to build the file itself. Please backlink to which main test is actually using the auxiliary file. ignore-test always ignores the test. This can be used to temporarily disable a test if it is currently not working, but you want to keep it in tree to re-enable it later. Some examples of X in ignore-X or only-X: A full target triple: aarch64-apple-ios Architecture: aarch64, arm, mips, wasm32, x86_64, x86, ... OS: android, emscripten, freebsd, ios, linux, macos, windows, ... Environment (fourth word of the target triple): gnu, msvc, musl WASM: wasm32-bare matches wasm32-unknown-unknown. emscripten also matches that target as well as the emscripten targets. Pointer width: 32bit, 64bit Endianness: endian-big Stage: stage1, stage2 Binary format: elf Channel: stable, beta When cross compiling: cross-compile When remote testing is used: remote When particular debuggers are being tested: cdb, gdb, lldb When particular debugger versions are matched: ignore-gdb-version Specific compare modes : compare-mode-polonius, compare-mode-chalk, compare-mode-split-dwarf, compare-mode-split-dwarf-single The two different test modes used by coverage tests: ignore-coverage-map, ignore-coverage-run When testing a dist toolchain: dist This needs to be enabled with COMPILETEST_ENABLE_DIST_TESTS=1 The rustc_abi of the target: e.g. rustc_abi-x86_64-sse2 The following directives will check rustc build settings and target settings: needs-asm-support — ignores if it is running on a target that doesn't have stable support for asm! needs-profiler-runtime — ignores the test if the profiler runtime was not enabled for the target (build.profiler = true in rustc's bootstrap.toml) needs-sanitizer-support — ignores if the sanitizer support was not enabled for the target (sanitizers = true in rustc's bootstrap.toml) needs-sanitizer-{address,hwaddress,leak,memory,thread} — ignores if the corresponding sanitizer is not enabled for the target (AddressSanitizer, hardware-assisted AddressSanitizer, LeakSanitizer, MemorySanitizer or ThreadSanitizer respectively) needs-run-enabled — ignores if it is a test that gets executed, and running has been disabled. Running tests can be disabled with the x test --run=never flag, or running on fuchsia. needs-unwind — ignores if the target does not support unwinding needs-rust-lld — ignores if the rust lld support is not enabled (rust.lld = true in bootstrap.toml) needs-threads — ignores if the target does not have threading support needs-subprocess — ignores if the target does not have subprocess support needs-symlink — ignores if the target does not support symlinks. This can be the case on Windows if the developer did not enable privileged symlink permissions. ignore-std-debug-assertions — ignores if std was built with debug assertions. needs-std-debug-assertions — ignores if std was not built with debug assertions. ignore-rustc-debug-assertions — ignores if rustc was built with debug assertions. needs-rustc-debug-assertions — ignores if rustc was not built with debug assertions. needs-target-has-atomic — ignores if target does not have support for all specified atomic widths, e.g. the test with //@ needs-target-has-atomic: 8, 16, ptr will only run if it supports the comma-separated list of atomic widths. needs-dynamic-linking — ignores if target does not support dynamic linking (which is orthogonal to it being unable to create dylib and cdylib crate types) needs-crate-type — ignores if target platform does not support one or more of the comma-delimited list of specified crate types. For example, //@ needs-crate-type: cdylib, proc-macro will cause the test to be ignored on wasm32-unknown-unknown target because the target does not support the proc-macro crate type. needs-target-std — ignores if target platform does not have std support. The following directives will check LLVM support: exact-llvm-major-version: 19 — ignores if the llvm major version does not match the specified llvm major version. min-llvm-version: 13.0 — ignored if the LLVM version is less than the given value min-system-llvm-version: 12.0 — ignored if using a system LLVM and its version is less than the given value max-llvm-major-version: 19 — ignored if the LLVM major version is higher than the given major version ignore-llvm-version: 9.0 — ignores a specific LLVM version ignore-llvm-version: 7.0 - 9.9.9 — ignores LLVM versions in a range (inclusive) needs-llvm-components: powerpc — ignores if the specific LLVM component was not built. Note: The test will fail on CI (when COMPILETEST_REQUIRE_ALL_LLVM_COMPONENTS is set) if the component does not exist. needs-forced-clang-based-tests — test is ignored unless the environment variable RUSTBUILD_FORCE_CLANG_BASED_TESTS is set, which enables building clang alongside LLVM This is only set in two CI jobs ( x86_64-gnu-debug and aarch64-gnu-debug ), which only runs a subset of run-make tests. Other tests with this directive will not run at all, which is usually not what you want. See also Debuginfo tests for directives for ignoring debuggers.","breadcrumbs":"Testing the compiler » Compiletest » Test directives » Controlling when tests are run","id":"203","title":"Controlling when tests are run"},"204":{"body":"Directive Explanation Supported test suites Possible values compile-flags Flags passed to rustc when building the test or aux file All except for run-make Any valid rustc flags, e.g. -Awarnings -Dfoo. Cannot be -Cincremental or --edition edition The edition used to build the test All except for run-make Any valid --edition value rustc-env Env var to set when running rustc All except for run-make = unset-rustc-env Env var to unset when running rustc All except for run-make Any env var name incremental Proper incremental support for tests outside of incremental test suite ui, crashes N/A no-prefer-dynamic Don't use -C prefer-dynamic, don't build as a dylib via a --crate-type=dylib preset flag ui, crashes N/A Tests (outside of run-make) that want to use incremental tests not in the incremental test-suite must not pass -C incremental via compile-flags, and must instead use the //@ incremental directive. Consider writing the test as a proper incremental test instead.","breadcrumbs":"Testing the compiler » Compiletest » Test directives » Affecting how tests are built","id":"204","title":"Affecting how tests are built"},"205":{"body":"Directive Explanation Supported test suites Possible values doc-flags Flags passed to rustdoc when building the test or aux file rustdoc, rustdoc-js, rustdoc-json Any valid rustdoc flags Test-suite-specific directives The test suites rustdoc , rustdoc-js/rustdoc-js-std and rustdoc-json each feature an additional set of directives whose basic syntax resembles the one of compiletest directives but which are ultimately read and checked by separate tools. For more information, please read their respective chapters as linked above.","breadcrumbs":"Testing the compiler » Compiletest » Test directives » Rustdoc","id":"205","title":"Rustdoc"},"206":{"body":"See Pretty-printer . Misc directives no-auto-check-cfg — disable auto check-cfg (only for --check-cfg tests) revisions — compile multiple times unused-revision-names - suppress tidy checks for mentioning unknown revision names - forbid-output — incremental cfail rejects output pattern should-ice — incremental cfail should ICE reference — an annotation linking to a rule in the reference","breadcrumbs":"Testing the compiler » Compiletest » Test directives » Pretty printing","id":"206","title":"Pretty printing"},"207":{"body":"The following directives affect how certain command-line tools are invoked, in test suites that use those tools: filecheck-flags adds extra flags when running LLVM's FileCheck tool. Used by codegen tests , assembly tests , and MIR-opt tests . llvm-cov-flags adds extra flags when running LLVM's llvm-cov tool. Used by coverage tests in coverage-run mode.","breadcrumbs":"Testing the compiler » Compiletest » Test directives » Tool-specific directives","id":"207","title":"Tool-specific directives"},"208":{"body":"Directive values support substituting a few variables which will be replaced with their corresponding value. For example, if you need to pass a compiler flag with a path to a specific file, something like the following could work: //@ compile-flags: --remap-path-prefix={{src-base}}=/the/src Where the sentinel {{src-base}} will be replaced with the appropriate path described below: {{cwd}}: The directory where compiletest is run from. This may not be the root of the checkout, so you should avoid using it where possible. Examples: /path/to/rust, /path/to/build/root {{src-base}}: The directory where the test is defined. This is equivalent to $DIR for output normalization . Example: /path/to/rust/tests/ui/error-codes {{build-base}}: The base directory where the test's output goes. This is equivalent to $TEST_BUILD_DIR for output normalization . Example: /path/to/rust/build/x86_64-unknown-linux-gnu/test/ui {{rust-src-base}}: The sysroot directory where libstd/libcore/... are located {{sysroot-base}}: Path of the sysroot directory used to build the test. Mainly intended for ui-fulldeps tests that run the compiler via API. {{target-linker}}: Linker that would be passed to -Clinker for this test, or blank if no linker override is active. Mainly intended for ui-fulldeps tests that run the compiler via API. {{target}}: The target the test is compiling for Example: x86_64-unknown-linux-gnu See tests/ui/commandline-argfile.rs for an example of a test that uses this substitution.","breadcrumbs":"Testing the compiler » Compiletest » Test directives » Substitutions","id":"208","title":"Substitutions"},"209":{"body":"One would add a new directive if there is a need to define some test property or behavior on an individual, test-by-test basis. A directive property serves as the directive's backing store (holds the command's current value) at runtime. To add a new directive property: Look for the pub struct TestProps declaration in src/tools/compiletest/src/header.rs and add the new public property to the end of the declaration. Look for the impl TestProps implementation block immediately following the struct declaration and initialize the new property to its default value.","breadcrumbs":"Testing the compiler » Compiletest » Test directives » Adding a directive","id":"209","title":"Adding a directive"},"21":{"body":"For a less in-depth quick-start of getting the compiler running, see quickstart .","breadcrumbs":"How to build and run the compiler » Quick Start","id":"21","title":"Quick Start"},"210":{"body":"When compiletest encounters a test file, it parses the file a line at a time by calling every parser defined in the Config struct's implementation block, also in src/tools/compiletest/src/header.rs (note that the Config struct's declaration block is found in src/tools/compiletest/src/common.rs ). TestProps's load_from() method will try passing the current line of text to each parser, which, in turn typically checks to see if the line begins with a particular commented (//@) directive such as //@ must-compile-successfully or //@ failure-status. Whitespace after the comment marker is optional. Parsers will override a given directive property's default value merely by being specified in the test file as a directive or by having a parameter value specified in the test file, depending on the directive. Parsers defined in impl Config are typically named parse_ (note kebab-case transformed to snake-case ). impl Config also defines several 'low-level' parsers which make it simple to parse common patterns like simple presence or not (parse_name_directive()), directive:parameter(s) (parse_name_value_directive()), optional parsing only if a particular cfg attribute is defined (has_cfg_prefix()) and many more. The low-level parsers are found near the end of the impl Config block; be sure to look through them and their associated parsers immediately above to see how they are used to avoid writing additional parsing code unnecessarily. As a concrete example, here is the implementation for the parse_failure_status() parser, in src/tools/compiletest/src/header.rs : @@ -232,6 +232,7 @@ pub struct TestProps { // customized normalization rules pub normalize_stdout: Vec<(String, String)>, pub normalize_stderr: Vec<(String, String)>,\n+ pub failure_status: i32, } impl TestProps {\n@@ -260,6 +261,7 @@ impl TestProps { run_pass: false, normalize_stdout: vec![], normalize_stderr: vec![],\n+ failure_status: 101, } } @@ -383,6 +385,10 @@ impl TestProps { if let Some(rule) = config.parse_custom_normalization(ln, \"normalize-stderr\") { self.normalize_stderr.push(rule); }\n+\n+ if let Some(code) = config.parse_failure_status(ln) {\n+ self.failure_status = code;\n+ } }); for key in &[\"RUST_TEST_NOCAPTURE\", \"RUST_TEST_THREADS\"] {\n@@ -488,6 +494,13 @@ impl Config { self.parse_name_directive(line, \"pretty-compare-only\") } + fn parse_failure_status(&self, line: &str) -> Option {\n+ match self.parse_name_value_directive(line, \"failure-status\") {\n+ Some(code) => code.trim().parse::().ok(),\n+ _ => None,\n+ }\n+ }","breadcrumbs":"Testing the compiler » Compiletest » Test directives » Adding a new directive parser","id":"210","title":"Adding a new directive parser"},"211":{"body":"When a test invokes a particular directive, it is expected that some behavior will change as a result. What behavior, obviously, will depend on the purpose of the directive. In the case of failure-status, the behavior that changes is that compiletest expects the failure code defined by the directive invoked in the test, rather than the default value. Although specific to failure-status (as every directive will have a different implementation in order to invoke behavior change) perhaps it is helpful to see the behavior change implementation of one case, simply as an example. To implement failure-status, the check_correct_failure_status() function found in the TestCx implementation block, located in src/tools/compiletest/src/runtest.rs , was modified as per below: @@ -295,11 +295,14 @@ impl<'test> TestCx<'test> { } fn check_correct_failure_status(&self, proc_res: &ProcRes) {\n- // The value the Rust runtime returns on failure\n- const RUST_ERR: i32 = 101;\n- if proc_res.status.code() != Some(RUST_ERR) {\n+ let expected_status = Some(self.props.failure_status);\n+ let received_status = proc_res.status.code();\n+\n+ if expected_status != received_status { self.fatal_proc_rec(\n- &format!(\"failure produced the wrong error: {}\", proc_res.status),\n+ &format!(\"Error: expected failure status ({:?}) but received status {:?}.\",\n+ expected_status,\n+ received_status), proc_res, ); }\n@@ -320,7 +323,6 @@ impl<'test> TestCx<'test> { ); let proc_res = self.exec_compiled_test();\n- if !proc_res.status.success() { self.fatal_proc_rec(\"test run failed!\", &proc_res); }\n@@ -499,7 +501,6 @@ impl<'test> TestCx<'test> { expected, actual );\n- panic!(); } } Note the use of self.props.failure_status to access the directive property. In tests which do not specify the failure status directive, self.props.failure_status will evaluate to the default value of 101 at the time of this writing. But for a test which specifies a directive of, for example, //@ failure-status: 1, self.props.failure_status will evaluate to 1, as parse_failure_status() will have overridden the TestProps default value, for that test specifically.","breadcrumbs":"Testing the compiler » Compiletest » Test directives » Implementing the behavior change","id":"211","title":"Implementing the behavior change"},"212":{"body":"tests/auxiliary/minicore.rs is a test auxiliary for ui/codegen/assembly test suites. It provides core stubs for tests that need to build for cross-compiled targets but do not need/want to run. Please note that minicore is only intended for core items, and explicitly not std or alloc items because core items are applicable to a wider range of tests. A test can use minicore by specifying the //@ add-core-stubs directive. Then, mark the test with #![feature(no_core)] + #![no_std] + #![no_core]. Due to Edition 2015 extern prelude rules, you will probably need to declare minicore as an extern crate.","breadcrumbs":"Testing the compiler » Compiletest » Minicore » minicore test auxiliary: using core stubs","id":"212","title":"minicore test auxiliary: using core stubs"},"213":{"body":"Due to the no_std + no_core nature of these tests, //@ add-core-stubs implies and requires that the test will be built with -C panic=abort. Unwinding panics are not supported. Tests will also be built with -C force-unwind-tables=yes to preserve CFI directives in assembly tests. TL;DR: //@ add-core-stubs implies two compiler flags: -C panic=abort -C force-unwind-tables=yes","breadcrumbs":"Testing the compiler » Compiletest » Minicore » Implied compiler flags","id":"213","title":"Implied compiler flags"},"214":{"body":"If you find a core item to be missing from the minicore stub, consider adding it to the test auxiliary if it's likely to be used or is already needed by more than one test.","breadcrumbs":"Testing the compiler » Compiletest » Minicore » Adding more core stubs","id":"214","title":"Adding more core stubs"},"215":{"body":"//@ add-core-stubs\n//@ revisions: meow bark\n//@[meow] compile-flags: --target=x86_64-unknown-linux-gnu\n//@[meow] needs-llvm-components: x86\n//@[bark] compile-flags: --target=wasm32-unknown-unknown\n//@[bark] needs-llvm-components: webassembly #![crate_type = \"lib\"]\n#![feature(no_core)]\n#![no_std]\n#![no_core] extern crate minicore;\nuse minicore::*; struct Meow;\nimpl Copy for Meow {} // `Copy` here is provided by `minicore` // CHECK-LABEL: meow\n#[unsafe(no_mangle)]\nfn meow() {}","breadcrumbs":"Testing the compiler » Compiletest » Minicore » Example codegen test that uses minicore","id":"215","title":"Example codegen test that uses minicore"},"216":{"body":"Rust tests integration with real-world code in the ecosystem to catch regressions and make informed decisions about the evolution of the language.","breadcrumbs":"Testing the compiler » Ecosystem testing » Ecosystem testing","id":"216","title":"Ecosystem testing"},"217":{"body":"","breadcrumbs":"Testing the compiler » Ecosystem testing » Testing methods","id":"217","title":"Testing methods"},"218":{"body":"Crater is a tool which runs tests on many thousands of public projects. This tool has its own separate infrastructure for running, and is not run as part of CI. See the Crater chapter for more details.","breadcrumbs":"Testing the compiler » Ecosystem testing » Crater","id":"218","title":"Crater"},"219":{"body":"cargotest is a small tool which runs cargo test on a few sample projects (such as servo, ripgrep, tokei, etc.). This runs as part of CI and ensures there aren't any significant regressions: ./x test src/tools/cargotest","breadcrumbs":"Testing the compiler » Ecosystem testing » cargotest","id":"219","title":"cargotest"},"22":{"body":"The main repository is rust-lang/rust . This contains the compiler, the standard library (including core, alloc, test, proc_macro, etc), and a bunch of tools (e.g. rustdoc, the bootstrapping infrastructure, etc). The very first step to work on rustc is to clone the repository: git clone https://github.com/rust-lang/rust.git\ncd rust","breadcrumbs":"How to build and run the compiler » Get the source code","id":"22","title":"Get the source code"},"220":{"body":"We have CI jobs that build large open-source Rust projects that are used as regression tests in CI. Our integration jobs build the following projects: Fuchsia Rust for Linux","breadcrumbs":"Testing the compiler » Ecosystem testing » Large OSS Project builders","id":"220","title":"Large OSS Project builders"},"221":{"body":"Crater is a tool for compiling and running tests for every crate on crates.io (and a few on GitHub). It is mainly used for checking the extent of breakage when implementing potentially breaking changes and ensuring lack of breakage by running beta vs stable compiler versions.","breadcrumbs":"Testing the compiler » Ecosystem testing » Crater » Crater","id":"221","title":"Crater"},"222":{"body":"You should request a crater run if your PR makes large changes to the compiler or could cause breakage. If you are unsure, feel free to ask your PR's reviewer.","breadcrumbs":"Testing the compiler » Ecosystem testing » Crater » When to run Crater","id":"222","title":"When to run Crater"},"223":{"body":"The rust team maintains a few machines that can be used for running crater runs on the changes introduced by a PR. If your PR needs a crater run, leave a comment for the triage team in the PR thread. Please inform the team whether you require a \"check-only\" crater run, a \"build only\" crater run, or a \"build-and-test\" crater run. The difference is primarily in time; the conservative (if you're not sure) option is to go for the build-and-test run. If making changes that will only have an effect at compile-time (e.g., implementing a new trait) then you only need a check run. Your PR will be enqueued by the triage team and the results will be posted when they are ready. Check runs will take around ~3-4 days, with the other two taking 5-6 days on average. While crater is really useful, it is also important to be aware of a few caveats: Not all code is on crates.io! There is a lot of code in repos on GitHub and elsewhere. Also, companies may not wish to publish their code. Thus, a successful crater run is not a magically green light that there will be no breakage; you still need to be careful. Crater only runs Linux builds on x86_64. Thus, other architectures and platforms are not tested. Critically, this includes Windows. Many crates are not tested. This could be for a lot of reasons, including that the crate doesn't compile any more (e.g. used old nightly features), has broken or flaky tests, requires network access, or other reasons. Before crater can be run, @bors try needs to succeed in building artifacts. This means that if your code doesn't compile, you cannot run crater.","breadcrumbs":"Testing the compiler » Ecosystem testing » Crater » Requesting Crater Runs","id":"223","title":"Requesting Crater Runs"},"224":{"body":"Fuchsia is an open-source operating system with about 2 million lines of Rust code. [1] It has caught a large number of regressions in the past and was subsequently included in CI.","breadcrumbs":"Testing the compiler » Ecosystem testing » Fuchsia » Fuchsia integration tests","id":"224","title":"Fuchsia integration tests"},"225":{"body":"Please contact the fuchsia ping group and ask them for help. @rustbot ping fuchsia","breadcrumbs":"Testing the compiler » Ecosystem testing » Fuchsia » What to do if the Fuchsia job breaks?","id":"225","title":"What to do if the Fuchsia job breaks?"},"226":{"body":"Fuchsia builds as part of the suite of bors tests that run before a pull request is merged. If you are worried that a pull request might break the Fuchsia builder and want to test it out before submitting it to the bors queue, simply add this line to your PR description: try-job: x86_64-fuchsia Then when you @bors try it will pick the job that builds Fuchsia.","breadcrumbs":"Testing the compiler » Ecosystem testing » Fuchsia » Building Fuchsia in CI","id":"226","title":"Building Fuchsia in CI"},"227":{"body":"Because Fuchsia uses languages other than Rust, it does not use Cargo as a build system. It also requires the toolchain build to be configured in a certain way . The recommended way to build Fuchsia is to use the Docker scripts that check out and run a Fuchsia build for you. If you've run Docker tests before, you can simply run this command from your Rust checkout to download and build Fuchsia using your local Rust toolchain. src/ci/docker/run.sh x86_64-fuchsia See the Testing with Docker chapter for more details on how to run and debug jobs with Docker. Note that a Fuchsia checkout is large – as of this writing, a checkout and build takes 46G of space – and as you might imagine, it takes a while to complete.","breadcrumbs":"Testing the compiler » Ecosystem testing » Fuchsia » Building Fuchsia locally","id":"227","title":"Building Fuchsia locally"},"228":{"body":"The main reason you would want to build Fuchsia locally is because you need to investigate a regression. After running a Docker build, you'll find the Fuchsia checkout inside the obj/fuchsia directory of your Rust checkout. If you modify the KEEP_CHECKOUT line in the build-fuchsia.sh script to KEEP_CHECKOUT=1, you can change the checkout as needed and rerun the build command above. This will reuse all the build results from before. You can find more options to customize the Fuchsia checkout in the build-fuchsia.sh script.","breadcrumbs":"Testing the compiler » Ecosystem testing » Fuchsia » Modifying the Fuchsia checkout","id":"228","title":"Modifying the Fuchsia checkout"},"229":{"body":"You can find more info about the options used to build Fuchsia in Rust CI in the build_fuchsia_from_rust_ci.sh script invoked by build-fuchsia.sh . The Fuchsia build system uses GN , a metabuild system that generates Ninja files and then hands off the work of running the build to Ninja. Fuchsia developers use fx to run builds and perform other development tasks. This tool is located in .jiri_root/bin of the Fuchsia checkout; you may need to add this to your $PATH for some workflows. There are a few fx subcommands that are relevant, including: fx set accepts build arguments, writes them to out/default/args.gn, and runs GN. fx build builds the Fuchsia project using Ninja. It will automatically pick up changes to build arguments and rerun GN. By default it builds everything, but it also accepts target paths to build specific targets (see below). fx clippy runs Clippy on specific Rust targets (or all of them). We use this in the Rust CI build to avoid running codegen on most Rust targets. Underneath it invokes Ninja, just like fx build. The clippy results are saved in json files inside the build output directory before being printed. Target paths GN uses paths like the following to identify build targets: //src/starnix/kernel:starnix_core The initial // means the root of the checkout, and the remaining slashes are directory names. The string after : is the target name of a target defined in the BUILD.gn file of that directory. The target name can be omitted if it is the same as the directory name. In other words, //src/starnix/kernel is the same as //src/starnix/kernel:kernel. These target paths are used inside BUILD.gn files to reference dependencies, and can also be used in fx build. Modifying compiler flags You can put custom compiler flags inside a GN config that is added to a target. As a simple example: config(\"everybody_loops\") { rustflags = [ \"-Zeverybody-loops\" ]\n} rustc_binary(\"example\") { crate_root = \"src/bin.rs\" # ...existing keys here... configs += [ \":everybody_loops\" ]\n} This will add the flag -Zeverybody-loops to rustc when building the example target. Note that you can also use public_configs for a config to be added to every target that depends on that target. If you want to add a flag to every Rust target in the build, you can add rustflags to the //build/config:compiler config or to the OS-specific configs referenced in that file. Note that cflags and ldflags are ignored on Rust targets. Running ninja and rustc commands directly Going down one layer, fx build invokes ninja, which in turn eventually invokes rustc. All build actions are run inside the out directory, which is usually out/default inside the Fuchsia checkout. You can get ninja to print the actual command it invokes by forcing that command to fail, e.g. by adding a syntax error to one of the source files of the target. Once you have the command, you can run it from inside the output directory. After changing the toolchain itself, the build setting rustc_version_string in out/default/args.gn needs to be changed so that fx build or ninja will rebuild all the Rust targets. This can be done in a text editor and the contents of the string do not matter, as long as it changes from one build to the next. build_fuchsia_from_rust_ci.sh does this for you by hashing the toolchain directory. The Fuchsia website has more detailed documentation of the build system . Other tips and tricks When using build_fuchsia_from_rust_ci.sh you can comment out the fx set command after the initial run so it won't rerun GN each time. If you do this you can also comment out the version_string line to save a couple seconds. export NINJA_PERSISTENT_MODE=1 to get faster ninja startup times after the initial build.","breadcrumbs":"Testing the compiler » Ecosystem testing » Fuchsia » Customizing the Fuchsia build","id":"229","title":"Customizing the Fuchsia build"},"23":{"body":"Due to the size of the repository, cloning on a slower internet connection can take a long time, and requires disk space to store the full history of every file and directory. Instead, it is possible to tell git to perform a partial clone , which will only fully retrieve the current file contents, but will automatically retrieve further file contents when you, e.g., jump back in the history. All git commands will continue to work as usual, at the price of requiring an internet connection to visit not-yet-loaded points in history. git clone --filter='blob:none' https://github.com/rust-lang/rust.git\ncd rust NOTE : This link describes this type of checkout in more detail, and also compares it to other modes, such as shallow cloning.","breadcrumbs":"How to build and run the compiler » Partial clone the repository","id":"23","title":"Partial clone the repository"},"230":{"body":"To learn more about Fuchsia target support, see the Fuchsia chapter in the rustc book . As of June 2024, Fuchsia had about 2 million lines of first-party Rust code and a roughly equal amount of third-party code, as counted by tokei (excluding comments and blanks).","breadcrumbs":"Testing the compiler » Ecosystem testing » Fuchsia » Fuchsia target support","id":"230","title":"Fuchsia target support"},"231":{"body":"Rust for Linux (RfL) is an effort for adding support for the Rust programming language into the Linux kernel.","breadcrumbs":"Testing the compiler » Ecosystem testing » Rust for Linux » Rust for Linux integration tests","id":"231","title":"Rust for Linux integration tests"},"232":{"body":"If a PR breaks the Rust for Linux CI job, then: If the breakage was unintentional and seems spurious, then let RfL know and retry. If the PR is urgent and retrying doesn't fix it, then disable the CI job temporarily (comment out the image: x86_64-rust-for-linux job in src/ci/github-actions/jobs.yml). If the breakage was unintentional, then change the PR to resolve the breakage. If the breakage was intentional, then let RfL know and discuss what will the kernel need to change. If the PR is urgent, then disable the CI job temporarily (comment out the image: x86_64-rust-for-linux job in src/ci/github-actions/jobs.yml). If the PR can wait a few days, then wait for RfL maintainers to provide a new Linux kernel commit hash with the needed changes done, and apply it to the PR, which would confirm the changes work (update the LINUX_VERSION environment variable in src/ci/docker/scripts/rfl-build.sh). If you need to contact the RfL developers, you can ping the Rust for Linux ping group to ask for help: @rustbot ping rfl","breadcrumbs":"Testing the compiler » Ecosystem testing » Rust for Linux » What to do if the Rust for Linux job breaks?","id":"232","title":"What to do if the Rust for Linux job breaks?"},"233":{"body":"Rust for Linux builds as part of the suite of bors tests that run before a pull request is merged. The workflow builds a stage1 sysroot of the Rust compiler, downloads the Linux kernel, and tries to compile several Rust for Linux drivers and examples using this sysroot. RfL uses several unstable compiler/language features, therefore this workflow notifies us if a given compiler change would break it. If you are worried that a pull request might break the Rust for Linux builder and want to test it out before submitting it to the bors queue, simply add this line to your PR description: try-job: x86_64-rust-for-linux Then when you @bors try it will pick the job that builds the Rust for Linux integration.","breadcrumbs":"Testing the compiler » Ecosystem testing » Rust for Linux » Building Rust for Linux in CI","id":"233","title":"Building Rust for Linux in CI"},"234":{"body":"See also the Code generation chapter. In addition to the primary LLVM codegen backend, the rust-lang/rust CI also runs tests of the cranelift and GCC codegen backends in certain test jobs. For more details on the tests involved, see: Cranelift codegen backend tests GCC codegen backend tests","breadcrumbs":"Testing the compiler » Codegen backend testing » Codegen backend testing","id":"234","title":"Codegen backend testing"},"235":{"body":"TODO: please add some more information to this page.","breadcrumbs":"Testing the compiler » Codegen backend testing » Cranelift codegen backend » Cranelift codegen backend tests","id":"235","title":"Cranelift codegen backend tests"},"236":{"body":"TODO: please add some more information to this page.","breadcrumbs":"Testing the compiler » Codegen backend testing » GCC codegen backend » GCC codegen backend tests","id":"236","title":"GCC codegen backend tests"},"237":{"body":"","breadcrumbs":"Testing the compiler » Performance testing » Performance testing","id":"237","title":"Performance testing"},"238":{"body":"A lot of work is put into improving the performance of the compiler and preventing performance regressions. The rustc-perf project provides several services for testing and tracking performance. It provides hosted infrastructure for running benchmarks as a service. At this time, only x86_64-unknown-linux-gnu builds are tracked. A \"perf run\" is used to compare the performance of the compiler in different configurations for a large collection of popular crates. Different configurations include \"fresh builds\", builds with incremental compilation, etc. The result of a perf run is a comparison between two versions of the compiler (by their commit hashes). You can also use rustc-perf to manually benchmark and profile the compiler locally .","breadcrumbs":"Testing the compiler » Performance testing » rustc-perf","id":"238","title":"rustc-perf"},"239":{"body":"After every PR is merged, a suite of benchmarks are run against the compiler. The results are tracked over time on the https://perf.rust-lang.org/ website. Any changes are noted in a comment on the PR.","breadcrumbs":"Testing the compiler » Performance testing » Automatic perf runs","id":"239","title":"Automatic perf runs"},"24":{"body":"An older alternative to partial clones is to use shallow clone the repository instead. To do so, you can use the --depth N option with the git clone command. This instructs git to perform a \"shallow clone\", cloning the repository but truncating it to the last N commits. Passing --depth 1 tells git to clone the repository but truncate the history to the latest commit that is on the master branch, which is usually fine for browsing the source code or building the compiler. git clone --depth 1 https://github.com/rust-lang/rust.git\ncd rust NOTE : A shallow clone limits which git commands can be run. If you intend to work on and contribute to the compiler, it is generally recommended to fully clone the repository as shown above , or to perform a partial clone instead. For example, git bisect and git blame require access to the commit history, so they don't work if the repository was cloned with --depth 1.","breadcrumbs":"How to build and run the compiler » Shallow clone the repository","id":"24","title":"Shallow clone the repository"},"240":{"body":"Additionally, performance tests can be ran before a PR is merged on an as-needed basis. You should request a perf run if your PR may affect performance, especially if it can affect performance adversely. To evaluate the performance impact of a PR, write this comment on the PR: @bors try @rust-timer queue Note : Only users authorized to do perf runs are allowed to post this comment. Teams that are allowed to use it are tracked in the Teams repository with the perf = true value in the [permissions] section (and bors permissions are also required). If you are not on one of those teams, feel free to ask for someone to post it for you (either on Zulip or ask the assigned reviewer). This will first tell bors to do a \"try\" build which do a full release build for x86_64-unknown-linux-gnu. After the build finishes, it will place it in the queue to run the performance suite against it. After the performance tests finish, the bot will post a comment on the PR with a summary and a link to a full report. If you want to do a perf run for an already built artifact (e.g. for a previous try build that wasn't benchmarked yet), you can run this instead: @rust-timer build You cannot benchmark the same artifact twice though. More information about the available perf bot commands can be found here . More details about the benchmarking process itself are available in the perf collector documentation .","breadcrumbs":"Testing the compiler » Performance testing » Manual perf runs","id":"240","title":"Manual perf runs"},"241":{"body":"This chapter is about the internals of and contribution instructions for the suggest-tests tool. For a high-level overview of the tool, see this section . This tool is currently in a beta state and is tracked by this issue on Github. Currently the number of tests it will suggest are very limited in scope, we are looking to expand this (contributions welcome!).","breadcrumbs":"Testing the compiler » Suggest tests tool » Suggest tests tool","id":"241","title":"Suggest tests tool"},"242":{"body":"The tool is defined in a separate crate ( src/tools/suggest-tests ) which outputs suggestions which are parsed by a shim in bootstrap ( src/bootstrap/src/core/build_steps/suggest.rs ). The only notable thing the bootstrap shim does is (when invoked with the --run flag) use bootstrap's internal mechanisms to create a new Builder and uses it to invoke the suggested commands. The suggest-tests crate is where the fun happens, two kinds of suggestions are defined: \"static\" and \"dynamic\" suggestions.","breadcrumbs":"Testing the compiler » Suggest tests tool » Internals","id":"242","title":"Internals"},"243":{"body":"Defined here . Static suggestions are simple: they are just globs which map to a x command. In suggest-tests, this is implemented with a simple macro_rules macro.","breadcrumbs":"Testing the compiler » Suggest tests tool » Static suggestions","id":"243","title":"Static suggestions"},"244":{"body":"Defined here . These are more complicated than static suggestions and are implemented as functions with the following signature: fn(&Path) -> Vec. In other words, each suggestion takes a path to a modified file and (after running arbitrary Rust code) can return any number of suggestions, or none. Dynamic suggestions are useful for situations where fine-grained control over suggestions is needed. For example, modifications to the compiler/xyz/ path should trigger the x test compiler/xyz suggestion. In the future, dynamic suggestions might even read file contents to determine if (what) tests should run.","breadcrumbs":"Testing the compiler » Suggest tests tool » Dynamic suggestions","id":"244","title":"Dynamic suggestions"},"245":{"body":"The following steps should serve as a rough guide to add suggestions to suggest-tests (very welcome!): Determine the rules for your suggestion. Is it simple and operates only on a single path or does it match globs? Does it need fine-grained control over the resulting command or does \"one size fit all\"? Based on the previous step, decide if your suggestion should be implemented as either static or dynamic. Implement the suggestion. If it is dynamic then a test is highly recommended, to verify that your logic is correct and to give an example of the suggestion. See the tests.rs file. Open a PR implementing your suggestion. (TODO: add example PR)","breadcrumbs":"Testing the compiler » Suggest tests tool » Adding a suggestion","id":"245","title":"Adding a suggestion"},"246":{"body":"","breadcrumbs":"Testing the compiler » Misc info » Miscellaneous testing-related info","id":"246","title":"Miscellaneous testing-related info"},"247":{"body":"This is a bootstrap/compiler implementation detail, but it can also be useful for testing: RUSTC_BOOTSTRAP=1 will \"cheat\" and bypass usual stability checking, allowing you to use unstable features and cli flags on a stable rustc. RUSTC_BOOTSTRAP=-1 will force a given rustc to pretend that is a stable compiler, even if it's actually a nightly rustc. This is useful because some behaviors of the compiler (e.g. diagnostics) can differ depending on whether the compiler is nightly or not. In ui tests and other test suites that support //@ rustc-env, you can specify // Force unstable features to be usable on stable rustc\n//@ rustc-env:RUSTC_BOOTSTRAP=1 // Or force nightly rustc to pretend it is a stable rustc\n//@ rustc-env:RUSTC_BOOTSTRAP=-1 For run-make tests, //@ rustc-env is not supported. You can do something like the following for individual rustc invocations. use run_make_support::rustc; fn main() { rustc() // Pretend that I am very stable .env(\"RUSTC_BOOTSTRAP\", \"-1\") //... .run();\n}","breadcrumbs":"Testing the compiler » Misc info » RUSTC_BOOTSTRAP and stability","id":"247","title":"RUSTC_BOOTSTRAP and stability"},"248":{"body":"Configuring the compiler Suppressing the ICE file Getting a backtrace -Z flags Getting a backtrace for errors Debugging delayed bugs Getting the error creation location Getting logging output Narrowing (Bisecting) Regressions Downloading Artifacts from Rust's CI #[rustc_*] TEST attributes Formatting Graphviz output (.dot files) Debugging type layouts Configuring CodeLLDB for debugging rustc This chapter contains a few tips to debug the compiler. These tips aim to be useful no matter what you are working on. Some of the other chapters have advice about specific parts of the compiler (e.g. the Queries Debugging and Testing chapter or the LLVM Debugging chapter ).","breadcrumbs":"Debugging the compiler » Debugging the compiler","id":"248","title":"Debugging the compiler"},"249":{"body":"By default, rustc is built without most debug information. To enable debug info, set debug = true in your bootstrap.toml. Setting debug = true turns on many different debug options (e.g., debug-assertions, debug-logging, etc.) which can be individually tweaked if you want to, but many people simply set debug = true. If you want to use GDB to debug rustc, please set bootstrap.toml with options: [rust]\ndebug = true\ndebuginfo-level = 2 NOTE: This will use a lot of disk space (upwards of 35GB), and will take a lot more compile time. With debuginfo-level = 1 (the default when debug = true), you will be able to track the execution path, but will lose the symbol information for debugging. The default configuration will enable symbol-mangling-version v0. This requires at least GDB v10.2, otherwise you need to disable new symbol-mangling-version in bootstrap.toml. [rust]\nnew-symbol-mangling = false See the comments in bootstrap.example.toml for more info. You will need to rebuild the compiler after changing any configuration option.","breadcrumbs":"Debugging the compiler » Configuring the compiler","id":"249","title":"Configuring the compiler"},"25":{"body":"x.py is the build tool for the rust repository. It can build docs, run tests, and compile the compiler and standard library. This chapter focuses on the basics to be productive, but if you want to learn more about x.py, read this chapter . Also, using x rather than x.py is recommended as: ./x is the most likely to work on every system (on Unix it runs the shell script that does python version detection, on Windows it will probably run the powershell script - certainly less likely to break than ./x.py which often just opens the file in an editor). [1] (You can find the platform related scripts around the x.py, like x.ps1) Notice that this is not absolute. For instance, using Nushell in VSCode on Win10, typing x or ./x still opens x.py in an editor rather than invoking the program. :) In the rest of this guide, we use x rather than x.py directly. The following command: ./x check could be replaced by: ./x.py check","breadcrumbs":"How to build and run the compiler » What is x.py?","id":"25","title":"What is x.py?"},"250":{"body":"By default, if rustc encounters an Internal Compiler Error (ICE) it will dump the ICE contents to an ICE file within the current working directory named rustc-ice--.txt. If this is not desirable, you can prevent the ICE file from being created with RUSTC_ICE=0.","breadcrumbs":"Debugging the compiler » Suppressing the ICE file","id":"250","title":"Suppressing the ICE file"},"251":{"body":"When you have an ICE (panic in the compiler), you can set RUST_BACKTRACE=1 to get the stack trace of the panic! like in normal Rust programs. IIRC backtraces don't work on MinGW, sorry. If you have trouble or the backtraces are full of unknown, you might want to find some way to use Linux, Mac, or MSVC on Windows. In the default configuration (without debug set to true), you don't have line numbers enabled, so the backtrace looks like this: stack backtrace: 0: std::sys::imp::backtrace::tracing::imp::unwind_backtrace 1: std::sys_common::backtrace::_print 2: std::panicking::default_hook::{{closure}} 3: std::panicking::default_hook 4: std::panicking::rust_panic_with_hook 5: std::panicking::begin_panic (~~~~ LINES REMOVED BY ME FOR BREVITY ~~~~) 32: rustc_typeck::check_crate 33: >::with 34: >::with 35: rustc::ty::context::TyCtxt::create_and_enter 36: rustc_driver::driver::compile_input 37: rustc_driver::run_compiler If you set debug = true, you will get line numbers for the stack trace. Then the backtrace will look like this: stack backtrace: (~~~~ LINES REMOVED BY ME FOR BREVITY ~~~~) at /home/user/rust/compiler/rustc_typeck/src/check/cast.rs:110 7: rustc_typeck::check::cast::CastCheck::check at /home/user/rust/compiler/rustc_typeck/src/check/cast.rs:572 at /home/user/rust/compiler/rustc_typeck/src/check/cast.rs:460 at /home/user/rust/compiler/rustc_typeck/src/check/cast.rs:370 (~~~~ LINES REMOVED BY ME FOR BREVITY ~~~~) 33: rustc_driver::driver::compile_input at /home/user/rust/compiler/rustc_driver/src/driver.rs:1010 at /home/user/rust/compiler/rustc_driver/src/driver.rs:212 34: rustc_driver::run_compiler at /home/user/rust/compiler/rustc_driver/src/lib.rs:253","breadcrumbs":"Debugging the compiler » Getting a backtrace","id":"251","title":"Getting a backtrace"},"252":{"body":"The compiler has a bunch of -Z * flags. These are unstable flags that are only enabled on nightly. Many of them are useful for debugging. To get a full listing of -Z flags, use -Z help. One useful flag is -Z verbose-internals, which generally enables printing more info that could be useful for debugging. Right below you can find elaborate explainers on a selected few.","breadcrumbs":"Debugging the compiler » -Z flags","id":"252","title":"-Z flags"},"253":{"body":"If you want to get a backtrace to the point where the compiler emits an error message, you can pass the -Z treat-err-as-bug=n, which will make the compiler panic on the nth error. If you leave off =n, the compiler will assume 1 for n and thus panic on the first error it encounters. For example: $ cat error.rs fn main() { 1 + ();\n} $ rustc +stage1 error.rs\nerror[E0277]: cannot add `()` to `{integer}` --> error.rs:2:7 |\n2 | 1 + (); | ^ no implementation for `{integer} + ()` | = help: the trait `Add<()>` is not implemented for `{integer}` error: aborting due to previous error Now, where does the error above come from? $ RUST_BACKTRACE=1 rustc +stage1 error.rs -Z treat-err-as-bug\nerror[E0277]: the trait bound `{integer}: std::ops::Add<()>` is not satisfied --> error.rs:2:7 |\n2 | 1 + (); | ^ no implementation for `{integer} + ()` | = help: the trait `std::ops::Add<()>` is not implemented for `{integer}` error: internal compiler error: unexpected panic note: the compiler unexpectedly panicked. this is a bug. note: we would appreciate a bug report: https://github.com/rust-lang/rust/blob/master/CONTRIBUTING.md#bug-reports note: rustc 1.24.0-dev running on x86_64-unknown-linux-gnu note: run with `RUST_BACKTRACE=1` for a backtrace thread 'rustc' panicked at 'encountered error with `-Z treat_err_as_bug',\n/home/user/rust/compiler/rustc_errors/src/lib.rs:411:12\nnote: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose\nbacktrace.\nstack backtrace: (~~~ IRRELEVANT PART OF BACKTRACE REMOVED BY ME ~~~) 7: rustc::traits::error_reporting::> ::report_selection_error at /home/user/rust/compiler/rustc_middle/src/traits/error_reporting.rs:823 8: rustc::traits::error_reporting::> ::report_fulfillment_errors at /home/user/rust/compiler/rustc_middle/src/traits/error_reporting.rs:160 at /home/user/rust/compiler/rustc_middle/src/traits/error_reporting.rs:112 9: rustc_typeck::check::FnCtxt::select_obligations_where_possible at /home/user/rust/compiler/rustc_typeck/src/check/mod.rs:2192 (~~~ IRRELEVANT PART OF BACKTRACE REMOVED BY ME ~~~) 36: rustc_driver::run_compiler at /home/user/rust/compiler/rustc_driver/src/lib.rs:253 Cool, now I have a backtrace for the error!","breadcrumbs":"Debugging the compiler » Getting a backtrace for errors","id":"253","title":"Getting a backtrace for errors"},"254":{"body":"The -Z eagerly-emit-delayed-bugs option makes it easy to debug delayed bugs. It turns them into normal errors, i.e. makes them visible. This can be used in combination with -Z treat-err-as-bug to stop at a particular delayed bug and get a backtrace.","breadcrumbs":"Debugging the compiler » Debugging delayed bugs","id":"254","title":"Debugging delayed bugs"},"255":{"body":"-Z track-diagnostics can help figure out where errors are emitted. It uses #[track_caller] for this and prints its location alongside the error: $ RUST_BACKTRACE=1 rustc +stage1 error.rs -Z track-diagnostics\nerror[E0277]: cannot add `()` to `{integer}` --> src\\error.rs:2:7 |\n2 | 1 + (); | ^ no implementation for `{integer} + ()`\n-Ztrack-diagnostics: created at compiler/rustc_trait_selection/src/traits/error_reporting/mod.rs:638:39 | = help: the trait `Add<()>` is not implemented for `{integer}` = help: the following other types implement trait `Add`: <&'a f32 as Add> <&'a f64 as Add> <&'a i128 as Add> <&'a i16 as Add> <&'a i32 as Add> <&'a i64 as Add> <&'a i8 as Add> <&'a isize as Add> and 48 others For more information about this error, try `rustc --explain E0277`. This is similar but different to -Z treat-err-as-bug: it will print the locations for all errors emitted it does not require a compiler built with debug symbols you don't have to read through a big stack trace.","breadcrumbs":"Debugging the compiler » Getting the error creation location","id":"255","title":"Getting the error creation location"},"256":{"body":"The compiler uses the tracing crate for logging. For details see the guide section on tracing","breadcrumbs":"Debugging the compiler » Getting logging output","id":"256","title":"Getting logging output"},"257":{"body":"The cargo-bisect-rustc tool can be used as a quick and easy way to find exactly which PR caused a change in rustc behavior. It automatically downloads rustc PR artifacts and tests them against a project you provide until it finds the regression. You can then look at the PR to get more context on why it was changed. See this tutorial on how to use it.","breadcrumbs":"Debugging the compiler » Narrowing (Bisecting) Regressions","id":"257","title":"Narrowing (Bisecting) Regressions"},"258":{"body":"The rustup-toolchain-install-master tool by kennytm can be used to download the artifacts produced by Rust's CI for a specific SHA1 -- this basically corresponds to the successful landing of some PR -- and then sets them up for your local use. This also works for artifacts produced by @bors try. This is helpful when you want to examine the resulting build of a PR without doing the build yourself.","breadcrumbs":"Debugging the compiler » Downloading Artifacts from Rust's CI","id":"258","title":"Downloading Artifacts from Rust's CI"},"259":{"body":"The compiler defines a whole lot of internal (perma-unstable) attributes some of which are useful for debugging by dumping extra compiler-internal information. These are prefixed with rustc_ and are gated behind the internal feature rustc_attrs (enabled via e.g. #![feature(rustc_attrs)]). For a complete and up to date list, see builtin_attrs . More specifically, the ones marked TEST. Here are some notable ones: Attribute Description rustc_def_path Dumps the def_path_str of an item. rustc_dump_def_parents Dumps the chain of DefId parents of certain definitions. rustc_dump_item_bounds Dumps the item_bounds of an item. rustc_dump_predicates Dumps the predicates_of an item. rustc_dump_vtable Dumps the vtable layout of an impl, or a type alias of a dyn type. rustc_hidden_type_of_opaques Dumps the hidden type of each opaque types in the crate. rustc_layout See this section . rustc_object_lifetime_default Dumps the object lifetime defaults of an item. rustc_outlives Dumps implied bounds of an item. More precisely, the inferred_outlives_of an item. rustc_regions Dumps NLL closure region requirements. rustc_symbol_name Dumps the mangled & demangled symbol_name of an item. rustc_variances Dumps the variances of an item. Right below you can find elaborate explainers on a selected few.","breadcrumbs":"Debugging the compiler » #[rustc_*] TEST attributes","id":"259","title":"#[rustc_*] TEST attributes"},"26":{"body":"The x.py command can be run directly on most Unix systems in the following format: ./x [flags] This is how the documentation and examples assume you are running x.py. Some alternative ways are: # On a Unix shell if you don't have the necessary `python3` command\n./x [flags] # In Windows Powershell (if powershell is configured to run scripts)\n./x [flags]\n./x.ps1 [flags] # On the Windows Command Prompt (if .py files are configured to run Python)\nx.py [flags] # You can also run Python yourself, e.g.:\npython x.py [flags] On Windows, the Powershell commands may give you an error that looks like this: PS C:\\Users\\vboxuser\\rust> ./x\n./x : File C:\\Users\\vboxuser\\rust\\x.ps1 cannot be loaded because running scripts is disabled on this system. For more\ninformation, see about_Execution_Policies at https:/go.microsoft.com/fwlink/?LinkID=135170.\nAt line:1 char:1\n+ ./x\n+ ~~~ + CategoryInfo : SecurityError: (:) [], PSSecurityException + FullyQualifiedErrorId : UnauthorizedAccess You can avoid this error by allowing powershell to run local scripts: Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser Running x.py slightly more conveniently There is a binary that wraps x.py called x in src/tools/x. All it does is run x.py, but it can be installed system-wide and run from any subdirectory of a checkout. It also looks up the appropriate version of python to use. You can install it with cargo install --path src/tools/x. To clarify that this is another global installed binary util, which is similar to the one declared in section What is x.py , but it works as an independent process to execute the x.py rather than calling the shell to run the platform related scripts.","breadcrumbs":"How to build and run the compiler » Running x.py","id":"26","title":"Running x.py"},"260":{"body":"Some compiler options for debugging specific features yield graphviz graphs - e.g. the #[rustc_mir(borrowck_graphviz_postflow=\"suffix.dot\")] attribute on a function dumps various borrow-checker dataflow graphs in conjunction with -Zdump-mir-dataflow. These all produce .dot files. To view these files, install graphviz (e.g. apt-get install graphviz) and then run the following commands: $ dot -T pdf maybe_init_suffix.dot > maybe_init_suffix.pdf\n$ firefox maybe_init_suffix.pdf # Or your favorite pdf viewer","breadcrumbs":"Debugging the compiler » Formatting Graphviz output (.dot files)","id":"260","title":"Formatting Graphviz output (.dot files)"},"261":{"body":"The internal attribute #[rustc_layout] can be used to dump the Layout of the type it is attached to. For example: #![feature(rustc_attrs)] #[rustc_layout(debug)]\ntype T<'a> = &'a u32; Will emit the following: error: layout_of(&'a u32) = Layout { fields: Primitive, variants: Single { index: 0, }, abi: Scalar( Scalar { value: Pointer, valid_range: 1..=18446744073709551615, }, ), largest_niche: Some( Niche { offset: Size { raw: 0, }, scalar: Scalar { value: Pointer, valid_range: 1..=18446744073709551615, }, }, ), align: AbiAndPrefAlign { abi: Align { pow2: 3, }, pref: Align { pow2: 3, }, }, size: Size { raw: 8, },\n} --> src/lib.rs:4:1 |\n4 | type T<'a> = &'a u32; | ^^^^^^^^^^^^^^^^^^^^^ error: aborting due to previous error","breadcrumbs":"Debugging the compiler » Debugging type layouts","id":"261","title":"Debugging type layouts"},"262":{"body":"If you are using VSCode, and have edited your bootstrap.toml to request debugging level 1 or 2 for the parts of the code you're interested in, then you should be able to use the CodeLLDB extension in VSCode to debug it. Here is a sample launch.json file, being used to run a stage 1 compiler direct from the directory where it is built (does not have to be \"installed\"): // .vscode/launch.json\n{ \"version\": \"0.2.0\", \"configurations\": [ { \"type\": \"lldb\", \"request\": \"launch\", \"name\": \"Launch\", \"args\": [], // array of string command-line arguments to pass to compiler \"program\": \"${workspaceFolder}/build/host/stage1/bin/rustc\", \"windows\": { // applicable if using windows \"program\": \"${workspaceFolder}/build/host/stage1/bin/rustc.exe\" }, \"cwd\": \"${workspaceFolder}\", // current working directory at program start \"stopOnEntry\": false, \"sourceLanguages\": [\"rust\"] } ] }","breadcrumbs":"Debugging the compiler » Configuring CodeLLDB for debugging rustc","id":"262","title":"Configuring CodeLLDB for debugging rustc"},"263":{"body":"Function level filters I don't want everything I don't want all calls Query level filters Broad module level filters Log colors How to keep or remove debug! and trace! calls from the resulting binary Logging etiquette and conventions The compiler has a lot of debug! (or trace!) calls, which print out logging information at many points. These are very useful to at least narrow down the location of a bug if not to find it entirely, or just to orient yourself as to why the compiler is doing a particular thing. To see the logs, you need to set the RUSTC_LOG environment variable to your log filter. The full syntax of the log filters can be found in the rustdoc of tracing-subscriber .","breadcrumbs":"Debugging the compiler » Using the tracing/logging instrumentation » Using tracing to debug the compiler","id":"263","title":"Using tracing to debug the compiler"},"264":{"body":"Lots of functions in rustc are annotated with #[instrument(level = \"debug\", skip(self))]\nfn foo(&self, bar: Type) {} which allows you to use RUSTC_LOG=[foo] to do the following all at once log all function calls to foo log the arguments (except for those in the skip list) log everything (from anywhere else in the compiler) until the function returns","breadcrumbs":"Debugging the compiler » Using the tracing/logging instrumentation » Function level filters","id":"264","title":"Function level filters"},"265":{"body":"Depending on the scope of the function, you may not want to log everything in its body. As an example: the do_mir_borrowck function will dump hundreds of lines even for trivial code being borrowchecked. Since you can combine all filters, you can add a crate/module path, e.g. RUSTC_LOG=rustc_borrowck[do_mir_borrowck]","breadcrumbs":"Debugging the compiler » Using the tracing/logging instrumentation » I don't want everything","id":"265","title":"I don't want everything"},"266":{"body":"If you are compiling libcore, you likely don't want all borrowck dumps, but only one for a specific function. You can filter function calls by their arguments by regexing them. RUSTC_LOG=[do_mir_borrowck{id=\\.\\*from_utf8_unchecked\\.\\*}] will only give you the logs of borrowchecking from_utf8_unchecked. Note that you will still get a short message per ignored do_mir_borrowck, but none of the things inside those calls. This helps you in looking through the calls that are happening and helps you adjust your regex if you mistyped it.","breadcrumbs":"Debugging the compiler » Using the tracing/logging instrumentation » I don't want all calls","id":"266","title":"I don't want all calls"},"267":{"body":"Every query is automatically tagged with a logging span so that you can display all log messages during the execution of the query. For example, if you want to log everything during type checking: RUSTC_LOG=[typeck] The query arguments are included as a tracing field which means that you can filter on the debug display of the arguments. For example, the typeck query has an argument key: LocalDefId of what is being checked. You can use a regex to match on that LocalDefId to log type checking for a specific function: RUSTC_LOG=[typeck{key=.*name_of_item.*}] Different queries have different arguments. You can find a list of queries and their arguments in rustc_middle/src/query/mod.rs .","breadcrumbs":"Debugging the compiler » Using the tracing/logging instrumentation » Query level filters","id":"267","title":"Query level filters"},"268":{"body":"You can also use filters similar to the log crate's filters, which will enable everything within a specific module. This is often too verbose and too unstructured, so it is recommended to use function level filters. Your log filter can be just debug to get all debug! output and higher (e.g., it will also include info!), or path::to::module to get all output (which will include trace!) from a particular module, or path::to::module=debug to get debug! output and higher from a particular module. For example, to get the debug! output and higher for a specific module, you can run the compiler with RUSTC_LOG=path::to::module=debug rustc my-file.rs. All debug! output will then appear in standard error. Note that you can use a partial path and the filter will still work. For example, if you want to see info! output from only rustdoc::passes::collect_intra_doc_links, you could use RUSTDOC_LOG=rustdoc::passes::collect_intra_doc_links=info or you could use RUSTDOC_LOG=rustdoc::passes::collect_intra=info. If you are developing rustdoc, use RUSTDOC_LOG instead. If you are developing Miri, use MIRI_LOG instead. You get the idea :) See the tracing crate's docs, and specifically the docs for debug! to see the full syntax you can use. (Note: unlike the compiler, the tracing crate and its examples use the RUST_LOG environment variable. rustc, rustdoc, and other tools set custom environment variables.) Note that unless you use a very strict filter, the logger will emit a lot of output, so use the most specific module(s) you can (comma-separated if multiple) . It's typically a good idea to pipe standard error to a file and look at the log output with a text editor. So, to put it together: # This puts the output of all debug calls in `rustc_middle/src/traits` into\n# standard error, which might fill your console backscroll.\n$ RUSTC_LOG=rustc_middle::traits=debug rustc +stage1 my-file.rs # This puts the output of all debug calls in `rustc_middle/src/traits` in\n# `traits-log`, so you can then see it with a text editor.\n$ RUSTC_LOG=rustc_middle::traits=debug rustc +stage1 my-file.rs 2>traits-log # Not recommended! This will show the output of all `debug!` calls\n# in the Rust compiler, and there are a *lot* of them, so it will be\n# hard to find anything.\n$ RUSTC_LOG=debug rustc +stage1 my-file.rs 2>all-log # This will show the output of all `info!` calls in `rustc_codegen_ssa`.\n#\n# There's an `info!` statement in `codegen_instance` that outputs\n# every function that is codegen'd. This is useful to find out\n# which function triggers an LLVM assertion, and this is an `info!`\n# log rather than a `debug!` log so it will work on the official\n# compilers.\n$ RUSTC_LOG=rustc_codegen_ssa=info rustc +stage1 my-file.rs # This will show all logs in `rustc_codegen_ssa` and `rustc_resolve`.\n$ RUSTC_LOG=rustc_codegen_ssa,rustc_resolve rustc +stage1 my-file.rs # This will show the output of all `info!` calls made by rustdoc\n# or any rustc library it calls.\n$ RUSTDOC_LOG=info rustdoc +stage1 my-file.rs # This will only show `debug!` calls made by rustdoc directly,\n# not any `rustc*` crate.\n$ RUSTDOC_LOG=rustdoc=debug rustdoc +stage1 my-file.rs","breadcrumbs":"Debugging the compiler » Using the tracing/logging instrumentation » Broad module level filters","id":"268","title":"Broad module level filters"},"269":{"body":"By default, rustc (and other tools, like rustdoc and Miri) will be smart about when to use ANSI colors in the log output. If they are outputting to a terminal, they will use colors, and if they are outputting to a file or being piped somewhere else, they will not. However, it's hard to read log output in your terminal unless you have a very strict filter, so you may want to pipe the output to a pager like less. But then there won't be any colors, which makes it hard to pick out what you're looking for! You can override whether to have colors in log output with the RUSTC_LOG_COLOR environment variable (or RUSTDOC_LOG_COLOR for rustdoc, or MIRI_LOG_COLOR for Miri, etc.). There are three options: auto (the default), always, and never. So, if you want to enable colors when piping to less, use something similar to this command: # The `-R` switch tells less to print ANSI colors without escaping them.\n$ RUSTC_LOG=debug RUSTC_LOG_COLOR=always rustc +stage1 ... | less -R Note that MIRI_LOG_COLOR will only color logs that come from Miri, not logs from rustc functions that Miri calls. Use RUSTC_LOG_COLOR to color logs from rustc.","breadcrumbs":"Debugging the compiler » Using the tracing/logging instrumentation » Log colors","id":"269","title":"Log colors"},"27":{"body":"To start, run ./x setup and select the compiler defaults. This will do some initialization and create a bootstrap.toml for you with reasonable defaults. If you use a different default (which you'll likely want to do if you want to contribute to an area of rust other than the compiler, such as rustdoc), make sure to read information about that default (located in src/bootstrap/defaults) as the build process may be different for other defaults. Alternatively, you can write bootstrap.toml by hand. See bootstrap.example.toml for all the available settings and explanations of them. See src/bootstrap/defaults for common settings to change. If you have already built rustc and you change settings related to LLVM, then you may have to execute rm -rf build for subsequent configuration changes to take effect. Note that ./x clean will not cause a rebuild of LLVM.","breadcrumbs":"How to build and run the compiler » Create a bootstrap.toml","id":"27","title":"Create a bootstrap.toml"},"270":{"body":"While calls to error!, warn! and info! are included in every build of the compiler, calls to debug! and trace! are only included in the program if debug-logging=true is turned on in bootstrap.toml (it is turned off by default), so if you don't see DEBUG logs, especially if you run the compiler with RUSTC_LOG=rustc rustc some.rs and only see INFO logs, make sure that debug-logging=true is turned on in your bootstrap.toml.","breadcrumbs":"Debugging the compiler » Using the tracing/logging instrumentation » How to keep or remove debug! and trace! calls from the resulting binary","id":"270","title":"How to keep or remove debug! and trace! calls from the resulting binary"},"271":{"body":"Because calls to debug! are removed by default, in most cases, don't worry about the performance of adding \"unnecessary\" calls to debug! and leaving them in code you commit - they won't slow down the performance of what we ship. That said, there can also be excessive tracing calls, especially when they are redundant with other calls nearby or in functions called from here. There is no perfect balance to hit here, and is left to the reviewer's discretion to decide whether to let you leave debug! statements in or whether to ask you to remove them before merging. It may be preferable to use trace! over debug! for very noisy logs. A loosely followed convention is to use #[instrument(level = \"debug\")] ( also see the attribute's documentation ) in favour of debug!(\"foo(...)\") at the start of a function foo. Within functions, prefer debug!(?variable.field) over debug!(\"xyz = {:?}\", variable.field) and debug!(bar = ?var.method(arg)) over debug!(\"bar = {:?}\", var.method(arg)). The documentation for this syntax can be found here . One thing to be careful of is expensive operations in logs. If in the module rustc::foo you have a statement debug!(x = ?random_operation(tcx)); Then if someone runs a debug rustc with RUSTC_LOG=rustc::foo, then random_operation() will run. RUSTC_LOG filters that do not enable this debug statement will not execute random_operation. This means that you should not put anything too expensive or likely to crash there - that would annoy anyone who wants to use logging for that module. No-one will know it until someone tries to use logging to find another bug.","breadcrumbs":"Debugging the compiler » Using the tracing/logging instrumentation » Logging etiquette and conventions","id":"271","title":"Logging etiquette and conventions"},"272":{"body":"This section talks about how to profile the compiler and find out where it spends its time. Depending on what you're trying to measure, there are several different approaches: If you want to see if a PR improves or regresses compiler performance, see the rustc-perf chapter for requesting a benchmarking run. If you want a medium-to-high level overview of where rustc is spending its time: The -Z self-profile flag and measureme tools offer a query-based approach to profiling. See their docs for more information. If you want function level performance data or even just more details than the above approaches: Consider using a native code profiler such as perf or tracy for a nanosecond-precision, full-featured graphical interface. If you want a nice visual representation of the compile times of your crate graph, you can use cargo's --timings flag , e.g. cargo build --timings. You can use this flag on the compiler itself with CARGOFLAGS=\"--timings\" ./x build If you want to profile memory usage, you can use various tools depending on what operating system you are using. For Windows, read our WPA guide .","breadcrumbs":"Profiling the compiler » Profiling the compiler","id":"272","title":"Profiling the compiler"},"273":{"body":"Using cargo-llvm-lines you can count the number of lines of LLVM IR across all instantiations of a generic function. Since most of the time compiling rustc is spent in LLVM, the idea is that by reducing the amount of code passed to LLVM, compiling rustc gets faster. To use cargo-llvm-lines together with somewhat custom rustc build process, you can use -C save-temps to obtain required LLVM IR. The option preserves temporary work products created during compilation. Among those is LLVM IR that represents an input to the optimization pipeline; ideal for our purposes. It is stored in files with *.no-opt.bc extension in LLVM bitcode format. Example usage: cargo install cargo-llvm-lines\n# On a normal crate you could now run `cargo llvm-lines`, but `x` isn't normal :P # Do a clean before every run, to not mix in the results from previous runs.\n./x clean\nenv RUSTFLAGS=-Csave-temps ./x build --stage 0 compiler/rustc # Single crate, e.g., rustc_middle. (Relies on the glob support of your shell.)\n# Convert unoptimized LLVM bitcode into a human readable LLVM assembly accepted by cargo-llvm-lines.\nfor f in build/x86_64-unknown-linux-gnu/stage0-rustc/x86_64-unknown-linux-gnu/release/deps/rustc_middle-*.no-opt.bc; do ./build/x86_64-unknown-linux-gnu/llvm/bin/llvm-dis \"$f\"\ndone\ncargo llvm-lines --files ./build/x86_64-unknown-linux-gnu/stage0-rustc/x86_64-unknown-linux-gnu/release/deps/rustc_middle-*.ll > llvm-lines-middle.txt # Specify all crates of the compiler.\nfor f in build/x86_64-unknown-linux-gnu/stage0-rustc/x86_64-unknown-linux-gnu/release/deps/*.no-opt.bc; do ./build/x86_64-unknown-linux-gnu/llvm/bin/llvm-dis \"$f\"\ndone\ncargo llvm-lines --files ./build/x86_64-unknown-linux-gnu/stage0-rustc/x86_64-unknown-linux-gnu/release/deps/*.ll > llvm-lines.txt Example output for the compiler: Lines Copies Function name ----- ------ ------------- 45207720 (100%) 1583774 (100%) (TOTAL) 2102350 (4.7%) 146650 (9.3%) core::ptr::drop_in_place 615080 (1.4%) 8392 (0.5%) std::thread::local::LocalKey::try_with 594296 (1.3%) 1780 (0.1%) hashbrown::raw::RawTable::rehash_in_place 592071 (1.3%) 9691 (0.6%) core::option::Option::map 528172 (1.2%) 5741 (0.4%) core::alloc::layout::Layout::array 466854 (1.0%) 8863 (0.6%) core::ptr::swap_nonoverlapping_one 412736 (0.9%) 1780 (0.1%) hashbrown::raw::RawTable::resize 367776 (0.8%) 2554 (0.2%) alloc::raw_vec::RawVec::grow_amortized 367507 (0.8%) 643 (0.0%) rustc_query_system::dep_graph::graph::DepGraph::with_task_impl 355882 (0.8%) 6332 (0.4%) alloc::alloc::box_free 354556 (0.8%) 14213 (0.9%) core::ptr::write 354361 (0.8%) 3590 (0.2%) core::iter::traits::iterator::Iterator::fold 347761 (0.8%) 3873 (0.2%) rustc_middle::ty::context::tls::set_tlv 337534 (0.7%) 2377 (0.2%) alloc::raw_vec::RawVec::allocate_in 331690 (0.7%) 3192 (0.2%) hashbrown::raw::RawTable::find 328756 (0.7%) 3978 (0.3%) rustc_middle::ty::context::tls::with_context_opt 326903 (0.7%) 642 (0.0%) rustc_query_system::query::plumbing::try_execute_query Since this doesn't seem to work with incremental compilation or ./x check, you will be compiling rustc a lot . I recommend changing a few settings in bootstrap.toml to make it bearable: [rust]\n# A debug build takes _a third_ as long on my machine,\n# but compiling more than stage0 rustc becomes unbearably slow.\noptimize = false # We can't use incremental anyway, so we disable it for a little speed boost.\nincremental = false\n# We won't be running it, so no point in compiling debug checks.\ndebug = false # Using a single codegen unit gives less output, but is slower to compile.\ncodegen-units = 0 # num_cpus The llvm-lines output is affected by several options. optimize = false increases it from 2.1GB to 3.5GB and codegen-units = 0 to 4.1GB. MIR optimizations have little impact. Compared to the default RUSTFLAGS=\"-Z mir-opt-level=1\", level 0 adds 0.3GB and level 2 removes 0.2GB. As of July 2022, inlining happens in LLVM and GCC codegen backends, missing only in the Cranelift one.","breadcrumbs":"Profiling the compiler » Optimizing rustc's bootstrap times with cargo-llvm-lines","id":"273","title":"Optimizing rustc's bootstrap times with cargo-llvm-lines"},"274":{"body":"This is a guide for how to profile rustc with perf .","breadcrumbs":"Profiling the compiler » with the linux perf tool » Profiling with perf","id":"274","title":"Profiling with perf"},"275":{"body":"Get a clean checkout of rust-lang/master, or whatever it is you want to profile. Set the following settings in your bootstrap.toml: debuginfo-level = 1 - enables line debuginfo jemalloc = false - lets you do memory use profiling with valgrind leave everything else the defaults Run ./x build to get a full build Make a rustup toolchain pointing to that result see the \"build and run\" section for instructions","breadcrumbs":"Profiling the compiler » with the linux perf tool » Initial steps","id":"275","title":"Initial steps"},"276":{"body":"perf is an excellent tool on linux that can be used to gather and analyze all kinds of information. Mostly it is used to figure out where a program spends its time. It can also be used for other sorts of events, though, like cache misses and so forth.","breadcrumbs":"Profiling the compiler » with the linux perf tool » Gathering a perf profile","id":"276","title":"Gathering a perf profile"},"277":{"body":"The basic perf command is this: perf record -F99 --call-graph dwarf XXX The -F99 tells perf to sample at 99 Hz, which avoids generating too much data for longer runs (why 99 Hz you ask? It is often chosen because it is unlikely to be in lockstep with other periodic activity). The --call-graph dwarf tells perf to get call-graph information from debuginfo, which is accurate. The XXX is the command you want to profile. So, for example, you might do: perf record -F99 --call-graph dwarf cargo + rustc to run cargo -- here should be the name of the toolchain you made in the beginning. But there are some things to be aware of: You probably don't want to profile the time spend building dependencies. So something like cargo build; cargo clean -p $C may be helpful (where $C is the crate name) Though usually I just do touch src/lib.rs and rebuild instead. =) You probably don't want incremental messing about with your profile. So something like CARGO_INCREMENTAL=0 can be helpful. In case to avoid the issue of addr2line xxx/elf: could not read first record when reading collected data from cargo, you may need use the latest version of addr2line: cargo install addr2line --features=\"bin\"","breadcrumbs":"Profiling the compiler » with the linux perf tool » The basics","id":"277","title":"The basics"},"278":{"body":"Often we want to analyze a specific test from perf.rust-lang.org. The easiest way to do that is to use the rustc-perf benchmarking suite, this approach is described here . Instead of using the benchmark suite CLI, you can also profile the benchmarks manually. First, you need to clone the rustc-perf repository: $ git clone https://github.com/rust-lang/rustc-perf and then find the source code of the test that you want to profile. Sources for the tests are found in the collector/compile-benchmarks directory and the collector/runtime-benchmarks directory . So let's go into the directory of a specific test; we'll use clap-rs as an example: cd collector/compile-benchmarks/clap-3.1.6 In this case, let's say we want to profile the cargo check performance. In that case, I would first run some basic commands to build the dependencies: # Setup: first clean out any old results and build the dependencies:\ncargo + clean\nCARGO_INCREMENTAL=0 cargo + check (Again, should be replaced with the name of the toolchain we made in the first step.) Next: we want record the execution time for just the clap-rs crate, running cargo check. I tend to use cargo rustc for this, since it also allows me to add explicit flags, which we'll do later on. touch src/lib.rs\nCARGO_INCREMENTAL=0 perf record -F99 --call-graph dwarf cargo rustc --profile check --lib Note that final command: it's a doozy! It uses the cargo rustc command, which executes rustc with (potentially) additional options; the --profile check and --lib options specify that we are doing a cargo check execution, and that this is a library (not a binary). At this point, we can use perf tooling to analyze the results. For example: perf report will open up an interactive TUI program. In simple cases, that can be helpful. For more detailed examination, the perf-focus tool can be helpful; it is covered below. A note of caution. Each of the rustc-perf tests is its own special snowflake. In particular, some of them are not libraries, in which case you would want to do touch src/main.rs and avoid passing --lib. I'm not sure how best to tell which test is which to be honest.","breadcrumbs":"Profiling the compiler » with the linux perf tool » Gathering a perf profile from a perf.rust-lang.org test","id":"278","title":"Gathering a perf profile from a perf.rust-lang.org test"},"279":{"body":"If you want to profile an NLL run, you can just pass extra options to the cargo rustc command, like so: touch src/lib.rs\nCARGO_INCREMENTAL=0 perf record -F99 --call-graph dwarf cargo rustc --profile check --lib -- -Z borrowck=mir","breadcrumbs":"Profiling the compiler » with the linux perf tool » Gathering NLL data","id":"279","title":"Gathering NLL data"},"28":{"body":"Here are the basic invocations of the x commands most commonly used when working on rustc, std, rustdoc, and other tools. Command When to use it ./x check Quick check to see if most things compile; rust-analyzer can run this automatically for you ./x build Builds rustc, std, and rustdoc ./x test Runs all tests ./x fmt Formats all code As written, these commands are reasonable starting points. However, there are additional options and arguments for each of them that are worth learning for serious development work. In particular, ./x build and ./x test provide many ways to compile or test a subset of the code, which can save a lot of time. Also, note that x supports all kinds of path suffixes for compiler, library, and src/tools directories. So, you can simply run x test tidy instead of x test src/tools/tidy. Or, x build std instead of x build library/std. See the chapters on testing and rustdoc for more details.","breadcrumbs":"How to build and run the compiler » Common x commands","id":"28","title":"Common x commands"},"280":{"body":"Once you've gathered a perf profile, we want to get some information about it. For this, I personally use perf focus . It's a kind of simple but useful tool that lets you answer queries like: \"how much time was spent in function F\" (no matter where it was called from) \"how much time was spent in function F when it was called from G\" \"how much time was spent in function F excluding time spent in G\" \"what functions does F call and how much time does it spend in them\" To understand how it works, you have to know just a bit about perf. Basically, perf works by sampling your process on a regular basis (or whenever some event occurs). For each sample, perf gathers a backtrace. perf focus lets you write a regular expression that tests which functions appear in that backtrace, and then tells you which percentage of samples had a backtrace that met the regular expression. It's probably easiest to explain by walking through how I would analyze NLL performance.","breadcrumbs":"Profiling the compiler » with the linux perf tool » Analyzing a perf profile with perf focus","id":"280","title":"Analyzing a perf profile with perf focus"},"281":{"body":"You can install perf-focus using cargo install: cargo install perf-focus","breadcrumbs":"Profiling the compiler » with the linux perf tool » Installing perf-focus","id":"281","title":"Installing perf-focus"},"282":{"body":"Let's say we've gathered the NLL data for a test. We'd like to know how much time it is spending in the MIR borrow-checker. The \"main\" function of the MIR borrowck is called do_mir_borrowck, so we can do this command: $ perf focus '{do_mir_borrowck}'\nMatcher : {do_mir_borrowck}\nMatches : 228\nNot Matches: 542\nPercentage : 29% The '{do_mir_borrowck}' argument is called the matcher . It specifies the test to be applied on the backtrace. In this case, the {X} indicates that there must be some function on the backtrace that meets the regular expression X. In this case, that regex is just the name of the function we want (in fact, it's a subset of the name; the full name includes a bunch of other stuff, like the module path). In this mode, perf-focus just prints out the percentage of samples where do_mir_borrowck was on the stack: in this case, 29%. A note about c++filt. To get the data from perf, perf focus currently executes perf script (perhaps there is a better way...). I've sometimes found that perf script outputs C++ mangled names. This is annoying. You can tell by running perf script | head yourself — if you see names like 5rustc6middle instead of rustc::middle, then you have the same problem. You can solve this by doing: perf script | c++filt | perf focus --from-stdin ... This will pipe the output from perf script through c++filt and should mostly convert those names into a more friendly format. The --from-stdin flag to perf focus tells it to get its data from stdin, rather than executing perf focus. We should make this more convenient (at worst, maybe add a c++filt option to perf focus, or just always use it — it's pretty harmless).","breadcrumbs":"Profiling the compiler » with the linux perf tool » Example: How much time is spent in MIR borrowck?","id":"282","title":"Example: How much time is spent in MIR borrowck?"},"283":{"body":"Perhaps we'd like to know how much time MIR borrowck spends in the trait checker. We can ask this using a more complex regex: $ perf focus '{do_mir_borrowck}..{^rustc::traits}'\nMatcher : {do_mir_borrowck},..{^rustc::traits}\nMatches : 12\nNot Matches: 1311\nPercentage : 0% Here we used the .. operator to ask \"how often do we have do_mir_borrowck on the stack and then, later, some function whose name begins with rustc::traits?\" (basically, code in that module). It turns out the answer is \"almost never\" — only 12 samples fit that description (if you ever see no samples, that often indicates your query is messed up). If you're curious, you can find out exactly which samples by using the --print-match option. This will print out the full backtrace for each sample. The | at the front of the line indicates the part that the regular expression matched.","breadcrumbs":"Profiling the compiler » with the linux perf tool » Example: How much time does MIR borrowck spend solving traits?","id":"283","title":"Example: How much time does MIR borrowck spend solving traits?"},"284":{"body":"Often we want to do more \"explorational\" queries. Like, we know that MIR borrowck is 29% of the time, but where does that time get spent? For that, the --tree-callees option is often the best tool. You usually also want to give --tree-min-percent or --tree-max-depth. The result looks like this: $ perf focus '{do_mir_borrowck}' --tree-callees --tree-min-percent 3\nMatcher : {do_mir_borrowck}\nMatches : 577\nNot Matches: 746\nPercentage : 43% Tree\n| matched `{do_mir_borrowck}` (43% total, 0% self)\n: | rustc_borrowck::nll::compute_regions (20% total, 0% self)\n: : | rustc_borrowck::nll::type_check::type_check_internal (13% total, 0% self)\n: : : | core::ops::function::FnOnce::call_once (5% total, 0% self)\n: : : : | rustc_borrowck::nll::type_check::liveness::generate (5% total, 3% self)\n: : : | as rustc::mir::visit::Visitor<'tcx>>::visit_mir (3% total, 0% self)\n: | rustc::mir::visit::Visitor::visit_mir (8% total, 6% self)\n: | as rustc_mir_dataflow::DataflowResultsConsumer<'cx, 'tcx>>::visit_statement_entry (5% total, 0% self)\n: | rustc_mir_dataflow::do_dataflow (3% total, 0% self) What happens with --tree-callees is that we find each sample matching the regular expression we look at the code that occurs after the regex match and try to build up a call tree The --tree-min-percent 3 option says \"only show me things that take more than 3% of the time\". Without this, the tree often gets really noisy and includes random stuff like the innards of malloc. --tree-max-depth can be useful too, it just limits how many levels we print. For each line, we display the percent of time in that function altogether (\"total\") and the percent of time spent in just that function and not some callee of that function (self). Usually \"total\" is the more interesting number, but not always.","breadcrumbs":"Profiling the compiler » with the linux perf tool » Example: Where does MIR borrowck spend its time?","id":"284","title":"Example: Where does MIR borrowck spend its time?"},"285":{"body":"By default, all in perf-focus are relative to the total program execution . This is useful to help you keep perspective — often as we drill down to find hot spots, we can lose sight of the fact that, in terms of overall program execution, this \"hot spot\" is actually not important. It also ensures that percentages between different queries are easily compared against one another. That said, sometimes it's useful to get relative percentages, so perf focus offers a --relative option. In this case, the percentages are listed only for samples that match (vs all samples). So for example we could get our percentages relative to the borrowck itself like so: $ perf focus '{do_mir_borrowck}' --tree-callees --relative --tree-max-depth 1 --tree-min-percent 5\nMatcher : {do_mir_borrowck}\nMatches : 577\nNot Matches: 746\nPercentage : 100% Tree\n| matched `{do_mir_borrowck}` (100% total, 0% self)\n: | rustc_borrowck::nll::compute_regions (47% total, 0% self) [...]\n: | rustc::mir::visit::Visitor::visit_mir (19% total, 15% self) [...]\n: | as rustc_mir_dataflow::DataflowResultsConsumer<'cx, 'tcx>>::visit_statement_entry (13% total, 0% self) [...]\n: | rustc_mir_dataflow::do_dataflow (8% total, 1% self) [...] Here you see that compute_regions came up as \"47% total\" — that means that 47% of do_mir_borrowck is spent in that function. Before, we saw 20% — that's because do_mir_borrowck itself is only 43% of the total time (and .47 * .43 = .20).","breadcrumbs":"Profiling the compiler » with the linux perf tool » Relative percentages","id":"285","title":"Relative percentages"},"286":{"body":"","breadcrumbs":"Profiling the compiler » with Windows Performance Analyzer » Profiling on Windows","id":"286","title":"Profiling on Windows"},"287":{"body":"High-level performance analysis (including memory usage) can be performed with the Windows Performance Recorder (WPR) and Windows Performance Analyzer (WPA). As the names suggest, WPR is for recording system statistics (in the form of event trace log a.k.a. ETL files), while WPA is for analyzing these ETL files. WPR collects system wide statistics, so it won't just record things relevant to rustc but also everything else that's running on the machine. During analysis, we can filter to just the things we find interesting. These tools are quite powerful but also require a bit of learning before we can successfully profile the Rust compiler. Here we will explore how to use WPR and WPA for analyzing the Rust compiler as well as provide links to useful \"profiles\" (i.e., settings files that tweak the defaults for WPR and WPA) that are specifically designed to make analyzing rustc easier.","breadcrumbs":"Profiling the compiler » with Windows Performance Analyzer » Introducing WPR and WPA","id":"287","title":"Introducing WPR and WPA"},"288":{"body":"You can install WPR and WPA as part of the Windows Performance Toolkit which itself is an option as part of downloading the Windows Assessment and Deployment Kit (ADK). You can download the ADK installer here . Make sure to select the Windows Performance Toolkit (you don't need to select anything else).","breadcrumbs":"Profiling the compiler » with Windows Performance Analyzer » Installing WPR and WPA","id":"288","title":"Installing WPR and WPA"},"289":{"body":"In order to perform system analysis, you'll first need to record your system with WPR. Open WPR and at the bottom of the window select the \"profiles\" of the things you want to record. For looking into memory usage of the rustc bootstrap process, we'll want to select the following items: CPU usage VirtualAlloc usage You might be tempted to record \"Heap usage\" as well, but this records every single heap allocation and can be very, very expensive. For high-level analysis, it might be best to leave that turned off. Now we need to get our setup ready to record. For memory usage analysis, it is best to record the stage 2 compiler build with a stage 1 compiler build with debug symbols. Having symbols in the compiler we're using to build rustc will aid our analysis greatly by allowing WPA to resolve Rust symbols correctly. Unfortunately, the stage 0 compiler does not have symbols turned on which is why we'll need to build a stage 1 compiler and then a stage 2 compiler ourselves. To do this, make sure you have set debuginfo-level = 1 in your bootstrap.toml file. This tells rustc to generate debug information which includes stack frames when bootstrapping. Now you can build the stage 1 compiler: x build --stage 1 -i library or however else you want to build the stage 1 compiler. Now that the stage 1 compiler is built, we can record the stage 2 build. Go back to WPR, click the \"start\" button and build the stage 2 compiler (e.g., x build --stage=2 -i library). When this process finishes, stop the recording. Click the Save button and once that process is complete, click the \"Open in WPA\" button which appears. Note: The trace file is fairly large so it can take WPA some time to finish opening the file.","breadcrumbs":"Profiling the compiler » with Windows Performance Analyzer » Recording","id":"289","title":"Recording"},"29":{"body":"Note that building will require a relatively large amount of storage space. You may want to have upwards of 10 or 15 gigabytes available to build the compiler. Once you've created a bootstrap.toml, you are now ready to run x. There are a lot of options here, but let's start with what is probably the best \"go to\" command for building a local compiler: ./x build library This may look like it only builds the standard library, but that is not the case. What this command does is the following: Build rustc using the stage0 compiler This produces the stage1 compiler Build std using the stage1 compiler This final product (stage1 compiler + libs built using that compiler) is what you need to build other Rust programs (unless you use #![no_std] or #![no_core]). You will probably find that building the stage1 std is a bottleneck for you, but fear not, there is a (hacky) workaround... see the section on avoiding rebuilds for std . Sometimes you don't need a full build. When doing some kind of \"type-based refactoring\", like renaming a method, or changing the signature of some function, you can use ./x check instead for a much faster build. Note that this whole command just gives you a subset of the full rustc build. The full rustc build (what you get with ./x build --stage 2 compiler/rustc) has quite a few more steps: Build rustc with the stage1 compiler. The resulting compiler here is called the \"stage2\" compiler, which uses stage1 std from the previous command. Build librustdoc and a bunch of other things with the stage2 compiler. You almost never need to do this.","breadcrumbs":"How to build and run the compiler » Building the compiler","id":"29","title":"Building the compiler"},"290":{"body":"Now that our ETL file is open in WPA, we can analyze the results. First, we'll want to apply the pre-made \"profile\" which will put WPA into a state conducive to analyzing rustc bootstrap. Download the profile here . Select the \"Profiles\" menu at the top, then \"apply\" and then choose the downloaded profile. You should see something resembling the following: WPA with profile applied Next, we will need to tell WPA to load and process debug symbols so that it can properly demangle the Rust stack traces. To do this, click \"Trace\" and then choose \"Load Symbols\". This step can take a while. Once WPA has loaded symbols for rustc, we can expand the rustc.exe node and begin drilling down into the stack with the largest allocations. To do that, we'll expand the [Root] node in the \"Commit Stack\" column and continue expanding until we find interesting stack frames. Tip: After selecting the node you want to expand, press the right arrow key. This will expand the node and put the selection on the next largest node in the expanded set. You can continue pressing the right arrow key until you reach an interesting frame. WPA with expanded stack In this sample, you can see calls through codegen are allocating ~30gb of memory in total throughout this profile.","breadcrumbs":"Profiling the compiler » with Windows Performance Analyzer » Analysis","id":"290","title":"Analysis"},"291":{"body":"The profile also includes a few other tabs which can be helpful: System Configuration General information about the system the capture was recorded on. rustc Build Processes A flat list of relevant processes such as rustc.exe, cargo.exe, link.exe etc. Each process lists its command line arguments. Useful for figuring out what a specific rustc process was working on. rustc Build Process Tree Timeline showing when processes started and exited. rustc CPU Analysis Contains charts preconfigured to show hotspots in rustc. These charts are designed to support analyzing where rustc is spending its time. rustc Memory Analysis Contains charts preconfigured to show where rustc is allocating memory.","breadcrumbs":"Profiling the compiler » with Windows Performance Analyzer » Other Analysis Tabs","id":"291","title":"Other Analysis Tabs"},"292":{"body":"The Rust benchmark suite provides a comprehensive way of profiling and benchmarking the Rust compiler. You can find instructions on how to use the suite in its manual . However, using the suite manually can be a bit cumbersome. To make this easier for rustc contributors, the compiler build system (bootstrap) also provides built-in integration with the benchmarking suite, which will download and build the suite for you, build a local compiler toolchain and let you profile it using a simplified command-line interface. You can use the ./x perf [options] command to use this integration. You can use normal bootstrap flags for this command, such as --stage 1 or --stage 2, for example to modify the stage of the created sysroot. It might also be useful to configure bootstrap.toml to better support profiling, e.g. set rust.debuginfo-level = 1 to add source line information to the built compiler. x perf currently supports the following commands: benchmark : Benchmark the compiler and store the results under the passed id. compare : Compare the benchmark results of two compilers with the two passed ids. eprintln: Just run the compiler and capture its stderr output. Note that the compiler normally does not print anything to stderr, you might want to add some eprintln! calls to get any output. samply: Profile the compiler using the samply sampling profiler. cachegrind: Use Cachegrind to generate a detailed simulated trace of the compiler's execution. You can find a more detailed description of the profilers in the rustc-perf manual . You can use the following options for the x perf command, which mirror the corresponding options of the profile_local and bench_local commands that you can use in the suite: --include: Select benchmarks which should be profiled/benchmarked. --profiles: Select profiles (Check, Debug, Opt, Doc) which should be profiled/benchmarked. --scenarios: Select scenarios (Full, IncrFull, IncrPatched, IncrUnchanged) which should be profiled/benchmarked.","breadcrumbs":"Profiling the compiler » with the Rust benchmark suite » Profiling with rustc-perf","id":"292","title":"Profiling with rustc-perf"},"293":{"body":"The Rust compiler supports building with some dependencies from crates.io. Examples are log and env_logger. In general, you should avoid adding dependencies to the compiler for several reasons: The dependency may not be of high quality or well-maintained. The dependency may not be using a compatible license. The dependency may have transitive dependencies that have one of the above problems. Note that there is no official policy for vetting new dependencies to the compiler. Decisions are made on a case-by-case basis, during code review.","breadcrumbs":"crates.io dependencies » crates.io dependencies","id":"293","title":"crates.io dependencies"},"294":{"body":"The tidy tool has a list of crates that are allowed . To add a dependency that is not already in the compiler, you will need to add it to the list.","breadcrumbs":"crates.io dependencies » Permitted dependencies","id":"294","title":"Permitted dependencies"},"295":{"body":"Bug reports Bug fixes or \"normal\" code changes New features Breaking changes Major changes Performance Pull requests Keeping your branch up-to-date r? Waiting for reviews CI r+ Opening a PR Reverting a PR External dependencies Writing documentation Contributing to rustc-dev-guide Issue triage Rfcbot labels Helpful links and information","breadcrumbs":"Contribution procedures » Contribution procedures","id":"295","title":"Contribution procedures"},"296":{"body":"While bugs are unfortunate, they're a reality in software. We can't fix what we don't know about, so please report liberally. If you're not sure if something is a bug or not, feel free to file a bug anyway. If you believe reporting your bug publicly represents a security risk to Rust users, please follow our instructions for reporting security vulnerabilities . If you're using the nightly channel, please check if the bug exists in the latest toolchain before filing your bug. It might be fixed already. If you have the chance, before reporting a bug, please search existing issues , as it's possible that someone else has already reported your error. This doesn't always work, and sometimes it's hard to know what to search for, so consider this extra credit. We won't mind if you accidentally file a duplicate report. Similarly, to help others who encountered the bug find your issue, consider filing an issue with a descriptive title, which contains information that might be unique to it. This can be the language or compiler feature used, the conditions that trigger the bug, or part of the error message if there is any. An example could be: \"impossible case reached\" on lifetime inference for impl Trait in return position . Opening an issue is as easy as following this link and filling out the fields in the appropriate provided template.","breadcrumbs":"Contribution procedures » Bug reports","id":"296","title":"Bug reports"},"297":{"body":"For most PRs, no special procedures are needed. You can just open a PR , and it will be reviewed, approved, and merged. This includes most bug fixes, refactorings, and other user-invisible changes. The next few sections talk about exceptions to this rule. Also, note that it is perfectly acceptable to open WIP PRs or GitHub Draft PRs . Some people prefer to do this so they can get feedback along the way or share their code with a collaborator. Others do this so they can utilize the CI to build and test their PR (e.g. when developing on a slow machine).","breadcrumbs":"Contribution procedures » Bug fixes or \"normal\" code changes","id":"297","title":"Bug fixes or \"normal\" code changes"},"298":{"body":"Rust has strong backwards-compatibility guarantees. Thus, new features can't just be implemented directly in stable Rust. Instead, we have 3 release channels: stable, beta, and nightly. Stable : this is the latest stable release for general usage. Beta : this is the next release (will be stable within 6 weeks). Nightly : follows the master branch of the repo. This is the only channel where unstable, incomplete, or experimental features are usable with feature gates. See this chapter on implementing new features for more information.","breadcrumbs":"Contribution procedures » New features","id":"298","title":"New features"},"299":{"body":"Breaking changes have a dedicated section in the dev-guide.","breadcrumbs":"Contribution procedures » Breaking changes","id":"299","title":"Breaking changes"},"3":{"body":"We do ask that you be mindful to include as much useful information as you can in your question, but we recognize this can be hard if you are unfamiliar with contributing to Rust. Just pinging someone without providing any context can be a bit annoying and just create noise, so we ask that you be mindful of the fact that the t-compiler folks get a lot of pings in a day.","breadcrumbs":"Getting Started » Etiquette","id":"3","title":"Etiquette"},"30":{"body":"If you are working on the standard library, you probably don't need to build every other default component. Instead, you can build a specific component by providing its name, like this: ./x build --stage 1 library If you choose the library profile when running x setup, you can omit --stage 1 (it's the default).","breadcrumbs":"How to build and run the compiler » Build specific components","id":"30","title":"Build specific components"},"300":{"body":"The compiler team has a special process for large changes, whether or not they cause breakage. This process is called a Major Change Proposal (MCP). MCP is a relatively lightweight mechanism for getting feedback on large changes to the compiler (as opposed to a full RFC or a design meeting with the team). Example of things that might require MCPs include major refactorings, changes to important types, or important changes to how the compiler does something, or smaller user-facing changes. When in doubt, ask on zulip . It would be a shame to put a lot of work into a PR that ends up not getting merged! See this document for more info on MCPs.","breadcrumbs":"Contribution procedures » Major changes","id":"300","title":"Major changes"},"301":{"body":"Compiler performance is important. We have put a lot of effort over the last few years into gradually improving it . If you suspect that your change may cause a performance regression (or improvement), you can request a \"perf run\" (and your reviewer may also request one before approving). This is yet another bot that will compile a collection of benchmarks on a compiler with your changes. The numbers are reported here , and you can see a comparison of your changes against the latest master. For an introduction to the performance of Rust code in general which would also be useful in rustc development, see The Rust Performance Book .","breadcrumbs":"Contribution procedures » Performance","id":"301","title":"Performance"},"302":{"body":"Pull requests (or PRs for short) are the primary mechanism we use to change Rust. GitHub itself has some great documentation on using the Pull Request feature. We use the \"fork and pull\" model described here , where contributors push changes to their personal fork and create pull requests to bring those changes into the source repository. We have more info about how to use git when contributing to Rust under the git section . Advice for potentially large, complex, cross-cutting and/or very domain-specific changes The compiler reviewers on rotation usually each have areas of the compiler that they know well, but also have areas that they are not very familiar with. If your PR contains changes that are large, complex, cross-cutting and/or highly domain-specific, it becomes very difficult to find a suitable reviewer who is comfortable in reviewing all of the changes in such a PR. This is also true if the changes are not only compiler-specific but also contains changes which fall under the purview of reviewers from other teams, like the standard library team. There's a bot which notifies the relevant teams and pings people who have setup specific alerts based on the files modified. Before making such changes, you are strongly encouraged to discuss your proposed changes with the compiler team beforehand (and with other teams that the changes would require approval from), and work with the compiler team to see if we can help you break down a large potentially unreviewable PR into a series of smaller more individually reviewable PRs . You can communicate with the compiler team by creating a #t-compiler thread on zulip to discuss your proposed changes. Communicating with the compiler team beforehand helps in several ways: It increases the likelihood of your PRs being reviewed in a timely manner. We can help you identify suitable reviewers before you open actual PRs, or help find advisors and liaisons to help you navigate the change procedures, or help with running try-jobs, perf runs and crater runs as suitable. It helps the compiler team track your changes. The compiler team can perform vibe checks on your changes early and often, to see if the direction of the changes align with what the compiler team prefers to see. Helps to avoid situations where you may have invested significant time and effort into large changes that the compiler team might not be willing to accept, or finding out very late that the changes are in a direction that the compiler team disagrees with.","breadcrumbs":"Contribution procedures » Pull requests","id":"302","title":"Pull requests"},"303":{"body":"The CI in rust-lang/rust applies your patches directly against the current master, not against the commit your branch is based on. This can lead to unexpected failures if your branch is outdated, even when there are no explicit merge conflicts. Before submitting or updating a PR, make sure to update your branch as mentioned here if it's significantly behind the master branch (e.g., more than 100 commits behind). This fetches the latest master branch and rebases your changes on top of it, ensuring your PR is tested against the latest code. After rebasing, it's recommended to run the relevant tests locally to catch any issues before CI runs.","breadcrumbs":"Contribution procedures » Keeping your branch up-to-date","id":"303","title":"Keeping your branch up-to-date"},"304":{"body":"All pull requests are reviewed by another person. We have a bot, @rustbot , that will automatically assign a random person to review your request based on which files you changed. If you want to request that a specific person reviews your pull request, you can add an r? to the pull request description or in a comment. For example, if you want to ask a review to @awesome-reviewer, add r? @awesome-reviewer to the end of the pull request description, and @rustbot will assign them instead of a random person. This is entirely optional. You can also assign a random reviewer from a specific team by writing r? rust-lang/groupname. As an example, if you were making a diagnostics change, then you could get a reviewer from the diagnostics team by adding: r? rust-lang/diagnostics For a full list of possible groupnames, check the adhoc_groups section at the triagebot.toml config file , or the list of teams in the rust-lang teams database .","breadcrumbs":"Contribution procedures » r?","id":"304","title":"r?"},"305":{"body":"NOTE Pull request reviewers are often working at capacity, and many of them are contributing on a volunteer basis. In order to minimize review delays, pull request authors and assigned reviewers should ensure that the review label (S-waiting-on-review and S-waiting-on-author) stays updated, invoking these commands when appropriate: @rustbot author: the review is finished, and PR author should check the comments and take action accordingly. @rustbot review: the author is ready for a review, and this PR will be queued again in the reviewer's queue. Please note that the reviewers are humans, who for the most part work on rustc in their free time. This means that they can take some time to respond and review your PR. It also means that reviewers can miss some PRs that are assigned to them. To try to move PRs forward, the Triage WG regularly goes through all PRs that are waiting for review and haven't been discussed for at least 2 weeks. If you don't get a review within 2 weeks, feel free to ask the Triage WG on Zulip ( #t-release/triage ). They have knowledge of when to ping, who might be on vacation, etc. The reviewer may request some changes using the GitHub code review interface. They may also request special procedures for some PRs. See Crater and Breaking Changes chapters for some examples of such procedures.","breadcrumbs":"Contribution procedures » Waiting for reviews","id":"305","title":"Waiting for reviews"},"306":{"body":"In addition to being reviewed by a human, pull requests are automatically tested, thanks to continuous integration (CI). Basically, every time you open and update a pull request, CI builds the compiler and tests it against the compiler test suite , and also performs other tests such as checking that your pull request is in compliance with Rust's style guidelines. Running continuous integration tests allows PR authors to catch mistakes early without going through a first review cycle, and also helps reviewers stay aware of the status of a particular pull request. Rust has plenty of CI capacity, and you should never have to worry about wasting computational resources each time you push a change. It is also perfectly fine (and even encouraged!) to use the CI to test your changes if it can help your productivity. In particular, we don't recommend running the full ./x test suite locally, since it takes a very long time to execute.","breadcrumbs":"Contribution procedures » CI","id":"306","title":"CI"},"307":{"body":"After someone has reviewed your pull request, they will leave an annotation on the pull request with an r+. It will look something like this: @bors r+ This tells @bors , our lovable integration bot, that your pull request has been approved. The PR then enters the merge queue , where @bors will run all the tests on every platform we support. If it all works out, @bors will merge your code into master and close the pull request. Depending on the scale of the change, you may see a slightly different form of r+: @bors r+ rollup The additional rollup tells @bors that this change should always be \"rolled up\". Changes that are rolled up are tested and merged alongside other PRs, to speed the process up. Typically only small changes that are expected not to conflict with one another are marked as \"always roll up\". Be patient; this can take a while and the queue can sometimes be long. PRs are never merged by hand.","breadcrumbs":"Contribution procedures » r+","id":"307","title":"r+"},"308":{"body":"You are now ready to file a pull request? Great! Here are a few points you should be aware of. All pull requests should be filed against the master branch, unless you know for sure that you should target a different branch. Make sure your pull request is in compliance with Rust's style guidelines by running $ ./x test tidy --bless We recommend to make this check before every pull request (and every new commit in a pull request); you can add git hooks before every push to make sure you never forget to make this check. The CI will also run tidy and will fail if tidy fails. Rust follows a no merge-commit policy , meaning, when you encounter merge conflicts you are expected to always rebase instead of merging. E.g. always use rebase when bringing the latest changes from the master branch to your feature branch. If your PR contains merge commits, it will get marked as has-merge-commits. Once you have removed the merge commits, e.g., through an interactive rebase, you should remove the label again: @rustbot label -has-merge-commits See this chapter for more details. If you encounter merge conflicts or when a reviewer asks you to perform some changes, your PR will get marked as S-waiting-on-author. When you resolve them, you should use @rustbot to mark it as S-waiting-on-review: @rustbot ready GitHub allows closing issues using keywords . This feature should be used to keep the issue tracker tidy. However, it is generally preferred to put the \"closes #123\" text in the PR description rather than the issue commit; particularly during rebasing, citing the issue number in the commit can \"spam\" the issue in question. However, if your PR fixes a stable-to-beta or stable-to-stable regression and has been accepted for a beta and/or stable backport (i.e., it is marked beta-accepted and/or stable-accepted), please do not use any such keywords since we don't want the corresponding issue to get auto-closed once the fix lands on master. Please update the PR description while still mentioning the issue somewhere. For example, you could write Fixes (after beta backport) #NNN.. As for further actions, please keep a sharp look-out for a PR whose title begins with [beta] or [stable] and which backports the PR in question. When that one gets merged, the relevant issue can be closed. The closing comment should mention all PRs that were involved. If you don't have the permissions to close the issue, please leave a comment on the original PR asking the reviewer to close it for you.","breadcrumbs":"Contribution procedures » Opening a PR","id":"308","title":"Opening a PR"},"309":{"body":"When a PR leads to miscompile, significant performance regressions, or other critical issues, we may want to revert that PR with a regression test case. You can also check out the revert policy on Forge docs (which is mainly targeted for reviewers, but contains useful info for PR authors too). If the PR contains huge changes, it can be challenging to revert, making it harder to review incremental fixes in subsequent updates. Or if certain code in that PR is heavily depended upon by subsequent PRs, reverting it can become difficult. In such cases, we can identify the problematic code and disable it for some input, as shown in #128271 . For MIR optimizations, we can also use the -Zunsound-mir-opt option to gate the mir-opt, as shown in #132356 .","breadcrumbs":"Contribution procedures » Reverting a PR","id":"309","title":"Reverting a PR"},"31":{"body":"Once you have successfully built rustc, you will have created a bunch of files in your build directory. In order to actually run the resulting rustc, we recommend creating rustup toolchains. The first one will run the stage1 compiler (which we built above). The second will execute the stage2 compiler (which we did not build, but which you will likely need to build at some point; for example, if you want to run the entire test suite). rustup toolchain link stage1 build/host/stage1\nrustup toolchain link stage2 build/host/stage2 Now you can run the rustc you built with. If you run with -vV, you should see a version number ending in -dev, indicating a build from your local environment: $ rustc +stage1 -vV\nrustc 1.48.0-dev\nbinary: rustc\ncommit-hash: unknown\ncommit-date: unknown\nhost: x86_64-unknown-linux-gnu\nrelease: 1.48.0-dev\nLLVM version: 11.0 The rustup toolchain points to the specified toolchain compiled in your build directory, so the rustup toolchain will be updated whenever x build or x test are run for that toolchain/stage. Note: the toolchain we've built does not include cargo. In this case, rustup will fall back to using cargo from the installed nightly, beta, or stable toolchain (in that order). If you need to use unstable cargo flags, be sure to run rustup install nightly if you haven't already. See the rustup documentation on custom toolchains . Note: rust-analyzer and IntelliJ Rust plugin use a component called rust-analyzer-proc-macro-srv to work with proc macros. If you intend to use a custom toolchain for a project (e.g. via rustup override set stage1) you may want to build this component: ./x build proc-macro-srv-cli","breadcrumbs":"How to build and run the compiler » Creating a rustup toolchain","id":"31","title":"Creating a rustup toolchain"},"310":{"body":"This section has moved to \"Using External Repositories\" .","breadcrumbs":"Contribution procedures » External dependencies","id":"310","title":"External dependencies"},"311":{"body":"Documentation improvements are very welcome. The source of doc.rust-lang.org is located in src/doc in the tree, and standard API documentation is generated from the source code itself (e.g. library/std/src/lib.rs ). Documentation pull requests function in the same way as other pull requests. To find documentation-related issues, use the A-docs label . You can find documentation style guidelines in RFC 1574 . To build the standard library documentation, use x doc --stage 0 library --open. To build the documentation for a book (e.g. the unstable book), use x doc src/doc/unstable-book. Results should appear in build/host/doc, as well as automatically open in your default browser. See Building Documentation for more information. You can also use rustdoc directly to check small fixes. For example, rustdoc src/doc/reference.md will render reference to doc/reference.html. The CSS might be messed up, but you can verify that the HTML is right.","breadcrumbs":"Contribution procedures » Writing documentation","id":"311","title":"Writing documentation"},"312":{"body":"Contributions to the rustc-dev-guide are always welcome, and can be made directly at the rust-lang/rustc-dev-guide repo . The issue tracker in that repo is also a great way to find things that need doing. There are issues for beginners and advanced compiler devs alike! Just a few things to keep in mind: Please try to avoid overly long lines and use semantic line breaks (where you break the line after each sentence). There is no strict limit on line lengths; let the sentence or part of the sentence flow to its proper end on the same line. When contributing text to the guide, please contextualize the information with some time period and/or a reason so that the reader knows how much to trust the information. Aim to provide a reasonable amount of context, possibly including but not limited to: A reason for why the data may be out of date other than \"change\", as change is a constant across the project. The date the comment was added, e.g. instead of writing \"Currently, ...\" or \"As of now, ...\" , consider adding the date, in one of the following formats: Jan 2021 January 2021 jan 2021 january 2021 There is a CI action (in .github/workflows/date-check.yml) that generates a monthly report showing those that are over 6 months old ( example ). For the action to pick the date, add a special annotation before specifying the date: Apr 2025 Example: As of Apr 2025, the foo did the bar. For cases where the date should not be part of the visible rendered output, use the following instead: A link to a relevant WG, tracking issue, rustc rustdoc page, or similar, that may provide further explanation for the change process or a way to verify that the information is not outdated. If a text grows rather long (more than a few page scrolls) or complicated (more than four subsections), it might benefit from having a Table of Contents at the beginning, which you can auto-generate by including the marker at the top.","breadcrumbs":"Contribution procedures » Contributing to rustc-dev-guide","id":"312","title":"Contributing to rustc-dev-guide"},"313":{"body":"Please see https://forge.rust-lang.org/release/issue-triaging.html .","breadcrumbs":"Contribution procedures » Issue triage","id":"313","title":"Issue triage"},"314":{"body":"rfcbot uses its own labels for tracking the process of coordinating asynchronous decisions, such as approving or rejecting a change. This is used for RFCs , issues, and pull requests. Labels Color Description proposed-final-comment-period Gray Currently awaiting signoff of all team members in order to enter the final comment period. disposition-merge Green Indicates the intent is to merge the change. disposition-close Red Indicates the intent is to not accept the change and close it. disposition-postpone Gray Indicates the intent is to not accept the change at this time and postpone it to a later date. final-comment-period Blue Currently soliciting final comments before merging or closing. finished-final-comment-period Light Yellow The final comment period has concluded, and the issue will be merged or closed. postponed Yellow The issue has been postponed. closed Red The issue has been rejected. to-announce Gray Issues that have finished their final-comment-period and should be publicly announced. Note: the rust-lang/rust repository uses this label differently, to announce issues at the triage meetings.","breadcrumbs":"Contribution procedures » Rfcbot labels","id":"314","title":"Rfcbot labels"},"315":{"body":"This section has moved to the \"About this guide\" chapter.","breadcrumbs":"Contribution procedures » Helpful links and information","id":"315","title":"Helpful links and information"},"316":{"body":"rustc is maintained by the Rust compiler team . The people who belong to this team collectively work to track regressions and implement new features. Members of the Rust compiler team are people who have made significant contributions to rustc and its design.","breadcrumbs":"About the compiler team » About the compiler team","id":"316","title":"About the compiler team"},"317":{"body":"Currently the compiler team chats in Zulip: Team chat occurs in the t-compiler stream on the Zulip instance There are also a number of other associated Zulip streams, such as t-compiler/help , where people can ask for help with rustc development, or t-compiler/meetings , where the team holds their weekly triage and steering meetings.","breadcrumbs":"About the compiler team » Discussion","id":"317","title":"Discussion"},"318":{"body":"If you're interested in figuring out who can answer questions about a particular part of the compiler, or you'd just like to know who works on what, check out triagebot.toml's assign section . It contains a listing of the various parts of the compiler and a list of people who are reviewers of each part.","breadcrumbs":"About the compiler team » Reviewers","id":"318","title":"Reviewers"},"319":{"body":"The compiler team has a weekly meeting where we do triage and try to generally stay on top of new bugs, regressions, and discuss important things in general. They are held on Zulip . It works roughly as follows: Announcements, MCPs/FCPs, and WG-check-ins: We share some announcements with the rest of the team about important things we want everyone to be aware of. We also share the status of MCPs and FCPs and we use the opportunity to have a couple of WGs giving us an update about their work. Check for beta and stable nominations: These are nominations of things to backport to beta and stable respectively. We then look for new cases where the compiler broke previously working code in the wild. Regressions are important issues to fix, so it's likely that they are tagged as P-critical or P-high; the major exception would be bug fixes (though even there we often aim to give warnings first ). Review P-critical and P-high bugs: P-critical and P-high bugs are those that are sufficiently important for us to actively track progress. P-critical and P-high bugs should ideally always have an assignee. Check S-waiting-on-team and I-nominated issues: These are issues where feedback from the team is desired. Look over the performance triage report: We check for PRs that made the performance worse and try to decide if it's worth reverting the performance regression or if the regression can be addressed in a future PR. The meeting currently takes place on Thursdays at 10am Boston time (UTC-4 typically, but daylight savings time sometimes makes things complicated).","breadcrumbs":"About the compiler team » Rust compiler meeting","id":"319","title":"Rust compiler meeting"},"32":{"body":"To produce a compiler that can cross-compile for other targets, pass any number of target flags to x build. For example, if your host platform is x86_64-unknown-linux-gnu and your cross-compilation target is wasm32-wasip1, you can build with: ./x build --target x86_64-unknown-linux-gnu,wasm32-wasip1 Note that if you want the resulting compiler to be able to build crates that involve proc macros or build scripts, you must be sure to explicitly build target support for the host platform (in this case, x86_64-unknown-linux-gnu). If you want to always build for other targets without needing to pass flags to x build, you can configure this in the [build] section of your bootstrap.toml like so: [build]\ntarget = [\"x86_64-unknown-linux-gnu\", \"wasm32-wasip1\"] Note that building for some targets requires having external dependencies installed (e.g. building musl targets requires a local copy of musl). Any target-specific configuration (e.g. the path to a local copy of musl) will need to be provided by your bootstrap.toml. Please see bootstrap.example.toml for information on target-specific configuration keys. For examples of the complete configuration necessary to build a target, please visit the rustc book , select any target under the \"Platform Support\" heading on the left, and see the section related to building a compiler for that target. For targets without a corresponding page in the rustc book, it may be useful to inspect the Dockerfiles that the Rust infrastructure itself uses to set up and configure cross-compilation. If you have followed the directions from the prior section on creating a rustup toolchain, then once you have built your compiler you will be able to use it to cross-compile like so: cargo +stage1 build --target wasm32-wasip1","breadcrumbs":"How to build and run the compiler » Building targets for cross-compilation","id":"32","title":"Building targets for cross-compilation"},"320":{"body":"Membership in the Rust team is typically offered when someone has been making significant contributions to the compiler for some time. Membership is both a recognition but also an obligation: compiler team members are generally expected to help with upkeep as well as doing reviews and other work. If you are interested in becoming a compiler team member, the first thing to do is to start fixing some bugs, or get involved in a working group. One good way to find bugs is to look for open issues tagged with E-easy or E-mentor . You can also dig through the graveyard of PRs that were closed due to inactivity , some of them may contain work that is still useful - refer to the associated issues, if any - and only needs some finishing touches for which the original author didn't have time.","breadcrumbs":"About the compiler team » Team membership","id":"320","title":"Team membership"},"321":{"body":"Once you have made a number of individual PRs to rustc, we will often offer r+ privileges. This means that you have the right to instruct \"bors\" (the robot that manages which PRs get landed into rustc) to merge a PR ( here are some instructions for how to talk to bors ). The guidelines for reviewers are as follows: You are always welcome to review any PR, regardless of who it is assigned to. However, do not r+ PRs unless: You are confident in that part of the code. You are confident that nobody else wants to review it first. For example, sometimes people will express a desire to review a PR before it lands, perhaps because it touches a particularly sensitive part of the code. Always be polite when reviewing: you are a representative of the Rust project, so it is expected that you will go above and beyond when it comes to the Code of Conduct .","breadcrumbs":"About the compiler team » r+ rights","id":"321","title":"r+ rights"},"322":{"body":"Once you have r+ rights, you can also be added to the reviewer rotation . triagebot is the bot that automatically assigns incoming PRs to reviewers. If you are added, you will be randomly selected to review PRs. If you find you are assigned a PR that you don't feel comfortable reviewing, you can also leave a comment like r? @so-and-so to assign to someone else — if you don't know who to request, just write r? @nikomatsakis for reassignment and @nikomatsakis will pick someone for you. Getting on the reviewer rotation is much appreciated as it lowers the review burden for all of us! However, if you don't have time to give people timely feedback on their PRs, it may be better that you don't get on the list.","breadcrumbs":"About the compiler team » Reviewer rotation","id":"322","title":"Reviewer rotation"},"323":{"body":"Full team membership is typically extended once someone made many contributions to the Rust compiler over time, ideally (but not necessarily) to multiple areas. Sometimes this might be implementing a new feature, but it is also important — perhaps more important! — to have time and willingness to help out with general upkeep such as bugfixes, tracking regressions, and other less glamorous work.","breadcrumbs":"About the compiler team » Full team membership","id":"323","title":"Full team membership"},"324":{"body":"Prerequisites Standard Process Troubleshooting git issues I made a merge commit by accident. I deleted my fork on GitHub! I changed a submodule by accident I see \"error: cannot rebase\" when I try to rebase I see 'Untracked Files: src/stdarch'? I see <<< HEAD? failed to push some refs Git is trying to rebase commits I didn't write? Quick note about submodules Rebasing and Conflicts Rebasing Keeping things up to date Advanced Rebasing Squash your commits git range-diff No-Merge Policy Tips for reviewing Hiding whitespace Fetching PRs Moving large sections of code range-diff Ignoring changes to specific files Git submodules Hard-resetting submodules Deinit git submodules Overcoming fatal: not a git repository: /../../.git/modules/ Ignoring commits during git blame The Rust project uses Git to manage its source code. In order to contribute, you'll need some familiarity with its features so that your changes can be incorporated into the compiler. The goal of this page is to cover some of the more common questions and problems new contributors face. Although some Git basics will be covered here, if you find that this is still a little too fast for you, it might make sense to first read some introductions to Git, such as the Beginner and Getting started sections of this tutorial from Atlassian . GitHub also provides documentation and guides for beginners, or you can consult the more in depth book from Git . This guide is incomplete. If you run into trouble with git that this page doesn't help with, please open an issue so we can document how to fix it.","breadcrumbs":"Using Git » Using Git","id":"324","title":"Using Git"},"325":{"body":"We'll assume that you've installed Git, forked rust-lang/rust , and cloned the forked repo to your PC. We'll use the command line interface to interact with Git; there are also a number of GUIs and IDE integrations that can generally do the same things. If you've cloned your fork, then you will be able to reference it with origin in your local repo. It may be helpful to also set up a remote for the official rust-lang/rust repo via git remote add upstream https://github.com/rust-lang/rust.git if you're using HTTPS, or git remote add upstream git@github.com:rust-lang/rust.git if you're using SSH. NOTE: This page is dedicated to workflows for rust-lang/rust, but will likely be useful when contributing to other repositories in the Rust project.","breadcrumbs":"Using Git » Prerequisites","id":"325","title":"Prerequisites"},"326":{"body":"Below is the normal procedure that you're likely to use for most minor changes and PRs: Ensure that you're making your changes on top of master: git checkout master. Get the latest changes from the Rust repo: git pull upstream master --ff-only. (see No-Merge Policy for more info about this). Make a new branch for your change: git checkout -b issue-12345-fix. Make some changes to the repo and test them. Stage your changes via git add src/changed/file.rs src/another/change.rs and then commit them with git commit. Of course, making intermediate commits may be a good idea as well. Avoid git add ., as it makes it too easy to unintentionally commit changes that should not be committed, such as submodule updates. You can use git status to check if there are any files you forgot to stage. Push your changes to your fork: git push --set-upstream origin issue-12345-fix (After adding commits, you can use git push and after rebasing or pulling-and-rebasing, you can use git push --force-with-lease). Open a PR from your fork to rust-lang/rust's master branch. If you end up needing to rebase and are hitting conflicts, see Rebasing . If you want to track upstream while working on long-running feature/issue, see Keeping things up to date . If your reviewer requests changes, the procedure for those changes looks much the same, with some steps skipped: Ensure that you're making changes to the most recent version of your code: git checkout issue-12345-fix. Make, stage, and commit your additional changes just like before. Push those changes to your fork: git push.","breadcrumbs":"Using Git » Standard Process","id":"326","title":"Standard Process"},"327":{"body":"You don't need to clone rust-lang/rust from scratch if it's out of date! Even if you think you've messed it up beyond repair, there are ways to fix the git state that don't require downloading the whole repository again. Here are some common issues you might run into:","breadcrumbs":"Using Git » Troubleshooting git issues","id":"327","title":"Troubleshooting git issues"},"328":{"body":"Git has two ways to update your branch with the newest changes: merging and rebasing. Rust uses rebasing . If you make a merge commit, it's not too hard to fix: git rebase -i upstream/master. See Rebasing for more about rebasing.","breadcrumbs":"Using Git » I made a merge commit by accident.","id":"328","title":"I made a merge commit by accident."},"329":{"body":"This is not a problem from git's perspective. If you run git remote -v, it will say something like this: $ git remote -v\norigin git@github.com:jyn514/rust.git (fetch)\norigin git@github.com:jyn514/rust.git (push)\nupstream https://github.com/rust-lang/rust (fetch)\nupstream https://github.com/rust-lang/rust (fetch) If you renamed your fork, you can change the URL like this: git remote set-url origin where the is your new fork.","breadcrumbs":"Using Git » I deleted my fork on GitHub!","id":"329","title":"I deleted my fork on GitHub!"},"33":{"body":"Here are a few other useful x commands. We'll cover some of them in detail in other sections: Building things: ./x build – builds everything using the stage 1 compiler, not just up to std ./x build --stage 2 – builds everything with the stage 2 compiler including rustdoc Running tests (see the section on running tests for more details): ./x test library/std – runs the unit tests and integration tests from std ./x test tests/ui – runs the ui test suite ./x test tests/ui/const-generics - runs all the tests in the const-generics/ subdirectory of the ui test suite ./x test tests/ui/const-generics/const-types.rs - runs the single test const-types.rs from the ui test suite","breadcrumbs":"How to build and run the compiler » Other x commands","id":"33","title":"Other x commands"},"330":{"body":"Usually people notice this when rustbot posts a comment on github that cargo has been modified: rustbot submodule comment You might also notice conflicts in the web UI: conflict in src/tools/cargo The most common cause is that you rebased after a change and ran git add . without first running x to update the submodules. Alternatively, you might have run cargo fmt instead of x fmt and modified files in a submodule, then committed the changes. To fix it, do the following things (if you changed a submodule other than cargo, replace src/tools/cargo with the path to that submodule): See which commit has the accidental changes: git log --stat -n1 src/tools/cargo Revert the changes to that commit: git checkout ~ src/tools/cargo. Type ~ literally but replace with the output from step 1. Tell git to commit the changes: git commit --fixup Repeat steps 1-3 for all the submodules you modified. If you modified the submodule in several different commits, you will need to repeat steps 1-3 for each commit you modified. You'll know when to stop when the git log command shows a commit that's not authored by you. Squash your changes into the existing commits: git rebase --autosquash -i upstream/master Push your changes .","breadcrumbs":"Using Git » I changed a submodule by accident","id":"330","title":"I changed a submodule by accident"},"331":{"body":"These are two common errors to see when rebasing: error: cannot rebase: Your index contains uncommitted changes.\nerror: Please commit or stash them. error: cannot rebase: You have unstaged changes.\nerror: Please commit or stash them. (See https://git-scm.com/book/en/v2/Getting-Started-What-is-Git%3F#_the_three_states for the difference between the two.) This means you have made changes since the last time you made a commit. To be able to rebase, either commit your changes, or make a temporary commit called a \"stash\" to have them still not be committed when you finish rebasing. You may want to configure git to make this \"stash\" automatically, which will prevent the \"cannot rebase\" error in nearly all cases: git config --global rebase.autostash true See https://git-scm.com/book/en/v2/Git-Tools-Stashing-and-Cleaning for more info about stashing.","breadcrumbs":"Using Git » I see \"error: cannot rebase\" when I try to rebase","id":"331","title":"I see \"error: cannot rebase\" when I try to rebase"},"332":{"body":"This is left over from the move to the library/ directory. Unfortunately, git rebase does not follow renames for submodules, so you have to delete the directory yourself: rm -r src/stdarch","breadcrumbs":"Using Git » I see 'Untracked Files: src/stdarch'?","id":"332","title":"I see 'Untracked Files: src/stdarch'?"},"333":{"body":"You were probably in the middle of a rebase or merge conflict. See Conflicts for how to fix the conflict. If you don't care about the changes and just want to get a clean copy of the repository back, you can use git reset: # WARNING: this throws out any local changes you've made! Consider resolving the conflicts instead.\ngit reset --hard master","breadcrumbs":"Using Git » I see <<< HEAD?","id":"333","title":"I see <<< HEAD?"},"334":{"body":"git push will not work properly and say something like this: ! [rejected] issue-xxxxx -> issue-xxxxx (non-fast-forward)\nerror: failed to push some refs to 'https://github.com/username/rust.git'\nhint: Updates were rejected because the tip of your current branch is behind\nhint: its remote counterpart. Integrate the remote changes (e.g.\nhint: 'git pull ...') before pushing again.\nhint: See the 'Note about fast-forwards' in 'git push --help' for details. The advice this gives is incorrect! Because of Rust's \"no-merge\" policy the merge commit created by git pull will not be allowed in the final PR, in addition to defeating the point of the rebase! Use git push --force-with-lease instead.","breadcrumbs":"Using Git » failed to push some refs","id":"334","title":"failed to push some refs"},"335":{"body":"If you see many commits in your rebase list, or merge commits, or commits by other people that you didn't write, it likely means you're trying to rebase over the wrong branch. For example, you may have a rust-lang/rust remote upstream, but ran git rebase origin/master instead of git rebase upstream/master. The fix is to abort the rebase and use the correct branch instead: git rebase --abort\ngit rebase -i upstream/master Click here to see an example of rebasing over the wrong branch Interactive rebase over the wrong branch","breadcrumbs":"Using Git » Git is trying to rebase commits I didn't write?","id":"335","title":"Git is trying to rebase commits I didn't write?"},"336":{"body":"When updating your local repository with git pull, you may notice that sometimes Git says you have modified some files that you have never edited. For example, running git status gives you something like (note the new commits mention): On branch master\nYour branch is up to date with 'origin/master'. Changes not staged for commit: (use \"git add ...\" to update what will be committed) (use \"git restore ...\" to discard changes in working directory) modified: src/llvm-project (new commits) modified: src/tools/cargo (new commits) no changes added to commit (use \"git add\" and/or \"git commit -a\") These changes are not changes to files: they are changes to submodules (more on this later ). To get rid of those: git submodule update Some submodules are not actually needed; for example, src/llvm-project doesn't need to be checked out if you're using download-ci-llvm. To avoid having to keep fetching its history, you can use git submodule deinit -f src/llvm-project, which will also avoid it showing as modified again.","breadcrumbs":"Using Git » Quick note about submodules","id":"336","title":"Quick note about submodules"},"337":{"body":"When you edit your code locally, you are making changes to the version of rust-lang/rust that existed when you created your feature branch. As such, when you submit your PR it is possible that some of the changes that have been made to rust-lang/rust since then are in conflict with the changes you've made. When this happens, you need to resolve the conflicts before your changes can be merged. To do that, you need to rebase your work on top of rust-lang/rust.","breadcrumbs":"Using Git » Rebasing and Conflicts","id":"337","title":"Rebasing and Conflicts"},"338":{"body":"To rebase your feature branch on top of the newest version of the master branch of rust-lang/rust, checkout your branch, and then run this command: git pull --rebase https://github.com/rust-lang/rust.git master If you are met with the following error: error: cannot pull with rebase: Your index contains uncommitted changes.\nerror: please commit or stash them. it means that you have some uncommitted work in your working tree. In that case, run git stash before rebasing, and then git stash pop after you have rebased and fixed all conflicts. When you rebase a branch on master, all the changes on your branch are reapplied to the most recent version of master. In other words, Git tries to pretend that the changes you made to the old version of master were instead made to the new version of master. During this process, you should expect to encounter at least one \"rebase conflict.\" This happens when Git's attempt to reapply the changes fails because your changes conflicted with other changes that have been made. You can tell that this happened because you'll see lines in the output that look like CONFLICT (content): Merge conflict in file.rs When you open these files, you'll see sections of the form <<<<<<< HEAD\nOriginal code\n=======\nYour code\n>>>>>>> 8fbf656... Commit fixes 12345 This represents the lines in the file that Git could not figure out how to rebase. The section between <<<<<<< HEAD and ======= has the code from master, while the other side has your version of the code. You'll need to decide how to deal with the conflict. You may want to keep your changes, keep the changes on master, or combine the two. Generally, resolving the conflict consists of two steps: First, fix the particular conflict. Edit the file to make the changes you want and remove the <<<<<<<, ======= and >>>>>>> lines in the process. Second, check the surrounding code. If there was a conflict, its likely there are some logical errors lying around too! It's a good idea to run x check here to make sure there are no glaring errors. Once you're all done fixing the conflicts, you need to stage the files that had conflicts in them via git add. Afterwards, run git rebase --continue to let Git know that you've resolved the conflicts and it should finish the rebase. Once the rebase has succeeded, you'll want to update the associated branch on your fork with git push --force-with-lease.","breadcrumbs":"Using Git » Rebasing","id":"338","title":"Rebasing"},"339":{"body":"The above section on Rebasing is a specific guide on rebasing work and dealing with merge conflicts. Here is some general advice about how to keep your local repo up-to-date with upstream changes: Using git pull upstream master while on your local master branch regularly will keep it up-to-date. You will also want to rebase your feature branches up-to-date as well. After pulling, you can checkout the feature branches and rebase them: git checkout master\ngit pull upstream master --ff-only # to make certain there are no merge commits\ngit rebase master feature_branch\ngit push --force-with-lease # (set origin to be the same as local) To avoid merges as per the No-Merge Policy , you may want to use git config pull.ff only (this will apply the config only to the local repo) to ensure that Git doesn't create merge commits when git pulling, without needing to pass --ff-only or --rebase every time. You can also git push --force-with-lease from master to double-check that your feature branches are in sync with their state on the Github side.","breadcrumbs":"Using Git » Keeping things up to date","id":"339","title":"Keeping things up to date"},"34":{"body":"Sometimes you need to start fresh, but this is normally not the case. If you need to run this then bootstrap is most likely not acting right and you should file a bug as to what is going wrong. If you do need to clean everything up then you only need to run one command! ./x clean rm -rf build works too, but then you have to rebuild LLVM, which can take a long time even on fast computers.","breadcrumbs":"How to build and run the compiler » Cleaning out build directories","id":"34","title":"Cleaning out build directories"},"340":{"body":"","breadcrumbs":"Using Git » Advanced Rebasing","id":"340","title":"Advanced Rebasing"},"341":{"body":"\"Squashing\" commits into each other causes them to be merged into a single commit. Both the upside and downside of this is that it simplifies the history. On the one hand, you lose track of the steps in which changes were made, but the history becomes easier to work with. If there are no conflicts and you are just squashing to clean up the history, use git rebase --interactive --keep-base master. This keeps the fork point of your PR the same, making it easier to review the diff of what happened across your rebases. Squashing can also be useful as part of conflict resolution. If your branch contains multiple consecutive rewrites of the same code, or if the rebase conflicts are extremely severe, you can use git rebase --interactive master to gain more control over the process. This allows you to choose to skip commits, edit the commits that you do not skip, change the order in which they are applied, or \"squash\" them into each other. Alternatively, you can sacrifice the commit history like this: # squash all the changes into one commit so you only have to worry about conflicts once\ngit rebase -i --keep-base master # and squash all changes along the way\ngit rebase master\n# fix all merge conflicts\ngit rebase --continue You also may want to squash just the last few commits together, possibly because they only represent \"fixups\" and not real changes. For example, git rebase --interactive HEAD~2 will allow you to edit the two commits only.","breadcrumbs":"Using Git » Squash your commits","id":"341","title":"Squash your commits"},"342":{"body":"After completing a rebase, and before pushing up your changes, you may want to review the changes between your old branch and your new one. You can do that with git range-diff master @{upstream} HEAD. The first argument to range-diff, master in this case, is the base revision that you're comparing your old and new branch against. The second argument is the old version of your branch; in this case, @upstream means the version that you've pushed to GitHub, which is the same as what people will see in your pull request. Finally, the third argument to range-diff is the new version of your branch; in this case, it is HEAD, which is the commit that is currently checked-out in your local repo. Note that you can also use the equivalent, abbreviated form git range-diff master @{u} HEAD. Unlike in regular Git diffs, you'll see a - or + next to another - or + in the range-diff output. The marker on the left indicates a change between the old branch and the new branch, and the marker on the right indicates a change you've committed. So, you can think of a range-diff as a \"diff of diffs\" since it shows you the differences between your old diff and your new diff. Here's an example of git range-diff output (taken from Git's docs ): -: ------- > 1: 0ddba11 Prepare for the inevitable!\n1: c0debee = 2: cab005e Add a helpful message at the start\n2: f00dbal ! 3: decafe1 Describe a bug @@ -1,3 +1,3 @@ Author: A U Thor -TODO: Describe a bug +Describe a bug @@ -324,5 +324,6 This is expected. -+What is unexpected is that it will also crash. ++Unexpectedly, it also crashes. This is a bug, and the jury is ++still out there how to fix it best. See ticket #314 for details. Contact\n3: bedead < -: ------- TO-UNDO (Note that git range-diff output in your terminal will probably be easier to read than in this example because it will have colors.) Another feature of git range-diff is that, unlike git diff, it will also diff commit messages. This feature can be useful when amending several commit messages so you can make sure you changed the right parts. git range-diff is a very useful command, but note that it can take some time to get used to its output format. You may also find Git's documentation on the command useful, especially their \"Examples\" section .","breadcrumbs":"Using Git » git range-diff","id":"342","title":"git range-diff"},"343":{"body":"The rust-lang/rust repo uses what is known as a \"rebase workflow.\" This means that merge commits in PRs are not accepted. As a result, if you are running git merge locally, chances are good that you should be rebasing instead. Of course, this is not always true; if your merge will just be a fast-forward, like the merges that git pull usually performs, then no merge commit is created and you have nothing to worry about. Running git config merge.ff only (this will apply the config to the local repo) once will ensure that all the merges you perform are of this type, so that you cannot make a mistake. There are a number of reasons for this decision and like all others, it is a tradeoff. The main advantage is the generally linear commit history. This greatly simplifies bisecting and makes the history and commit log much easier to follow and understand.","breadcrumbs":"Using Git » No-Merge Policy","id":"343","title":"No-Merge Policy"},"344":{"body":"NOTE : This section is for reviewing PRs, not authoring them.","breadcrumbs":"Using Git » Tips for reviewing","id":"344","title":"Tips for reviewing"},"345":{"body":"Github has a button for disabling whitespace changes that may be useful. You can also use git diff -w origin/master to view changes locally. hide whitespace","breadcrumbs":"Using Git » Hiding whitespace","id":"345","title":"Hiding whitespace"},"346":{"body":"To checkout PRs locally, you can use git fetch upstream pull/NNNNN/head && git checkout FETCH_HEAD. You can also use github's cli tool. Github shows a button on PRs where you can copy-paste the command to check it out locally. See https://cli.github.com/ for more info. gh suggestion","breadcrumbs":"Using Git » Fetching PRs","id":"346","title":"Fetching PRs"},"347":{"body":"Git and Github's default diff view for large moves within a file is quite poor; it will show each line as deleted and each line as added, forcing you to compare each line yourself. Git has an option to show moved lines in a different color: git log -p --color-moved=dimmed-zebra --color-moved-ws=allow-indentation-change See the docs for --color-moved for more info.","breadcrumbs":"Using Git » Moving large sections of code","id":"347","title":"Moving large sections of code"},"348":{"body":"See the relevant section for PR authors . This can be useful for comparing code that was force-pushed to make sure there are no unexpected changes.","breadcrumbs":"Using Git » range-diff","id":"348","title":"range-diff"},"349":{"body":"Many large files in the repo are autogenerated. To view a diff that ignores changes to those files, you can use the following syntax (e.g. Cargo.lock): git log -p ':!Cargo.lock' Arbitrary patterns are supported (e.g. :!compiler/*). Patterns use the same syntax as .gitignore, with : prepended to indicate a pattern.","breadcrumbs":"Using Git » Ignoring changes to specific files","id":"349","title":"Ignoring changes to specific files"},"35":{"body":"Building the compiler (especially if beyond stage 1) can require significant amounts of free disk space, possibly around 100GB. This is compounded if you have a separate build directory for rust-analyzer (e.g. build-rust-analyzer). This is easy to hit with dev-desktops which have a set disk quota for each user, but this also applies to local development as well. Occasionally, you may need to: Remove build/ directory. Remove build-rust-analyzer/ directory (if you have a separate rust-analyzer build directory). Uninstall unnecessary toolchains if you use cargo-bisect-rustc. You can check which toolchains are installed with rustup toolchain list. issue #1707","breadcrumbs":"How to build and run the compiler » Remarks on disk space","id":"35","title":"Remarks on disk space"},"350":{"body":"NOTE : submodules are a nice thing to know about, but it isn't an absolute prerequisite to contribute to rustc. If you are using Git for the first time, you might want to get used to the main concepts of Git before reading this section. The rust-lang/rust repository uses Git submodules as a way to use other Rust projects from within the rust repo. Examples include Rust's fork of llvm-project, cargo and libraries like stdarch and backtrace. Those projects are developed and maintained in an separate Git (and GitHub) repository, and they have their own Git history/commits, issue tracker and PRs. Submodules allow us to create some sort of embedded sub-repository inside the rust repository and use them like they were directories in the rust repository. Take llvm-project for example. llvm-project is maintained in the rust-lang/llvm-project repository, but it is used in rust-lang/rust by the compiler for code generation and optimization. We bring it in rust as a submodule, in the src/llvm-project folder. The contents of submodules are ignored by Git: submodules are in some sense isolated from the rest of the repository. However, if you try to cd src/llvm-project and then run git status: HEAD detached at 9567f08afc943\nnothing to commit, working tree clean As far as git is concerned, you are no longer in the rust repo, but in the llvm-project repo. You will notice that we are in \"detached HEAD\" state, i.e. not on a branch but on a particular commit. This is because, like any dependency, we want to be able to control which version to use. Submodules allow us to do just that: every submodule is \"pinned\" to a certain commit, which doesn't change unless modified manually. If you use git checkout in the llvm-project directory and go back to the rust directory, you can stage this change like any other, e.g. by running git add src/llvm-project. (Note that if you don't stage the change to commit, then you run the risk that running x will just undo your change by switching back to the previous commit when it automatically \"updates\" the submodules.) This version selection is usually done by the maintainers of the project, and looks like this . Git submodules take some time to get used to, so don't worry if it isn't perfectly clear yet. You will rarely have to use them directly and, again, you don't need to know everything about submodules to contribute to Rust. Just know that they exist and that they correspond to some sort of embedded subrepository dependency that Git can nicely and fairly conveniently handle for us.","breadcrumbs":"Using Git » Git submodules","id":"350","title":"Git submodules"},"351":{"body":"Sometimes you might run into (when you run git status) Changes not staged for commit: (use \"git add ...\" to update what will be committed) (use \"git restore ...\" to discard changes in working directory) (commit or discard the untracked or modified content in submodules) modified: src/llvm-project (new commits, modified content) and when you try to run git submodule update it breaks horribly with errors like error: RPC failed; curl 92 HTTP/2 stream 7 was not closed cleanly: CANCEL (err 8)\nerror: 2782 bytes of body are still expected\nfetch-pack: unexpected disconnect while reading sideband packet\nfatal: early EOF\nfatal: fetch-pack: invalid index-pack output\nfatal: Fetched in submodule path 'src/llvm-project', but it did not contain 5a5152f653959d14d68613a3a8a033fb65eec021. Direct fetching of that commit failed. If you see (new commits, modified content) you can run git submodule foreach git reset --hard and then try git submodule update again.","breadcrumbs":"Using Git » Hard-resetting submodules","id":"351","title":"Hard-resetting submodules"},"352":{"body":"If that doesn't work, you can try to deinit all git submodules... git submodule deinit -f --all Unfortunately sometimes your local git submodules configuration can become completely messed up for some reason.","breadcrumbs":"Using Git » Deinit git submodules","id":"352","title":"Deinit git submodules"},"353":{"body":"Sometimes, for some forsaken reason, you might run into fatal: not a git repository: src/gcc/../../.git/modules/src/gcc In this situation, for the given submodule path, i.e. = src/gcc in this example, you need to: rm -rf /.git rm -rf .git/modules//config rm -rf .gitconfig.lock if somehow the .gitconfig lock is orphaned. Then do something like ./x fmt to have bootstrap manage the submodule checkouts for you.","breadcrumbs":"Using Git » Overcoming fatal: not a git repository: /../../.git/modules/","id":"353","title":"Overcoming fatal: not a git repository: /../../.git/modules/"},"354":{"body":"Some commits contain large reformatting changes that don't otherwise change functionality. They can be instructed to be ignored by git blame through .git-blame-ignore-revs : Configure git blame to use .git-blame-ignore-revs as the list of commits to ignore: git config blame.ignorerevsfile .git-blame-ignore-revs Add suitable commits that you wish to be ignored by git blame. Please include a comment for the commit that you add to .git-blame-ignore-revs so people can easily figure out why a commit is ignored.","breadcrumbs":"Using Git » Ignoring commits during git blame","id":"354","title":"Ignoring commits during git blame"},"355":{"body":"@rustbot (also known as triagebot) is a utility robot that is mostly used to allow any contributor to achieve certain tasks that would normally require GitHub membership to the rust-lang organization. Its most interesting features for contributors to rustc are issue claiming and relabeling.","breadcrumbs":"Mastering @rustbot » Mastering @rustbot","id":"355","title":"Mastering @rustbot"},"356":{"body":"@rustbot exposes a command that allows anyone to assign an issue to themselves. If you see an issue you want to work on, you can send the following message as a comment on the issue at hand: @rustbot claim This will tell @rustbot to assign the issue to you if it has no assignee yet. Note that because of some GitHub restrictions, you may be assigned indirectly, i.e. @rustbot will assign itself as a placeholder and edit the top comment to reflect the fact that the issue is now assigned to you. If you want to unassign from an issue, @rustbot has a different command: @rustbot release-assignment","breadcrumbs":"Mastering @rustbot » Issue claiming","id":"356","title":"Issue claiming"},"357":{"body":"Changing labels for an issue or PR is also normally reserved for members of the organization. However, @rustbot allows you to relabel an issue yourself, only with a few restrictions. This is mostly useful in two cases: Helping with issue triage : Rust's issue tracker has more than 5,000 open issues at the time of this writing, so labels are the most powerful tool that we have to keep it as tidy as possible. You don't need to spend hours in the issue tracker to triage issues, but if you open an issue, you should feel free to label it if you are comfortable with doing it yourself. Updating the status of a PR : We use \"status labels\" to reflect the status of PRs. For example, if your PR has merge conflicts, it will automatically be assigned the S-waiting-on-author, and reviewers might not review it until you rebase your PR. Once you do rebase your branch, you should change the labels yourself to remove the S-waiting-on-author label and add back S-waiting-on-review. In this case, the @rustbot command will look like this: @rustbot label -S-waiting-on-author +S-waiting-on-review The syntax for this command is pretty loose, so there are other variants of this command invocation. There are also some shortcuts to update labels, for instance @rustbot ready will do the same thing with above command. For more details, see the docs page about labeling and shortcuts .","breadcrumbs":"Mastering @rustbot » Issue relabeling","id":"357","title":"Issue relabeling"},"358":{"body":"If you are interested in seeing what @rustbot is capable of, check out its documentation , which is meant as a reference for the bot and should be kept up to date every time the bot gets an upgrade. @rustbot is maintained by the Release team. If you have any feedback regarding existing commands or suggestions for new commands, feel free to reach out on Zulip or file an issue in the triagebot repository","breadcrumbs":"Mastering @rustbot » Other commands","id":"358","title":"Other commands"},"359":{"body":"Overview Pre-RFC and RFC Implementation Refining your implementation Stabilization There are a lot of ways to contribute to the Rust compiler, including fixing bugs, improving performance, helping design features, providing feedback on existing features, etc. This chapter does not claim to scratch the surface. Instead, it walks through the design and implementation of a new feature. Not all of the steps and processes described here are needed for every contribution, and I will try to point those out as they arise. In general, if you are interested in making a contribution and aren't sure where to start, please feel free to ask!","breadcrumbs":"Walkthrough: a typical contribution » Walkthrough: a typical contribution","id":"359","title":"Walkthrough: a typical contribution"},"36":{"body":"This is a quickstart guide about getting the compiler running. For more information on the individual steps, see the other pages in this chapter. First, clone the repository: git clone https://github.com/rust-lang/rust.git\ncd rust When building the compiler, we don't use cargo directly, instead we use a wrapper called \"x\". It is invoked with ./x. We need to create a configuration for the build. Use ./x setup to create a good default. ./x setup Then, we can build the compiler. Use ./x build to build the compiler, standard library and a few tools. You can also ./x check to just check it. All these commands can take specific components/paths as arguments, for example ./x check compiler to just check the compiler. ./x build When doing a change to the compiler that does not affect the way it compiles the standard library (so for example, a change to an error message), use --keep-stage-std 1 to avoid recompiling it. After building the compiler and standard library, you now have a working compiler toolchain. You can use it with rustup by linking it. rustup toolchain link stage1 build/host/stage1 Now you have a toolchain called stage1 linked to your build. You can use it to test the compiler. rustc +stage1 testfile.rs After doing a change, you can run the compiler test suite with ./x test. ./x test runs the full test suite, which is slow and rarely what you want. Usually, ./x test tests/ui is what you want after a compiler change, testing all UI tests that invoke the compiler on a specific test file and check the output. ./x test tests/ui Use --bless if you've made a change and want to update the .stderr files with the new output. ./x suggest can also be helpful for suggesting which tests to run after a change. Congrats, you are now ready to make a change to the compiler! If you have more questions, the full chapter might contain the answers, and if it doesn't, feel free to ask for help on Zulip . If you use VSCode, Vim, Emacs or Helix, ./x setup will ask you if you want to set up the editor config. For more information, check out suggested workflows .","breadcrumbs":"How to build and run the compiler » Quickstart » Quickstart","id":"36","title":"Quickstart"},"360":{"body":"The feature I will discuss in this chapter is the ? Kleene operator for macros. Basically, we want to be able to write something like this: macro_rules! foo { ($arg:ident $(, $optional_arg:ident)?) => { println!(\"{}\", $arg); $( println!(\"{}\", $optional_arg); )? }\n} fn main() { let x = 0; foo!(x); // ok! prints \"0\" foo!(x, x); // ok! prints \"0 0\"\n} So basically, the $(pat)? matcher in the macro means \"this pattern can occur 0 or 1 times\", similar to other regex syntaxes. There were a number of steps to go from an idea to stable Rust feature. Here is a quick list. We will go through each of these in order below. As I mentioned before, not all of these are needed for every type of contribution. Idea discussion/Pre-RFC A Pre-RFC is an early draft or design discussion of a feature. This stage is intended to flesh out the design space a bit and get a grasp on the different merits and problems with an idea. It's a great way to get early feedback on your idea before presenting it to the wider audience. You can find the original discussion here . RFC This is when you formally present your idea to the community for consideration. You can find the RFC here . Implementation Implement your idea unstably in the compiler. You can find the original implementation here . Possibly iterate/refine As the community gets experience with your feature on the nightly compiler and in std, there may be additional feedback about design choice that might be adjusted. This particular feature went through a number of iterations . Stabilization When your feature has baked enough, a Rust team member may propose to stabilize it . If there is consensus, this is done. Relax Your feature is now a stable Rust feature!","breadcrumbs":"Walkthrough: a typical contribution » Overview","id":"360","title":"Overview"},"361":{"body":"NOTE: In general, if you are not proposing a new feature or substantial change to Rust or the ecosystem, you don't need to follow the RFC process. Instead, you can just jump to implementation . You can find the official guidelines for when to open an RFC here . An RFC is a document that describes the feature or change you are proposing in detail. Anyone can write an RFC; the process is the same for everyone, including Rust team members. To open an RFC, open a PR on the rust-lang/rfcs repo on GitHub. You can find detailed instructions in the README . Before opening an RFC, you should do the research to \"flesh out\" your idea. Hastily-proposed RFCs tend not to be accepted. You should generally have a good description of the motivation, impact, disadvantages, and potential interactions with other features. If that sounds like a lot of work, it's because it is. But no fear! Even if you're not a compiler hacker, you can get great feedback by doing a pre-RFC . This is an informal discussion of the idea. The best place to do this is internals.rust-lang.org. Your post doesn't have to follow any particular structure. It doesn't even need to be a cohesive idea. Generally, you will get tons of feedback that you can integrate back to produce a good RFC. (Another pro-tip: try searching the RFCs repo and internals for prior related ideas. A lot of times an idea has already been considered and was either rejected or postponed to be tried again later. This can save you and everybody else some time) In the case of our example, a participant in the pre-RFC thread pointed out a syntax ambiguity and a potential resolution. Also, the overall feedback seemed positive. In this case, the discussion converged pretty quickly, but for some ideas, a lot more discussion can happen (e.g. see this RFC which received a whopping 684 comments!). If that happens, don't be discouraged; it means the community is interested in your idea, but it perhaps needs some adjustments. The RFC for our ? macro feature did receive some discussion on the RFC thread too. As with most RFCs, there were a few questions that we couldn't answer by discussion: we needed experience using the feature to decide. Such questions are listed in the \"Unresolved Questions\" section of the RFC. Also, over the course of the RFC discussion, you will probably want to update the RFC document itself to reflect the course of the discussion (e.g. new alternatives or prior work may be added or you may decide to change parts of the proposal itself). In the end, when the discussion seems to reach a consensus and die down a bit, a Rust team member may propose to move to \"final comment period\" (FCP) with one of three possible dispositions. This means that they want the other members of the appropriate teams to review and comment on the RFC. More discussion may ensue, which may result in more changes or unresolved questions being added. At some point, when everyone is satisfied, the RFC enters the FCP, which is the last chance for people to bring up objections. When the FCP is over, the disposition is adopted. Here are the three possible dispositions: Merge : accept the feature. Here is the proposal to merge for our ? macro feature . Close : this feature in its current form is not a good fit for rust. Don't be discouraged if this happens to your RFC, and don't take it personally. This is not a reflection on you, but rather a community decision that rust will go a different direction. Postpone : there is interest in going this direction but not at the moment. This happens most often because the appropriate Rust team doesn't have the bandwidth to shepherd the feature through the process to stabilization. Often this is the case when the feature doesn't fit into the team's roadmap. Postponed ideas may be revisited later. When an RFC is merged, the PR is merged into the RFCs repo. A new tracking issue is created in the rust-lang/rust repo to track progress on the feature and discuss unresolved questions, implementation progress and blockers, etc. Here is the tracking issue on for our ? macro feature .","breadcrumbs":"Walkthrough: a typical contribution » Pre-RFC and RFC","id":"361","title":"Pre-RFC and RFC"},"362":{"body":"To make a change to the compiler, open a PR against the rust-lang/rust repo. Depending on the feature/change/bug fix/improvement, implementation may be relatively-straightforward or it may be a major undertaking. You can always ask for help or mentorship from more experienced compiler devs. Also, you don't have to be the one to implement your feature; but keep in mind that if you don't, it might be a while before someone else does. For the ? macro feature, I needed to go understand the relevant parts of macro expansion in the compiler. Personally, I find that improving the comments in the code is a helpful way of making sure I understand it, but you don't have to do that if you don't want to. I then implemented the original feature, as described in the RFC. When a new feature is implemented, it goes behind a feature gate , which means that you have to use #![feature(my_feature_name)] to use the feature. The feature gate is removed when the feature is stabilized. Most bug fixes and improvements don't require a feature gate. You can just make your changes/improvements. When you open a PR on the rust-lang/rust , a bot will assign your PR to a reviewer. If there is a particular Rust team member you are working with, you can request that reviewer by leaving a comment on the thread with r? @reviewer-github-id (e.g. r? @eddyb). If you don't know who to request, don't request anyone; the bot will assign someone automatically based on which files you changed. The reviewer may request changes before they approve your PR, they may mark the PR with label \"S-waiting-on-author\" after leaving comments, this means that the PR is blocked on you to make some requested changes. When you finished iterating on the changes, you can mark the PR as S-waiting-on-review again by leaving a comment with @rustbot ready, this will remove the S-waiting-on-author label and add the S-waiting-on-review label. Feel free to ask questions or discuss things you don't understand or disagree with. However, recognize that the PR won't be merged unless someone on the Rust team approves it. If a reviewer leave a comment like r=me after fixing ..., that means they approve the PR and you can merge it with comment with @bors r=reviewer-github-id(e.g. @bors r=eddyb) to merge it after fixing trivial issues. Note that r=someone requires permission and bors could say something like \"🔑 Insufficient privileges...\" when commenting r=someone. In that case, you have to ask the reviewer to revisit your PR. When your reviewer approves the PR, it will go into a queue for yet another bot called @bors. @bors manages the CI build/merge queue. When your PR reaches the head of the @bors queue, @bors will test out the merge by running all tests against your PR on GitHub Actions. This takes a lot of time to finish. If all tests pass, the PR is merged and becomes part of the next nightly compiler! There are a couple of things that may happen for some PRs during the review process If the change is substantial enough, the reviewer may request an FCP on the PR. This gives all members of the appropriate team a chance to review the changes. If the change may cause breakage, the reviewer may request a crater run. This compiles the compiler with your changes and then attempts to compile all crates on crates.io with your modified compiler. This is a great smoke test to check if you introduced a change to compiler behavior that affects a large portion of the ecosystem. If the diff of your PR is large or the reviewer is busy, your PR may have some merge conflicts with other PRs that happen to get merged first. You should fix these merge conflicts using the normal git procedures. If you are not doing a new feature or something like that (e.g. if you are fixing a bug), then that's it! Thanks for your contribution :)","breadcrumbs":"Walkthrough: a typical contribution » Implementation","id":"362","title":"Implementation"},"363":{"body":"As people get experience with your new feature on nightly, slight changes may be proposed and unresolved questions may become resolved. Updates/changes go through the same process for implementing any other changes, as described above (i.e. submit a PR, go through review, wait for @bors, etc). Some changes may be major enough to require an FCP and some review by Rust team members. For the ? macro feature, we went through a few different iterations after the original implementation: 1 , 2 , 3 . Along the way, we decided that ? should not take a separator, which was previously an unresolved question listed in the RFC. We also changed the disambiguation strategy: we decided to remove the ability to use ? as a separator token for other repetition operators (e.g. + or *). However, since this was a breaking change, we decided to do it over an edition boundary. Thus, the new feature can be enabled only in edition 2018. These deviations from the original RFC required another FCP .","breadcrumbs":"Walkthrough: a typical contribution » Refining your implementation","id":"363","title":"Refining your implementation"},"364":{"body":"Finally, after the feature had baked for a while on nightly, a language team member moved to stabilize it . A stabilization report needs to be written that includes brief description of the behavior and any deviations from the RFC which edition(s) are affected and how links to a few tests to show the interesting aspects The stabilization report for our feature is here . After this, a PR is made to remove the feature gate, enabling the feature by default (on the 2018 edition). A note is added to the Release notes about the feature. Steps to stabilize the feature can be found at Stabilizing Features .","breadcrumbs":"Walkthrough: a typical contribution » Stabilization","id":"364","title":"Stabilization"},"365":{"body":"The @rfcbot FCP process The logistics of writing features Warning Cycles Stability Tracking Issues Stability in code When you want to implement a new significant feature in the compiler, you need to go through this process to make sure everything goes smoothly. NOTE: this section is for language features, not library features, which use a different process . See also the Rust Language Design Team's procedures for proposing changes to the language.","breadcrumbs":"Implementing new language features » Implementing new language features","id":"365","title":"Implementing new language features"},"366":{"body":"When the change is small and uncontroversial, then it can be done with just writing a PR and getting an r+ from someone who knows that part of the code. However, if the change is potentially controversial, it would be a bad idea to push it without consensus from the rest of the team (both in the \"distributed system\" sense to make sure you don't break anything you don't know about, and in the social sense to avoid PR fights). If such a change seems to be too small to require a full formal RFC process (e.g., a small standard library addition, a big refactoring of the code, a \"technically-breaking\" change, or a \"big bugfix\" that basically amounts to a small feature) but is still too controversial or big to get by with a single r+, you can propose a final comment period (FCP). Or, if you're not on the relevant team (and thus don't have @rfcbot permissions), ask someone who is to start one; unless they have a concern themselves, they should. Again, the FCP process is only needed if you need consensus – if you don't think anyone would have a problem with your change, it's OK to get by with only an r+. For example, it is OK to add or modify unstable command-line flags or attributes without an FCP for compiler development or standard library use, as long as you don't expect them to be in wide use in the nightly ecosystem. Some teams have lighter weight processes that they use in scenarios like this; for example, the compiler team recommends filing a Major Change Proposal ( MCP ) as a lightweight way to garner support and feedback without requiring full consensus. You don't need to have the implementation fully ready for r+ to propose an FCP, but it is generally a good idea to have at least a proof of concept so that people can see what you are talking about. When an FCP is proposed, it requires all members of the team to sign off the FCP. After they all do so, there's a 10-day-long \"final comment period\" (hence the name) where everybody can comment, and if no concerns are raised, the PR/issue gets FCP approval.","breadcrumbs":"Implementing new language features » The @rfcbot FCP process","id":"366","title":"The @rfcbot FCP process"},"367":{"body":"There are a few \"logistic\" hoops you might need to go through in order to implement a feature in a working way.","breadcrumbs":"Implementing new language features » The logistics of writing features","id":"367","title":"The logistics of writing features"},"368":{"body":"In some cases, a feature or bugfix might break some existing programs in some edge cases. In that case, you might want to do a crater run to assess the impact and possibly add a future-compatibility lint, similar to those used for edition-gated lints .","breadcrumbs":"Implementing new language features » Warning Cycles","id":"368","title":"Warning Cycles"},"369":{"body":"We value the stability of Rust . Code that works and runs on stable should (mostly) not break. Because of that, we don't want to release a feature to the world with only team consensus and code review - we want to gain real-world experience on using that feature on nightly, and we might want to change the feature based on that experience. To allow for that, we must make sure users don't accidentally depend on that new feature - otherwise, especially if experimentation takes time or is delayed and the feature takes the trains to stable, it would end up de facto stable and we'll not be able to make changes in it without breaking people's code. The way we do that is that we make sure all new features are feature gated - they can't be used without enabling a feature gate (#[feature(foo)]), which can't be done in a stable/beta compiler. See the stability in code section for the technical details. Eventually, after we gain enough experience using the feature, make the necessary changes, and are satisfied, we expose it to the world using the stabilization process described here . Until then, the feature is not set in stone: every part of the feature can be changed, or the feature might be completely rewritten or removed. Features are not supposed to gain tenure by being unstable and unchanged for a year.","breadcrumbs":"Implementing new language features » Stability","id":"369","title":"Stability"},"37":{"body":"","breadcrumbs":"How to build and run the compiler » Prerequisites » Prerequisites","id":"37","title":"Prerequisites"},"370":{"body":"To keep track of the status of an unstable feature, the experience we get while using it on nightly, and of the concerns that block its stabilization, every feature-gate needs a tracking issue. General discussions about the feature should be done on the tracking issue. For features that have an RFC, you should use the RFC's tracking issue for the feature. For other features, you'll have to make a tracking issue for that feature. The issue title should be \"Tracking issue for YOUR FEATURE\". Use the \"Tracking Issue\" issue template .","breadcrumbs":"Implementing new language features » Tracking Issues","id":"370","title":"Tracking Issues"},"371":{"body":"The below steps needs to be followed in order to implement a new unstable feature: Open a tracking issue - if you have an RFC, you can use the tracking issue for the RFC. The tracking issue should be labeled with at least C-tracking-issue. For a language feature, a label F-feature_name should be added as well. Pick a name for the feature gate (for RFCs, use the name in the RFC). Add the feature name to rustc_span/src/symbol.rs in the Symbols {...} block. Note that this block must be in alphabetical order. Add a feature gate declaration to rustc_feature/src/unstable.rs in the unstable declare_features block. /// description of feature\n(unstable, $feature_name, \"CURRENT_RUSTC_VERSION\", Some($tracking_issue_number)) If you haven't yet opened a tracking issue (e.g. because you want initial feedback on whether the feature is likely to be accepted), you can temporarily use None - but make sure to update it before the PR is merged! For example: /// Allows defining identifiers beyond ASCII.\n(unstable, non_ascii_idents, \"CURRENT_RUSTC_VERSION\", Some(55467), None), Features can be marked as incomplete, and trigger the warn-by-default incomplete_features lint by setting their type to incomplete: /// Allows unsized rvalues at arguments and parameters.\n(incomplete, unsized_locals, \"CURRENT_RUSTC_VERSION\", Some(48055), None), To avoid semantic merge conflicts , please use CURRENT_RUSTC_VERSION instead of 1.70 or another explicit version number. Prevent usage of the new feature unless the feature gate is set. You can check it in most places in the compiler using the expression tcx.features().$feature_name() If the feature gate is not set, you should either maintain the pre-feature behavior or raise an error, depending on what makes sense. Errors should generally use rustc_session::parse::feature_err . For an example of adding an error, see #81015 . For features introducing new syntax, pre-expansion gating should be used instead. During parsing, when the new syntax is parsed, the symbol must be inserted to the current crate's GatedSpans via self.sess.gated_span.gate(sym::my_feature, span). After being inserted to the gated spans, the span must be checked in the rustc_ast_passes::feature_gate::check_crate function, which actually denies features. Exactly how it is gated depends on the exact type of feature, but most likely will use the gate_all!() macro. Add a test to ensure the feature cannot be used without a feature gate, by creating tests/ui/feature-gates/feature-gate-$feature_name.rs. You can generate the corresponding .stderr file by running ./x test tests/ui/feature-gates/ --bless. Add a section to the unstable book, in src/doc/unstable-book/src/language-features/$feature_name.md. Write a lot of tests for the new feature, preferably in tests/ui/$feature_name/. PRs without tests will not be accepted! Get your PR reviewed and land it. You have now successfully implemented a feature in Rust!","breadcrumbs":"Implementing new language features » Stability in code","id":"371","title":"Stability in code"},"372":{"body":"This section is about the stability attributes and schemes that allow stable APIs to use unstable APIs internally in the rustc standard library. NOTE : this section is for library features, not language features. For instructions on stabilizing a language feature see Stabilizing Features . unstable stable rustc_const_unstable rustc_const_stable rustc_const_stable_indirect rustc_intrinsic_const_stable_indirect rustc_default_body_unstable Stabilizing a library feature allow_internal_unstable rustc_allow_const_fn_unstable staged_api deprecated","breadcrumbs":"Stability attributes » Stability attributes","id":"372","title":"Stability attributes"},"373":{"body":"The #[unstable(feature = \"foo\", issue = \"1234\", reason = \"lorem ipsum\")] attribute explicitly marks an item as unstable. Items that are marked as \"unstable\" cannot be used without a corresponding #![feature] attribute on the crate, even on a nightly compiler. This restriction only applies across crate boundaries, unstable items may be used within the crate that defines them. The issue field specifies the associated GitHub issue number . This field is required and all unstable features should have an associated tracking issue. In rare cases where there is no sensible value issue = \"none\" is used. The unstable attribute infects all sub-items, where the attribute doesn't have to be reapplied. So if you apply this to a module, all items in the module will be unstable. You can make specific sub-items stable by using the #[stable] attribute on them. The stability scheme works similarly to how pub works. You can have public functions of nonpublic modules and you can have stable functions in unstable modules or vice versa. Previously, due to a rustc bug , stable items inside unstable modules were available to stable code in that location. As of September 2024, items with accidentally stabilized paths are marked with the #[rustc_allowed_through_unstable_modules] attribute to prevent code dependent on those paths from breaking. Do not add this attribute to any more items unless that is needed to avoid breaking changes. The unstable attribute may also have the soft value, which makes it a future-incompatible deny-by-default lint instead of a hard error. This is used by the bench attribute which was accidentally accepted in the past. This prevents breaking dependencies by leveraging Cargo's lint capping.","breadcrumbs":"Stability attributes » unstable","id":"373","title":"unstable"},"374":{"body":"The #[stable(feature = \"foo\", since = \"1.420.69\")] attribute explicitly marks an item as stabilized. Note that stable functions may use unstable things in their body.","breadcrumbs":"Stability attributes » stable","id":"374","title":"stable"},"375":{"body":"The #[rustc_const_unstable(feature = \"foo\", issue = \"1234\", reason = \"lorem ipsum\")] has the same interface as the unstable attribute. It is used to mark const fn as having their constness be unstable. This is only needed in rare cases: If a const fn makes use of unstable language features or intrinsics. (The compiler will tell you to add the attribute if you run into this.) If a const fn is #[stable] but not yet intended to be const-stable. To change the feature gate that is required to call a const-unstable intrinsic. Const-stability differs from regular stability in that it is recursive : a #[rustc_const_unstable(...)] function cannot even be indirectly called from stable code. This is to avoid accidentally leaking unstable compiler implementation artifacts to stable code or locking us into the accidental quirks of an incomplete implementation. See the rustc_const_stable_indirect and rustc_allow_const_fn_unstable attributes below for how to fine-tune this check.","breadcrumbs":"Stability attributes » rustc_const_unstable","id":"375","title":"rustc_const_unstable"},"376":{"body":"The #[rustc_const_stable(feature = \"foo\", since = \"1.420.69\")] attribute explicitly marks a const fn as having its constness be stable.","breadcrumbs":"Stability attributes » rustc_const_stable","id":"376","title":"rustc_const_stable"},"377":{"body":"The #[rustc_const_stable_indirect] attribute can be added to a #[rustc_const_unstable(...)] function to make it callable from #[rustc_const_stable(...)] functions. This indicates that the function is ready for stable in terms of its implementation (i.e., it doesn't use any unstable compiler features); the only reason it is not const-stable yet are API concerns. This should also be added to lang items for which const-calls are synthesized in the compiler, to ensure those calls do not bypass recursive const stability rules.","breadcrumbs":"Stability attributes » rustc_const_stable_indirect","id":"377","title":"rustc_const_stable_indirect"},"378":{"body":"On an intrinsic, this attribute marks the intrinsic as \"ready to be used by public stable functions\". If the intrinsic has a rustc_const_unstable attribute, it should be removed. Adding this attribute to an intrinsic requires t-lang and wg-const-eval approval!","breadcrumbs":"Stability attributes » rustc_intrinsic_const_stable_indirect","id":"378","title":"rustc_intrinsic_const_stable_indirect"},"379":{"body":"The #[rustc_default_body_unstable(feature = \"foo\", issue = \"1234\", reason = \"lorem ipsum\")] attribute has the same interface as the unstable attribute. It is used to mark the default implementation for an item within a trait as unstable. A trait with a default-body-unstable item can be implemented stably by providing an explicit body for any such item, or the default body can be used by enabling its corresponding #![feature].","breadcrumbs":"Stability attributes » rustc_default_body_unstable","id":"379","title":"rustc_default_body_unstable"},"38":{"body":"See the rust-lang/rust INSTALL .","breadcrumbs":"How to build and run the compiler » Prerequisites » Dependencies","id":"38","title":"Dependencies"},"380":{"body":"To stabilize a feature, follow these steps: Ask a @T-libs-api member to start an FCP on the tracking issue and wait for the FCP to complete (with disposition-merge). Change #[unstable(...)] to #[stable(since = \"CURRENT_RUSTC_VERSION\")]. Remove #![feature(...)] from any test or doc-test for this API. If the feature is used in the compiler or tools, remove it from there as well. If this is a const fn, add #[rustc_const_stable(since = \"CURRENT_RUSTC_VERSION\")]. Alternatively, if this is not supposed to be const-stabilized yet, add #[rustc_const_unstable(...)] for some new feature gate (with a new tracking issue). Open a PR against rust-lang/rust. Add the appropriate labels: @rustbot modify labels: +T-libs-api. Link to the tracking issue and say \"Closes #XXXXX\". You can see an example of stabilizing a feature with tracking issue #81656 with FCP and the associated implementation PR #84642 .","breadcrumbs":"Stability attributes » Stabilizing a library feature","id":"380","title":"Stabilizing a library feature"},"381":{"body":"Macros and compiler desugarings expose their bodies to the call site. To work around not being able to use unstable things in the standard library's macros, there's the #[allow_internal_unstable(feature1, feature2)] attribute that allows the given features to be used in stable macros. Note that if a macro is used in const context and generates a call to a #[rustc_const_unstable(...)] function, that will still be rejected even with allow_internal_unstable. Add #[rustc_const_stable_indirect] to the function to ensure the macro cannot accidentally bypass the recursive const stability checks.","breadcrumbs":"Stability attributes » allow_internal_unstable","id":"381","title":"allow_internal_unstable"},"382":{"body":"As explained above, no unstable const features are allowed inside stable const fn, not even indirectly. However, sometimes we do know that a feature will get stabilized, just not when, or there is a stable (but e.g. runtime-slow) workaround, so we could always fall back to some stable version if we scrapped the unstable feature. In those cases, the [rustc_allow_const_fn_unstable(feature1, feature2)] attribute can be used to allow some unstable features in the body of a stable (or indirectly stable) const fn. You also need to take care to uphold the const fn invariant that calling it at runtime and compile-time needs to behave the same (see also this blog post ). This means that you may not create a const fn that e.g. transmutes a memory address to an integer, because the addresses of things are nondeterministic and often unknown at compile-time. Always ping @rust-lang/wg-const-eval if you are adding more rustc_allow_const_fn_unstable attributes to any const fn.","breadcrumbs":"Stability attributes » rustc_allow_const_fn_unstable","id":"382","title":"rustc_allow_const_fn_unstable"},"383":{"body":"Any crate that uses the stable or unstable attributes must include the #![feature(staged_api)] attribute on the crate.","breadcrumbs":"Stability attributes » staged_api","id":"383","title":"staged_api"},"384":{"body":"Deprecations in the standard library are nearly identical to deprecations in user code. When #[deprecated] is used on an item, it must also have a stable or unstable attribute. deprecated has the following form: #[deprecated( since = \"1.38.0\", note = \"explanation for deprecation\", suggestion = \"other_function\"\n)] The suggestion field is optional. If given, it should be a string that can be used as a machine-applicable suggestion to correct the warning. This is typically used when the identifier is renamed, but no other significant changes are necessary. When the suggestion field is used, you need to have #![feature(deprecated_suggestion)] at the crate root. Another difference from user code is that the since field is actually checked against the current version of rustc. If since is in a future version, then the deprecated_in_future lint is triggered which is default allow, but most of the standard library raises it to a warning with #![warn(deprecated_in_future)].","breadcrumbs":"Stability attributes » deprecated","id":"384","title":"deprecated"},"385":{"body":"NOTE : this page is about stabilizing language features. For stabilizing library features, see Stabilizing a library feature . Once an unstable feature has been well-tested with no outstanding concern, anyone may push for its stabilization. It involves the following steps: Documentation PRs Write a stabilization report FCP Stabilization PR Updating the feature-gate listing Removing existing uses of the feature-gate Do not require the feature-gate to use the feature","breadcrumbs":"Stabilizing Features » Request for stabilization","id":"385","title":"Request for stabilization"},"386":{"body":"If any documentation for this feature exists, it should be in the Unstable Book , located at src/doc/unstable-book . If it exists, the page for the feature gate should be removed. If there was documentation there, integrating it into the existing documentation is needed. If there wasn't documentation there, it needs to be added. Places that may need updated documentation: The Reference : This must be updated, in full detail. The Book : This may or may not need updating, depends. If you're not sure, please open an issue on this repository and it can be discussed. standard library documentation: As needed. Language features often don't need this, but if it's a feature that changes how good examples are written, such as when ? was added to the language, updating examples is important. Rust by Example : As needed. Prepare PRs to update documentation involving this new feature for repositories mentioned above. Maintainers of these repositories will keep these PRs open until the whole stabilization process has completed. Meanwhile, we can proceed to the next step.","breadcrumbs":"Stabilizing Features » Documentation PRs","id":"386","title":"Documentation PRs"},"387":{"body":"Find the tracking issue of the feature, and create a short stabilization report. Essentially this would be a brief summary of the feature plus some links to test cases showing it works as expected, along with a list of edge cases that came up and were considered. This is a minimal \"due diligence\" that we do before stabilizing. The report should contain: A summary, showing examples (e.g. code snippets) what is enabled by this feature. Links to test cases in our test suite regarding this feature and describe the feature's behavior on encountering edge cases. Links to the documentations (the PRs we have made in the previous steps). Any other relevant information. The resolutions of any unresolved questions if the stabilization is for an RFC. Examples of stabilization reports can be found in rust-lang/rust#44494 and rust-lang/rust#28237 (these links will bring you directly to the comment containing the stabilization report).","breadcrumbs":"Stabilizing Features » Write a stabilization report","id":"387","title":"Write a stabilization report"},"388":{"body":"If any member of the team responsible for tracking this feature agrees with stabilizing this feature, they will start the FCP (final-comment-period) process by commenting @rfcbot fcp merge The rest of the team members will review the proposal. If the final decision is to stabilize, we proceed to do the actual code modification.","breadcrumbs":"Stabilizing Features » FCP","id":"388","title":"FCP"},"389":{"body":"This is for stabilizing language features. If you are stabilizing a library feature, see the stabilization chapter of the std dev guide instead. Once we have decided to stabilize a feature, we need to have a PR that actually makes that stabilization happen. These kinds of PRs are a great way to get involved in Rust, as they take you on a little tour through the source code. Here is a general guide to how to stabilize a feature -- every feature is different, of course, so some features may require steps beyond what this guide talks about. Note: Before we stabilize any feature, it's the rule that it should appear in the documentation.","breadcrumbs":"Stabilizing Features » Stabilization PR","id":"389","title":"Stabilization PR"},"39":{"body":"You will need an internet connection to build. The bootstrapping process involves updating git submodules and downloading a beta compiler. It doesn't need to be super fast, but that can help. There are no strict hardware requirements, but building the compiler is computationally expensive, so a beefier machine will help, and I wouldn't recommend trying to build on a Raspberry Pi! We recommend the following. 30GB+ of free disk space. Otherwise, you will have to keep clearing incremental caches. More space is better, the compiler is a bit of a hog; it's a problem we are aware of. 8GB+ RAM 2+ cores. Having more cores really helps. 10 or 20 or more is not too many! Beefier machines will lead to much faster builds. If your machine is not very powerful, a common strategy is to only use ./x check on your local machine and let the CI build test your changes when you push to a PR branch. Building the compiler takes more than half an hour on my moderately powerful laptop. We suggest downloading LLVM from CI so you don't have to build it from source ( see here ). Like cargo, the build system will use as many cores as possible. Sometimes this can cause you to run low on memory. You can use -j to adjust the number of concurrent jobs. If a full build takes more than ~45 minutes to an hour, you are probably spending most of the time swapping memory in and out; try using -j1. If you don't have too much free disk space, you may want to turn off incremental compilation ( see here ). This will make compilation take longer (especially after a rebase), but will save a ton of space from the incremental caches.","breadcrumbs":"How to build and run the compiler » Prerequisites » Hardware","id":"39","title":"Hardware"},"390":{"body":"There is a central listing of unstable feature-gates in compiler/rustc_feature/src/unstable.rs . Search for the declare_features! macro. There should be an entry for the feature you are aiming to stabilize, something like (this example is taken from rust-lang/rust#32409 : // pub(restricted) visibilities (RFC 1422)\n(unstable, pub_restricted, \"CURRENT_RUSTC_VERSION\", Some(32409)), The above line should be moved to compiler/rustc_feature/src/accepted.rs . Entries in the declare_features! call are sorted, so find the correct place. When it is done, it should look like: // pub(restricted) visibilities (RFC 1422)\n(accepted, pub_restricted, \"CURRENT_RUSTC_VERSION\", Some(32409)),\n// note that we changed this (Even though you will encounter version numbers in the file of past changes, you should not put the rustc version you expect your stabilization to happen in, but instead CURRENT_RUSTC_VERSION)","breadcrumbs":"Stabilizing Features » Updating the feature-gate listing","id":"390","title":"Updating the feature-gate listing"},"391":{"body":"Next search for the feature string (in this case, pub_restricted) in the codebase to find where it appears. Change uses of #![feature(XXX)] from the std and any rustc crates (this includes test folders under library/ and compiler/ but not the toplevel tests/ one) to be #![cfg_attr(bootstrap, feature(XXX))]. This includes the feature-gate only for stage0, which is built using the current beta (this is needed because the feature is still unstable in the current beta). Also, remove those strings from any tests (e.g. under tests/). If there are tests specifically targeting the feature-gate (i.e., testing that the feature-gate is required to use the feature, but nothing else), simply remove the test.","breadcrumbs":"Stabilizing Features » Removing existing uses of the feature-gate","id":"391","title":"Removing existing uses of the feature-gate"},"392":{"body":"Most importantly, remove the code which flags an error if the feature-gate is not present (since the feature is now considered stable). If the feature can be detected because it employs some new syntax, then a common place for that code to be is in the same compiler/rustc_ast_passes/src/feature_gate.rs. For example, you might see code like this: gate_feature_post!(&self, pub_restricted, span, \"`pub(restricted)` syntax is experimental\"); This gate_feature_post! macro prints an error if the pub_restricted feature is not enabled. It is not needed now that #[pub_restricted] is stable. For more subtle features, you may find code like this: if self.tcx.sess.features.borrow().pub_restricted { /* XXX */ } This pub_restricted field (obviously named after the feature) would ordinarily be false if the feature flag is not present and true if it is. So transform the code to assume that the field is true. In this case, that would mean removing the if and leaving just the /* XXX */. if self.tcx.sess.features.borrow().pub_restricted { /* XXX */ }\nbecomes\n/* XXX */ if self.tcx.sess.features.borrow().pub_restricted && something { /* XXX */ } becomes\nif something { /* XXX */ }","breadcrumbs":"Stabilizing Features » Do not require the feature-gate to use the feature","id":"392","title":"Do not require the feature-gate to use the feature"},"393":{"body":"This chapter is intended to provide basic help for adding, removing, and modifying feature gates. Note that this is specific to language feature gates; library feature gates use a different mechanism .","breadcrumbs":"Feature Gates » Feature gates","id":"393","title":"Feature gates"},"394":{"body":"See \"Stability in code\" in the \"Implementing new features\" section for instructions.","breadcrumbs":"Feature Gates » Adding a feature gate","id":"394","title":"Adding a feature gate"},"395":{"body":"To remove a feature gate, follow these steps: Remove the feature gate declaration in rustc_feature/src/unstable.rs. It will look like this: /// description of feature\n(unstable, $feature_name, \"$version\", Some($tracking_issue_number)) Add a modified version of the feature gate declaration that you just removed to rustc_feature/src/removed.rs: /// description of feature\n(removed, $old_feature_name, \"$version\", Some($tracking_issue_number), Some(\"$why_it_was_removed\"))","breadcrumbs":"Feature Gates » Removing a feature gate","id":"395","title":"Removing a feature gate"},"396":{"body":"To rename a feature gate, follow these steps (the first two are the same steps to follow when removing a feature gate ): Remove the old feature gate declaration in rustc_feature/src/unstable.rs. It will look like this: /// description of feature\n(unstable, $old_feature_name, \"$version\", Some($tracking_issue_number)) Add a modified version of the old feature gate declaration that you just removed to rustc_feature/src/removed.rs: /// description of feature\n/// Renamed to `$new_feature_name`\n(removed, $old_feature_name, \"$version\", Some($tracking_issue_number), Some(\"renamed to `$new_feature_name`\")) Add a feature gate declaration with the new name to rustc_feature/src/unstable.rs. It should look very similar to the old declaration: /// description of feature\n(unstable, $new_feature_name, \"$version\", Some($tracking_issue_number))","breadcrumbs":"Feature Gates » Renaming a feature gate","id":"396","title":"Renaming a feature gate"},"397":{"body":"See \"Updating the feature-gate listing\" in the \"Stabilizing Features\" chapter for instructions. There are additional steps you will need to take beyond just updating the declaration!","breadcrumbs":"Feature Gates » Stabilizing a feature","id":"397","title":"Stabilizing a feature"},"398":{"body":"This file offers some tips on the coding conventions for rustc. This chapter covers formatting , coding for correctness , using crates from crates.io , and some tips on structuring your PR for easy review .","breadcrumbs":"Coding conventions » Coding conventions","id":"398","title":"Coding conventions"},"399":{"body":"rustc is moving towards the Rust standard coding style . However, for now we don't use stable rustfmt; we use a pinned version with a special config, so this may result in different style from normal rustfmt . Therefore, formatting this repository using cargo fmt is not recommended. Instead, formatting should be done using ./x fmt. It's a good habit to run ./x fmt before every commit, as this reduces conflicts later. Formatting is checked by the tidy script. It runs automatically when you do ./x test and can be run in isolation with ./x fmt --check. If you want to use format-on-save in your editor, the pinned version of rustfmt is built under build//stage0/bin/rustfmt.","breadcrumbs":"Coding conventions » Formatting and the tidy script","id":"399","title":"Formatting and the tidy script"},"4":{"body":"The Rust project is quite large and it can be difficult to know which parts of the project need help, or are a good starting place for beginners. Here are some suggested starting places.","breadcrumbs":"Getting Started » What should I work on?","id":"4","title":"What should I work on?"},"40":{"body":"The full bootstrapping process takes quite a while. Here are some suggestions to make your life easier. Installing a pre-push hook Config extensions Configuring rust-analyzer for rustc Checking the \"library\" tree Project-local rust-analyzer setup Using a separate build directory for rust-analyzer Visual Studio Code Neovim Emacs Helix Zed Check, check, and check again x suggest Configuring rustup to use nightly Faster Builds with CI-rustc Using incremental compilation Fine-tuning optimizations Working on multiple branches at the same time Working with nix Note Shell Completions","breadcrumbs":"How to build and run the compiler » Suggested workflows » Suggested workflows","id":"40","title":"Suggested workflows"},"400":{"body":"The compiler contains some C++ code for interfacing with parts of LLVM that don't have a stable C API. When modifying that code, use this command to format it: ./x test tidy --extra-checks cpp:fmt --bless This uses a pinned version of clang-format, to avoid relying on the local environment.","breadcrumbs":"Coding conventions » Formatting C++ code","id":"400","title":"Formatting C++ code"},"401":{"body":"The Rust repository contains quite a lot of Python code. We try to keep it both linted and formatted by the ruff tool. When modifying Python code, use this command to format it: ./x test tidy --extra-checks py:fmt --bless And, the following command to run lints: ./x test tidy --extra-checks py:lint These use a pinned version of ruff, to avoid relying on the local environment.","breadcrumbs":"Coding conventions » Formatting and linting Python code","id":"401","title":"Formatting and linting Python code"},"402":{"body":"In the past, files began with a copyright and license notice. Please omit this notice for new files licensed under the standard terms (dual MIT/Apache-2.0). All of the copyright notices should be gone by now, but if you come across one in the rust-lang/rust repo, feel free to open a PR to remove it.","breadcrumbs":"Coding conventions » Copyright notice","id":"402","title":"Copyright notice"},"403":{"body":"Lines should be at most 100 characters. It's even better if you can keep things to 80. Sometimes, and particularly for tests, it can be necessary to exempt yourself from this limit. In that case, you can add a comment towards the top of the file like so: // ignore-tidy-linelength","breadcrumbs":"Coding conventions » Line length","id":"403","title":"Line length"},"404":{"body":"Prefer 4-space indents.","breadcrumbs":"Coding conventions » Tabs vs spaces","id":"404","title":"Tabs vs spaces"},"405":{"body":"Beyond formatting, there are a few other tips that are worth following.","breadcrumbs":"Coding conventions » Coding for correctness","id":"405","title":"Coding for correctness"},"406":{"body":"Using _ in a match is convenient, but it means that when new variants are added to the enum, they may not get handled correctly. Ask yourself: if a new variant were added to this enum, what's the chance that it would want to use the _ code, versus having some other treatment? Unless the answer is \"low\", then prefer an exhaustive match. The same advice applies to if let and while let, which are effectively tests for a single variant.","breadcrumbs":"Coding conventions » Prefer exhaustive matches","id":"406","title":"Prefer exhaustive matches"},"407":{"body":"As a useful tool to yourself, you can insert a // TODO comment for something that you want to get back to before you land your PR: fn do_something() { if something_else { unimplemented!(); // TODO write this }\n} The tidy script will report an error for a // TODO comment, so this code would not be able to land until the TODO is fixed (or removed). This can also be useful in a PR as a way to signal from one commit that you are leaving a bug that a later commit will fix: if foo { return true; // TODO wrong, but will be fixed in a later commit\n}","breadcrumbs":"Coding conventions » Use \"TODO\" comments for things you don't want to forget","id":"407","title":"Use \"TODO\" comments for things you don't want to forget"},"408":{"body":"See the crates.io dependencies section.","breadcrumbs":"Coding conventions » Using crates from crates.io","id":"408","title":"Using crates from crates.io"},"409":{"body":"How you prepare the commits in your PR can make a big difference for the reviewer. Here are some tips. Isolate \"pure refactorings\" into their own commit. For example, if you rename a method, then put that rename into its own commit, along with the renames of all the uses. More commits is usually better. If you are doing a large change, it's almost always better to break it up into smaller steps that can be independently understood. The one thing to be aware of is that if you introduce some code following one strategy, then change it dramatically (versus adding to it) in a later commit, that 'back-and-forth' can be confusing. Format liberally. While only the final commit of a PR must be correctly formatted, it is both easier to review and less noisy to format each commit individually using ./x fmt. No merges. We do not allow merge commits into our history, other than those by bors. If you get a merge conflict, rebase instead via a command like git rebase -i rust-lang/master (presuming you use the name rust-lang for your remote). Individual commits do not have to build (but it's nice). We do not require that every intermediate commit successfully builds – we only expect to be able to bisect at a PR level. However, if you can make individual commits build, that is always helpful.","breadcrumbs":"Coding conventions » How to structure your PR","id":"409","title":"How to structure your PR"},"41":{"body":"CI will automatically fail your build if it doesn't pass tidy, our internal tool for ensuring code quality. If you'd like, you can install a Git hook that will automatically run ./x test tidy on each push, to ensure your code is up to par. If the hook fails then run ./x test tidy --bless and commit the changes. If you decide later that the pre-push behavior is undesirable, you can delete the pre-push file in .git/hooks. A prebuilt git hook lives at src/etc/pre-push.sh . It can be copied into your .git/hooks folder as pre-push (without the .sh extension!). You can also install the hook as a step of running ./x setup!","breadcrumbs":"How to build and run the compiler » Suggested workflows » Installing a pre-push hook","id":"41","title":"Installing a pre-push hook"},"410":{"body":"Apart from normal Rust style/naming conventions, there are also some specific to the compiler. cx tends to be short for \"context\" and is often used as a suffix. For example, tcx is a common name for the Typing Context . 'tcx is used as the lifetime name for the Typing Context. Because crate is a keyword, if you need a variable to represent something crate-related, often the spelling is changed to krate.","breadcrumbs":"Coding conventions » Naming conventions","id":"410","title":"Naming conventions"},"411":{"body":"Motivation What qualifies as a bug fix? Detailed design Tracking issue Issuing future compatibility warnings Helpful techniques Crater and crates.io Is it ever acceptable to go directly to issuing errors? Stabilization Removing a lint Remove the lint. Add the lint to the list of removed lints. Update the places that issue the lint Update tests All done! This page defines the best practices procedure for making bug fixes or soundness corrections in the compiler that can cause existing code to stop compiling. This text is based on RFC 1589 .","breadcrumbs":"Procedures for breaking changes » Procedures for breaking changes","id":"411","title":"Procedures for breaking changes"},"412":{"body":"From time to time, we encounter the need to make a bug fix, soundness correction, or other change in the compiler which will cause existing code to stop compiling. When this happens, it is important that we handle the change in a way that gives users of Rust a smooth transition. What we want to avoid is that existing programs suddenly stop compiling with opaque error messages: we would prefer to have a gradual period of warnings, with clear guidance as to what the problem is, how to fix it, and why the change was made. This RFC describes the procedure that we have been developing for handling breaking changes that aims to achieve that kind of smooth transition. One of the key points of this policy is that (a) warnings should be issued initially rather than hard errors if at all possible and (b) every change that causes existing code to stop compiling will have an associated tracking issue. This issue provides a point to collect feedback on the results of that change. Sometimes changes have unexpectedly large consequences or there may be a way to avoid the change that was not considered. In those cases, we may decide to change course and roll back the change, or find another solution (if warnings are being used, this is particularly easy to do).","breadcrumbs":"Procedures for breaking changes » Motivation","id":"412","title":"Motivation"},"413":{"body":"Note that this RFC does not try to define when a breaking change is permitted. That is already covered under RFC 1122 . This document assumes that the change being made is in accordance with those policies. Here is a summary of the conditions from RFC 1122: Soundness changes: Fixes to holes uncovered in the type system. Compiler bugs: Places where the compiler is not implementing the specified semantics found in an RFC or lang-team decision. Underspecified language semantics: Clarifications to grey areas where the compiler behaves inconsistently and no formal behavior had been previously decided. Please see the RFC for full details!","breadcrumbs":"Procedures for breaking changes » What qualifies as a bug fix?","id":"413","title":"What qualifies as a bug fix?"},"414":{"body":"The procedure for making a breaking change is as follows (each of these steps is described in more detail below): Do a crater run to assess the impact of the change. Make a special tracking issue dedicated to the change. Do not report an error right away. Instead, issue forwards-compatibility lint warnings . Sometimes this is not straightforward. See the text below for suggestions on different techniques we have employed in the past. For cases where warnings are infeasible: Report errors, but make every effort to give a targeted error message that directs users to the tracking issue Submit PRs to all known affected crates that fix the issue or, at minimum, alert the owners of those crates to the problem and direct them to the tracking issue Once the change has been in the wild for at least one cycle, we can stabilize the change , converting those warnings into errors. Finally, for changes to rustc_ast that will affect plugins, the general policy is to batch these changes. That is discussed below in more detail.","breadcrumbs":"Procedures for breaking changes » Detailed design","id":"414","title":"Detailed design"},"415":{"body":"Every breaking change should be accompanied by a dedicated tracking issue for that change. The main text of this issue should describe the change being made, with a focus on what users must do to fix their code. The issue should be approachable and practical; it may make sense to direct users to an RFC or some other issue for the full details. The issue also serves as a place where users can comment with questions or other concerns. A template for these breaking-change tracking issues can be found here . An example of how such an issue should look can be found here .","breadcrumbs":"Procedures for breaking changes » Tracking issue","id":"415","title":"Tracking issue"},"416":{"body":"The best way to handle a breaking change is to begin by issuing future-compatibility warnings. These are a special category of lint warning. Adding a new future-compatibility warning can be done as follows. // 1. Define the lint in `compiler/rustc_middle/src/lint/builtin.rs`:\ndeclare_lint! { pub YOUR_ERROR_HERE, Warn, \"illegal use of foo bar baz\"\n} // 2. Add to the list of HardwiredLints in the same file:\nimpl LintPass for HardwiredLints { fn get_lints(&self) -> LintArray { lint_array!( .., YOUR_ERROR_HERE ) }\n} // 3. Register the lint in `compiler/rustc_lint/src/lib.rs`:\nstore.register_future_incompatible(sess, vec![ ..., FutureIncompatibleInfo { id: LintId::of(YOUR_ERROR_HERE), reference: \"issue #1234\", // your tracking issue here! },\n]); // 4. Report the lint:\ntcx.lint_node( lint::builtin::YOUR_ERROR_HERE, path_id, binding.span, format!(\"some helper message here\")); Helpful techniques It can often be challenging to filter out new warnings from older, pre-existing errors. One technique that has been used in the past is to run the older code unchanged and collect the errors it would have reported. You can then issue warnings for any errors you would give which do not appear in that original set. Another option is to abort compilation after the original code completes if errors are reported: then you know that your new code will only execute when there were no errors before. Crater and crates.io Crater is a bot that will compile all crates.io crates and many public github repos with the compiler with your changes. A report will then be generated with crates that ceased to compile with or began to compile with your changes. Crater runs can take a few days to complete. We should always do a crater run to assess impact. It is polite and considerate to at least notify the authors of affected crates the breaking change. If we can submit PRs to fix the problem, so much the better. Is it ever acceptable to go directly to issuing errors? Changes that are believed to have negligible impact can go directly to issuing an error. One rule of thumb would be to check against crates.io: if fewer than 10 total affected projects are found ( not root errors), we can move straight to an error. In such cases, we should still make the \"breaking change\" page as before, and we should ensure that the error directs users to this page. In other words, everything should be the same except that users are getting an error, and not a warning. Moreover, we should submit PRs to the affected projects (ideally before the PR implementing the change lands in rustc). If the impact is not believed to be negligible (e.g., more than 10 crates are affected), then warnings are required (unless the compiler team agrees to grant a special exemption in some particular case). If implementing warnings is not feasible, then we should make an aggressive strategy of migrating crates before we land the change so as to lower the number of affected crates. Here are some techniques for approaching this scenario: Issue warnings for subparts of the problem, and reserve the new errors for the smallest set of cases you can. Try to give a very precise error message that suggests how to fix the problem and directs users to the tracking issue. It may also make sense to layer the fix: First, add warnings where possible and let those land before proceeding to issue errors. Work with authors of affected crates to ensure that corrected versions are available before the fix lands, so that downstream users can use them.","breadcrumbs":"Procedures for breaking changes » Issuing future compatibility warnings","id":"416","title":"Issuing future compatibility warnings"},"417":{"body":"After a change is made, we will stabilize the change using the same process that we use for unstable features: After a new release is made, we will go through the outstanding tracking issues corresponding to breaking changes and nominate some of them for final comment period (FCP). The FCP for such issues lasts for one cycle. In the final week or two of the cycle, we will review comments and make a final determination: Convert to error: the change should be made into a hard error. Revert: we should remove the warning and continue to allow the older code to compile. Defer: can't decide yet, wait longer, or try other strategies. Ideally, breaking changes should have landed on the stable branch of the compiler before they are finalized.","breadcrumbs":"Procedures for breaking changes » Stabilization","id":"417","title":"Stabilization"},"418":{"body":"Once we have decided to make a \"future warning\" into a hard error, we need a PR that removes the custom lint. As an example, here are the steps required to remove the overlapping_inherent_impls compatibility lint. First, convert the name of the lint to uppercase (OVERLAPPING_INHERENT_IMPLS) ripgrep through the source for that string. We will basically by converting each place where this lint name is mentioned (in the compiler, we use the upper-case name, and a macro automatically generates the lower-case string; so searching for overlapping_inherent_impls would not find much). NOTE: these exact files don't exist anymore, but the procedure is still the same. Remove the lint. The first reference you will likely find is the lint definition in rustc_session/src/lint/builtin.rs that resembles this : declare_lint! { pub OVERLAPPING_INHERENT_IMPLS, Deny, // this may also say Warning \"two overlapping inherent impls define an item with the same name were erroneously allowed\"\n} This declare_lint! macro creates the relevant data structures. Remove it. You will also find that there is a mention of OVERLAPPING_INHERENT_IMPLS later in the file as part of a lint_array! ; remove it too. Next, you see a reference to OVERLAPPING_INHERENT_IMPLS in rustc_lint/src/lib.rs . This is defining the lint as a \"future compatibility lint\": FutureIncompatibleInfo { id: LintId::of(OVERLAPPING_INHERENT_IMPLS), reference: \"issue #36889 \",\n}, Remove this too. Add the lint to the list of removed lints. In compiler/rustc_lint/src/lib.rs there is a list of \"renamed and removed lints\". You can add this lint to the list: store.register_removed(\"overlapping_inherent_impls\", \"converted into hard error, see #36889\"); where #36889 is the tracking issue for your lint. Update the places that issue the lint Finally, the last class of references you will see are the places that actually trigger the lint itself (i.e., what causes the warnings to appear). These you do not want to delete. Instead, you want to convert them into errors. In this case, the add_lint call looks like this: self.tcx.sess.add_lint(lint::builtin::OVERLAPPING_INHERENT_IMPLS, node_id, self.tcx.span_of_impl(item1).unwrap(), msg); We want to convert this into an error. In some cases, there may be an existing error for this scenario. In others, we will need to allocate a fresh diagnostic code. Instructions for allocating a fresh diagnostic code can be found here. You may want to mention in the extended description that the compiler behavior changed on this point, and include a reference to the tracking issue for the change. Let's say that we've adopted E0592 as our code. Then we can change the add_lint() call above to something like: struct_span_code_err!(self.dcx(), self.tcx.span_of_impl(item1).unwrap(), E0592, msg) .emit(); Update tests Finally, run the test suite. These should be some tests that used to reference the overlapping_inherent_impls lint, those will need to be updated. In general, if the test used to have #[deny(overlapping_inherent_impls)], that can just be removed. ./x test All done! Open a PR. =)","breadcrumbs":"Procedures for breaking changes » Removing a lint","id":"418","title":"Removing a lint"},"419":{"body":"The rust-lang/rust git repository depends on several other repos in the rust-lang organization. There are three main ways we use dependencies: As a Cargo dependency through crates.io (e.g. rustc-rayon) As a git (e.g. clippy) or a josh (e.g. miri) subtree As a git submodule (e.g. cargo) As a general rule: Use crates.io for libraries that could be useful for others in the ecosystem Use subtrees for tools that depend on compiler internals and need to be updated if there are breaking changes Use submodules for tools that are independent of the compiler","breadcrumbs":"Using external repositories » Using External Repositories","id":"419","title":"Using External Repositories"},"42":{"body":"When working on different tasks, you might need to switch between different bootstrap configurations. Sometimes you may want to keep an old configuration for future use. But saving raw config values in random files and manually copying and pasting them can quickly become messy, especially if you have a long history of different configurations. To simplify managing multiple configurations, you can create config extensions. For example, you can create a simple config file named cross.toml: [build]\nbuild = \"x86_64-unknown-linux-gnu\"\nhost = [\"i686-unknown-linux-gnu\"]\ntarget = [\"i686-unknown-linux-gnu\"] [llvm]\ndownload-ci-llvm = false [target.x86_64-unknown-linux-gnu]\nllvm-config = \"/path/to/llvm-19/bin/llvm-config\" Then, include this in your bootstrap.toml: include = [\"cross.toml\"] You can also include extensions within extensions recursively. Note: In the include field, the overriding logic follows a right-to-left order. For example, in include = [\"a.toml\", \"b.toml\"], extension b.toml overrides a.toml. Also, parent extensions always overrides the inner ones.","breadcrumbs":"How to build and run the compiler » Suggested workflows » Config extensions","id":"42","title":"Config extensions"},"420":{"body":"The following external projects are managed using some form of a subtree: clippy miri portable-simd rustfmt rust-analyzer rustc_codegen_cranelift rustc-dev-guide In contrast to submodule dependencies (see below for those), the subtree dependencies are just regular files and directories which can be updated in tree. However, if possible, enhancements, bug fixes, etc. specific to these tools should be filed against the tools directly in their respective upstream repositories. The exception is that when rustc changes are required to implement a new tool feature or test, that should happen in one collective rustc PR. subtree dependencies are currently managed by two distinct approaches: Using git subtree clippy ( sync guide ) portable-simd ( sync script ) rustfmt rustc_codegen_cranelift ( sync script ) Using the josh tool miri ( sync guide ) rust-analyzer ( sync script ) rustc-dev-guide ( sync guide ) The josh tool is an alternative to git subtrees, which manages git history in a different way and scales better to larger repositories. Specific tooling is required to work with josh, you can check out the miri or rust-analyzer scripts linked above for inspiration. If you want to migrate a repository dependency from git subtree or git submodule to josh, you can check out this guide . Below you can find a guide on how to perform push and pull synchronization with the main rustc repo using git subtree, although these instructions might differ repo from repo.","breadcrumbs":"Using external repositories » External Dependencies (subtrees)","id":"420","title":"External Dependencies (subtrees)"},"421":{"body":"Periodically the changes made to subtree based dependencies need to be synchronized between this repository and the upstream tool repositories. Subtree synchronizations are typically handled by the respective tool maintainers. Other users are welcome to submit synchronization PRs, however, in order to do so you will need to modify your local git installation and follow a very precise set of instructions. These instructions are documented, along with several useful tips and tricks, in the syncing subtree changes section in Clippy's Contributing guide. The instructions are applicable for use with any subtree based tool, just be sure to use the correct corresponding subtree directory and remote repository. The synchronization process goes in two directions: subtree push and subtree pull. A subtree push takes all the changes that happened to the copy in this repo and creates commits on the remote repo that match the local changes. Every local commit that touched the subtree causes a commit on the remote repo, but is modified to move the files from the specified directory to the tool repo root. A subtree pull takes all changes since the last subtree pull from the tool repo and adds these commits to the rustc repo along with a merge commit that moves the tool changes into the specified directory in the Rust repository. It is recommended that you always do a push first and get that merged to the tool master branch. Then, when you do a pull, the merge works without conflicts. While it's definitely possible to resolve conflicts during a pull, you may have to redo the conflict resolution if your PR doesn't get merged fast enough and there are new conflicts. Do not try to rebase the result of a git subtree pull, rebasing merge commits is a bad idea in general. You always need to specify the -P prefix to the subtree directory and the corresponding remote repository. If you specify the wrong directory or repository you'll get very fun merges that try to push the wrong directory to the wrong remote repository. Luckily you can just abort this without any consequences by throwing away either the pulled commits in rustc or the pushed branch on the remote and try again. It is usually fairly obvious that this is happening because you suddenly get thousands of commits that want to be synchronized.","breadcrumbs":"Using external repositories » Synchronizing a subtree","id":"421","title":"Synchronizing a subtree"},"422":{"body":"If you want to create a new subtree dependency from an existing repository, call (from this repository's root directory!) git subtree add -P src/tools/clippy https://github.com/rust-lang/rust-clippy.git master This will create a new commit, which you may not rebase under any circumstances! Delete the commit and redo the operation if you need to rebase. Now you're done, the src/tools/clippy directory behaves as if Clippy were part of the rustc monorepo, so no one but you (or others that synchronize subtrees) actually needs to use git subtree.","breadcrumbs":"Using external repositories » Creating a new subtree dependency","id":"422","title":"Creating a new subtree dependency"},"423":{"body":"Building Rust will also use external git repositories tracked using git submodules . The complete list may be found in the .gitmodules file. Some of these projects are required (like stdarch for the standard library) and some of them are optional (like src/doc/book). Usage of submodules is discussed more in the Using Git chapter . Some of the submodules are allowed to be in a \"broken\" state where they either don't build or their tests don't pass, e.g. the documentation books like The Rust Reference . Maintainers of these projects will be notified when the project is in a broken state, and they should fix them as soon as possible. The current status is tracked on the toolstate website . More information may be found on the Forge Toolstate chapter . In practice, it is very rare for documentation to have broken toolstate. Breakage is not allowed in the beta and stable channels, and must be addressed before the PR is merged. They are also not allowed to be broken on master in the week leading up to the beta cut.","breadcrumbs":"Using external repositories » External Dependencies (submodules)","id":"423","title":"External Dependencies (submodules)"},"424":{"body":"For the purposes of this guide, fuzzing is any testing methodology that involves compiling a wide variety of programs in an attempt to uncover bugs in rustc. Fuzzing is often used to find internal compiler errors (ICEs). Fuzzing can be beneficial, because it can find bugs before users run into them and provide small, self-contained programs that make the bug easier to track down. However, some common mistakes can reduce the helpfulness of fuzzing and end up making contributors' lives harder. To maximize your positive impact on the Rust project, please read this guide before reporting fuzzer-generated bugs!","breadcrumbs":"Fuzzing » Fuzzing","id":"424","title":"Fuzzing"},"425":{"body":"","breadcrumbs":"Fuzzing » Guidelines","id":"425","title":"Guidelines"},"426":{"body":"Please do: Ensure the bug is still present on the latest nightly rustc Include a reasonably minimal, standalone example along with any bug report Include all of the information requested in the bug report template Search for existing reports with the same message and query stack Format the test case with rustfmt, if it maintains the bug Indicate that the bug was found by fuzzing Please don't: Don't report lots of bugs that use internal features, including but not limited to custom_mir, lang_items, no_core, and rustc_attrs. Don't seed your fuzzer with inputs that are known to crash rustc (details below).","breadcrumbs":"Fuzzing » In a nutshell","id":"426","title":"In a nutshell"},"427":{"body":"If you're not sure whether or not an ICE is a duplicate of one that's already been reported, please go ahead and report it and link to issues you think might be related. In general, ICEs on the same line but with different query stacks are usually distinct bugs. For example, #109020 and #109129 had similar error messages: error: internal compiler error: compiler/rustc_middle/src/ty/normalize_erasing_regions.rs:195:90: Failed to normalize <[closure@src/main.rs:36:25: 36:28] as std::ops::FnOnce<(Emplacable<()>,)>>::Output, maybe try to call `try_normalize_erasing_regions` instead error: internal compiler error: compiler/rustc_middle/src/ty/normalize_erasing_regions.rs:195:90: Failed to normalize <() as Project>::Assoc, maybe try to call `try_normalize_erasing_regions` instead but different query stacks: query stack during panic:\n#0 [fn_abi_of_instance] computing call ABI of `<[closure@src/main.rs:36:25: 36:28] as core::ops::function::FnOnce<(Emplacable<()>,)>>::call_once - shim(vtable)`\nend of query stack query stack during panic:\n#0 [check_mod_attrs] checking attributes in top-level module\n#1 [analysis] running analysis passes on this crate\nend of query stack","breadcrumbs":"Fuzzing » Discussion","id":"427","title":"Discussion"},"428":{"body":"When building a corpus, be sure to avoid collecting tests that are already known to crash rustc. A fuzzer that is seeded with such tests is more likely to generate bugs with the same root cause, wasting everyone's time. The simplest way to avoid this is to loop over each file in the corpus, see if it causes an ICE, and remove it if so. To build a corpus, you may want to use: The rustc/rust-analyzer/clippy test suites (or even source code) --- though avoid tests that are already known to cause failures, which often begin with comments like //@ failure-status: 101 or //@ known-bug: #NNN. The already-fixed ICEs in the archived Glacier repository --- though avoid the unfixed ones in ices/!","breadcrumbs":"Fuzzing » Building a corpus","id":"428","title":"Building a corpus"},"429":{"body":"Here are a few things you can do to help the Rust project after filing an ICE. Bisect the bug to figure out when it was introduced. If you find the regressing PR / commit, you can mark the issue with the label S-has-bisection. If not, consider applying E-needs-bisection instead. Fix \"distractions\": problems with the test case that don't contribute to triggering the ICE, such as syntax errors or borrow-checking errors Minimize the test case (see below). If successful, you can label the issue with S-has-mcve. Otherwise, you can apply E-needs-mcve. Add the minimal test case to the rust-lang/rust repo as a crashes test . While you're at it, consider including other \"untracked\" crashes in your PR. Please don't forget to mark your issue with S-bug-has-test afterwards. See also applying and removing labels .","breadcrumbs":"Fuzzing » Extra credit","id":"429","title":"Extra credit"},"43":{"body":"","breadcrumbs":"How to build and run the compiler » Suggested workflows » Configuring rust-analyzer for rustc","id":"43","title":"Configuring rust-analyzer for rustc"},"430":{"body":"It is helpful to carefully minimize the fuzzer-generated input. When minimizing, be careful to preserve the original error, and avoid introducing distracting problems such as syntax, type-checking, or borrow-checking errors. There are some tools that can help with minimization. If you're not sure how to avoid introducing syntax, type-, and borrow-checking errors while using these tools, post both the complete and minimized test cases. Generally, syntax-aware tools give the best results in the least amount of time. treereduce-rust and picireny are syntax-aware. halfempty is not, but is generally a high-quality tool.","breadcrumbs":"Fuzzing » Minimization","id":"430","title":"Minimization"},"431":{"body":"When fuzzing rustc, you may want to avoid generating machine code, since this is mostly done by LLVM. Try --emit=mir instead. A variety of compiler flags can uncover different issues. -Zmir-opt-level=4 will turn on MIR optimization passes that are not run by default, potentially uncovering interesting bugs. -Zvalidate-mir can help uncover such bugs. If you're fuzzing a compiler you built, you may want to build it with -C target-cpu=native or even PGO/BOLT to squeeze out a few more executions per second. Of course, it's best to try multiple build configurations and see what actually results in superior throughput. You may want to build rustc from source with debug assertions to find additional bugs, though this is a trade-off: it can slow down fuzzing by requiring extra work for every execution. To enable debug assertions, add this to bootstrap.toml when compiling rustc: [rust]\ndebug-assertions = true ICEs that require debug assertions to reproduce should be tagged requires-debug-assertions .","breadcrumbs":"Fuzzing » Effective fuzzing","id":"431","title":"Effective fuzzing"},"432":{"body":"fuzz-rustc demonstrates how to fuzz rustc with libfuzzer icemaker runs rustc and other tools on a large number of source files with a variety of flags to catch ICEs tree-splicer generates new source files by combining existing ones while maintaining correct syntax","breadcrumbs":"Fuzzing » Existing projects","id":"432","title":"Existing projects"},"433":{"body":"The notification groups are an easy way to help out with rustc in a \"piece-meal\" fashion, without committing to a larger project. Notification groups are easy to join (just submit a PR!) and joining does not entail any particular commitment. Once you join a notification group , you will be added to a list that receives pings on github whenever a new issue is found that fits the notification group's criteria. If you are interested, you can then claim the issue and start working on it. Of course, you don't have to wait for new issues to be tagged! If you prefer, you can use the Github label for a notification group to search for existing issues that haven't been claimed yet.","breadcrumbs":"Notification groups » Notification groups","id":"433","title":"Notification groups"},"434":{"body":"Here's the list of the notification groups: Apple ARM Emscripten RISC-V WASI WebAssembly Windows Rust for Linux","breadcrumbs":"Notification groups » List of notification groups","id":"434","title":"List of notification groups"},"435":{"body":"Notification groups tend to get pinged on isolated bugs, particularly those of middle priority : By isolated , we mean that we do not expect large-scale refactoring to be required to fix the bug. By middle priority , we mean that we'd like to see the bug fixed, but it's not such a burning problem that we are dropping everything else to fix it. The danger with such bugs, of course, is that they can accumulate over time, and the role of the notification group is to try and stop that from happening!","breadcrumbs":"Notification groups » What issues are a good fit for notification groups?","id":"435","title":"What issues are a good fit for notification groups?"},"436":{"body":"To join a notification group, you just have to open a PR adding your Github username to the appropriate file in the Rust team repository. See the \"example PRs\" below to get a precise idea and to identify the file to edit. Also, if you are not already a member of a Rust team then -- in addition to adding your name to the file -- you have to checkout the repository and run the following command: cargo run add-person $your_user_name Example PRs: Example of adding yourself to the Apple group. Example of adding yourself to the ARM group. Example of adding yourself to the Emscripten group. Example of adding yourself to the RISC-V group. Example of adding yourself to the WASI group. Example of adding yourself to the WebAssembly group. Example of adding yourself to the Windows group.","breadcrumbs":"Notification groups » Joining a notification group","id":"436","title":"Joining a notification group"},"437":{"body":"To tag an issue as appropriate for a notification group, you give rustbot a ping command with the name of the notification group. For example: @rustbot ping apple\n@rustbot ping arm\n@rustbot ping emscripten\n@rustbot ping risc-v\n@rustbot ping wasi\n@rustbot ping wasm\n@rustbot ping windows To make some commands shorter and easier to remember, there are aliases, defined in the triagebot.toml file. For example, all of these commands are equivalent and will ping the Apple group: @rustbot ping apple\n@rustbot ping macos\n@rustbot ping ios Keep in mind that these aliases are meant to make humans' life easier. They might be subject to change. If you need to ensure that a command will always be valid, prefer the full invocations over the aliases. Note though that this should only be done by compiler team members or contributors, and is typically done as part of compiler team triage.","breadcrumbs":"Notification groups » Tagging an issue for a notification group","id":"437","title":"Tagging an issue for a notification group"},"438":{"body":"Github Labels: O-macos , O-ios , O-tvos , O-watchos and O-visionos Ping command: @rustbot ping apple This list will be used to ask for help both in diagnosing and testing Apple-related issues as well as suggestions on how to resolve interesting questions regarding our macOS/iOS/tvOS/watchOS/visionOS support. To get a better idea for what the group will do, here are some examples of the kinds of questions where we would have reached out to the group for advice in determining the best course of action: Raising the minimum supported versions (e.g. #104385 ) Additional Apple targets (e.g. #121419 ) Obscure Xcode linker details (e.g. #121430 )","breadcrumbs":"Notification groups » Apple » Apple notification group","id":"438","title":"Apple notification group"},"439":{"body":"Apple platforms have a concept of \"deployment target\", controlled with the *_DEPLOYMENT_TARGET environment variables, and specifies the minimum OS version that a binary runs on. Using an API from a newer OS version in the standard library than the default that rustc uses will result in either a static or a dynamic linker error. For this reason, try to suggest that people document on extern \"C\" APIs which OS version they were introduced with, and if that's newer than the current default used by rustc, suggest to use weak linking.","breadcrumbs":"Notification groups » Apple » Deployment targets","id":"439","title":"Deployment targets"},"44":{"body":"Checking the \"library\" tree requires a stage1 compiler, which can be a heavy process on some computers. For this reason, bootstrap has a flag called --skip-std-check-if-no-download-rustc that skips checking the \"library\" tree if rust.download-rustc isn't available. If you want to avoid putting a heavy load on your computer with rust-analyzer, you can add the --skip-std-check-if-no-download-rustc flag to your ./x check command in the rust-analyzer configuration.","breadcrumbs":"How to build and run the compiler » Suggested workflows » Checking the \"library\" tree","id":"44","title":"Checking the \"library\" tree"},"440":{"body":"Apple are very protective about using undocumented APIs, so it's important that whenever a change uses a new function, that they are verified to actually be public API, as even just mentioning undocumented APIs in the binary (without calling it) can lead to rejections from the App Store. For example, Darwin / the XNU kernel actually has futex syscalls, but we can't use them in std because they are not public API. In general, for an API to be considered public by Apple, it has to: Appear in a public header (i.e. one distributed with Xcode, and found for the specific platform under xcrun --show-sdk-path --sdk $SDK). Have an availability attribute on it (like __API_AVAILABLE, API_AVAILABLE or similar).","breadcrumbs":"Notification groups » Apple » The App Store and private APIs","id":"440","title":"The App Store and private APIs"},"441":{"body":"Github Label: O-ARM Ping command: @rustbot ping arm This list will be used to ask for help both in diagnosing and testing ARM-related issues as well as suggestions on how to resolve interesting questions regarding our ARM support. The group also has an associated Zulip stream ( #t-compiler/arm ) where people can go to pose questions and discuss ARM-specific topics. So, if you are interested in participating, please sign up for the ARM group! To do so, open a PR against the rust-lang/team repository. Just follow this example , but change the username to your own!","breadcrumbs":"Notification groups » ARM » ARM notification group","id":"441","title":"ARM notification group"},"442":{"body":"Github Label: O-emscripten Ping command: @rustbot ping emscripten This list will be used to ask for help both in diagnosing and testing Emscripten-related issues as well as suggestions on how to resolve interesting questions regarding our Emscripten support. The group also has an associated Zulip stream ( #t-compiler/wasm ) where people can go to pose questions and discuss Emscripten-specific topics. So, if you are interested in participating, please sign up for the Emscripten group! To do so, open a PR against the rust-lang/team repository. Just follow this example , but change the username to your own!","breadcrumbs":"Notification groups » Emscripten » Emscripten notification group","id":"442","title":"Emscripten notification group"},"443":{"body":"Github Label: O-fuchsia Ping command: @rustbot ping fuchsia This list will be used to notify Fuchsia maintainers when the compiler or the standard library changes in a way that would break the Fuchsia integration.","breadcrumbs":"Notification groups » Fuchsia » Fuchsia notification group","id":"443","title":"Fuchsia notification group"},"444":{"body":"Github Label: O-riscv Ping command: @rustbot ping risc-v This list will be used to ask for help both in diagnosing and testing RISC-V-related issues as well as suggestions on how to resolve interesting questions regarding our RISC-V support. The group also has an associated Zulip stream ( #t-compiler/risc-v ) where people can go to pose questions and discuss RISC-V-specific topics. So, if you are interested in participating, please sign up for the RISC-V group! To do so, open a PR against the rust-lang/team repository. Just follow this example , but change the username to your own!","breadcrumbs":"Notification groups » RISC-V » RISC-V notification group","id":"444","title":"RISC-V notification group"},"445":{"body":"Github Label: A-rust-for-linux Ping command: @rustbot ping rfl This list will be used to notify Rust for Linux (RfL) maintainers when the compiler or the standard library changes in a way that would break Rust for Linux, since it depends on several unstable flags and features. The RfL maintainers should then ideally provide support for resolving the breakage or decide to temporarily accept the breakage and unblock CI by temporarily removing the RfL CI jobs. The group also has an associated Zulip stream ( #rust-for-linux ) where people can go to ask questions and discuss topics related to Rust for Linux. If you are interested in participating, please sign up for the Rust for Linux group on Zulip !","breadcrumbs":"Notification groups » Rust for Linux » Rust for Linux notification group","id":"445","title":"Rust for Linux notification group"},"446":{"body":"Github Label: O-wasi Ping command: @rustbot ping wasi This list will be used to ask for help both in diagnosing and testing WASI-related issues as well as suggestions on how to resolve interesting questions regarding our WASI support. The group also has an associated Zulip stream ( #t-compiler/wasm ) where people can go to pose questions and discuss WASI-specific topics. So, if you are interested in participating, please sign up for the WASI group! To do so, open a PR against the rust-lang/team repository. Just follow this example , but change the username to your own!","breadcrumbs":"Notification groups » WASI » WASI notification group","id":"446","title":"WASI notification group"},"447":{"body":"Github Label: O-wasm Ping command: @rustbot ping wasm This list will be used to ask for help both in diagnosing and testing WebAssembly-related issues as well as suggestions on how to resolve interesting questions regarding our WASM support. The group also has an associated Zulip stream ( #t-compiler/wasm ) where people can go to pose questions and discuss WASM-specific topics. So, if you are interested in participating, please sign up for the WASM group! To do so, open a PR against the rust-lang/team repository. Just follow this example , but change the username to your own!","breadcrumbs":"Notification groups » WebAssembly » WebAssembly (WASM) notification group","id":"447","title":"WebAssembly (WASM) notification group"},"448":{"body":"Github Label: O-Windows Ping command: @rustbot ping windows This list will be used to ask for help both in diagnosing and testing Windows-related issues as well as suggestions on how to resolve interesting questions regarding our Windows support. The group also has an associated Zulip stream ( #t-compiler/windows ) where people can go to pose questions and discuss Windows-specific topics. To get a better idea for what the group will do, here are some examples of the kinds of questions where we would have reached out to the group for advice in determining the best course of action: Which versions of MinGW should we support? Should we remove the legacy InnoSetup GUI installer? #72569 What names should we use for static libraries on Windows? #29520 So, if you are interested in participating, please sign up for the Windows group! To do so, open a PR against the rust-lang/team repository. Just follow this example , but change the username to your own!","breadcrumbs":"Notification groups » Windows » Windows notification group","id":"448","title":"Windows notification group"},"449":{"body":"The rustc compiler source and standard library are dual licensed under the Apache License v2.0 and the MIT License unless otherwise specified. Detailed licensing information is available in the COPYRIGHT document of the rust-lang/rust repository.","breadcrumbs":"Licenses » rust-lang/rust Licenses","id":"449","title":"rust-lang/rust Licenses"},"45":{"body":"rust-analyzer can help you check and format your code whenever you save a file. By default, rust-analyzer runs the cargo check and rustfmt commands, but you can override these commands to use more adapted versions of these tools when hacking on rustc. With custom setup, rust-analyzer can use ./x check to check the sources, and the stage 0 rustfmt to format them. The default rust-analyzer.check.overrideCommand command line will check all the crates and tools in the repository. If you are working on a specific part, you can override the command to only check the part you are working on to save checking time. For example, if you are working on the compiler, you can override the command to x check compiler --json-output to only check the compiler part. You can run x check --help --verbose to see the available parts. Running ./x setup editor will prompt you to create a project-local LSP config file for one of the supported editors. You can also create the config file as a step of running ./x setup.","breadcrumbs":"How to build and run the compiler » Suggested workflows » Project-local rust-analyzer setup","id":"45","title":"Project-local rust-analyzer setup"},"450":{"body":"In general, reviewers need to be looking not only for the code quality of contributions but also that they are properly licensed. We have some tips below for things to look out for when reviewing, but if you ever feel uncertain as to whether some code might be properly licensed, err on the safe side — reach out to the Council or Compiler Team Leads for feedback! Things to watch out for: The PR author states that they copied, ported, or adapted the code from some other source. There is a comment in the code pointing to a webpage or describing where the algorithm was taken from. The algorithm or code pattern seems like it was likely copied from somewhere else. When adding new dependencies, double check the dependency's license. In all of these cases, we will want to check that source to make sure it is licensed in a way that is compatible with Rust’s license. Examples Porting C code from a GPL project, like GNU binutils, is not allowed. That would require Rust itself to be licensed under the GPL. Copying code from an algorithms text book may be allowed, but some algorithms are patented.","breadcrumbs":"Licenses » Guidelines for reviewers","id":"450","title":"Guidelines for reviewers"},"451":{"body":"Contributions to rustc, especially around platform and compiler intrinsics, often include porting over work from other projects, mainly LLVM and GCC. Some general rules apply: Copying work needs to adhere to the original license This applies to direct copy & paste This also applies to code you looked at and ported In general, taking inspiration from other codebases is fine, but please exercise caution when porting code. Ports of full libraries (e.g. C libraries shipped with LLVM) must keep the license of the original library.","breadcrumbs":"Licenses » Porting","id":"451","title":"Porting"},"452":{"body":"Edition definition Adding a new edition Features and Edition stability Edition parsing Keywords Edition hygiene Lints Migration lints Edition-specific lints Lints and stability Idiom lints Standard library changes Preludes Customized language behavior Migrating the standard library edition Stabilizing an edition This chapter gives an overview of how Edition support works in rustc. This assumes that you are familiar with what Editions are (see the Edition Guide ).","breadcrumbs":"Editions » Editions","id":"452","title":"Editions"},"453":{"body":"The --edition CLI flag specifies the edition to use for a crate. This can be accessed from Session::edition . There are convenience functions like Session::at_least_rust_2021 for checking the crate's edition, though you should be careful about whether you check the global session or the span, see Edition hygiene below. As an alternative to the at_least_rust_20xx convenience methods, the Edition type also supports comparisons for doing range checks, such as span.edition() >= Edition::Edition2021.","breadcrumbs":"Editions » Edition definition","id":"453","title":"Edition definition"},"454":{"body":"Adding a new edition mainly involves adding a variant to the Edition enum and then fixing everything that is broken. See #94461 for an example.","breadcrumbs":"Editions » Adding a new edition","id":"454","title":"Adding a new edition"},"455":{"body":"The Edition enum defines whether or not an edition is stable. If it is not stable, then the -Zunstable-options CLI option must be passed to enable it. When adding a new feature, there are two options you can choose for how to handle stability with a future edition: Just check the edition of the span like span.at_least_rust_20xx() (see Edition hygiene ) or the Session::edition . This will implicitly depend on the stability of the edition itself to indicate that your feature is available. Place your new behavior behind a feature gate . It may be sufficient to only check the current edition for relatively simple changes. However, for larger language changes, you should consider creating a feature gate. There are several benefits to using a feature gate: A feature gate makes it easier to work on and experiment with a new feature. It makes the intent clear when the #![feature(…)] attribute is used that your new feature is being enabled. It makes testing of editions easier so that features that are not yet complete do not interfere with testing of edition-specific features that are complete and ready. It decouples the feature from an edition, which makes it easier for the team to make a deliberate decision of whether or not a feature should be added to the next edition when the feature is ready. When a feature is complete and ready, the feature gate can be removed (and the code should just check the span or Session edition to determine if it is enabled). There are a few different options for doing feature checks: For highly experimental features, that may or may not be involved in an edition, they can implement regular feature gates like tcx.features().my_feature, and ignore editions for the time being. For experimental features that might be involved in an edition, they should implement gates with tcx.features().my_feature && span.at_least_rust_20xx(). This requires the user to still specify #![feature(my_feature)], to avoid disrupting testing of other edition features which are ready and have been accepted within the edition. For experimental features that have graduated to definitely be part of an edition, they should implement gates with tcx.features().my_feature || span.at_least_rust_20xx(), or just remove the feature check altogether and just check span.at_least_rust_20xx(). If you need to do the feature gating in multiple places, consider placing the check in a single function so that there will only be a single place to update. For example: // An example from Edition 2021 disjoint closure captures. fn enable_precise_capture(tcx: TyCtxt<'_>, span: Span) -> bool { tcx.features().capture_disjoint_fields || span.rust_2021()\n} See Lints and stability below for more information about how lints handle stability.","breadcrumbs":"Editions » Features and Edition stability","id":"455","title":"Features and Edition stability"},"456":{"body":"For the most part, the lexer is edition-agnostic. Within Lexer , tokens can be modified based on edition-specific behavior. For example, C-String literals like c\"foo\" are split into multiple tokens in editions before 2021. This is also where things like reserved prefixes are handled for the 2021 edition. Edition-specific parsing is relatively rare. One example is async fn which checks the span of the token to determine if it is the 2015 edition, and emits an error in that case. This can only be done if the syntax was already invalid. If you need to do edition checking in the parser, you will normally want to look at the edition of the token, see Edition hygiene . In some rare cases you may instead need to check the global edition from ParseSess::edition . Most edition-specific parsing behavior is handled with migration lints instead of in the parser. This is appropriate when there is a change in syntax (as opposed to new syntax). This allows the old syntax to continue to work on previous editions. The lint then checks for the change in behavior. On older editions, the lint pass should emit the migration lint to help with migrating to new editions. On newer editions, your code should emit a hard error with emit_err instead. For example, the deprecated start...end pattern syntax emits the ellipsis_inclusive_range_patterns lint on editions before 2021, and in 2021 is an hard error via the emit_err method.","breadcrumbs":"Editions » Edition parsing","id":"456","title":"Edition parsing"},"457":{"body":"New keywords can be introduced across an edition boundary. This is implemented by functions like Symbol::is_used_keyword_conditional , which rely on the ordering of how the keywords are defined. When new keywords are introduced, the keyword_idents lint should be updated so that automatic migrations can transition code that might be using the keyword as an identifier (see KeywordIdents ). An alternative to consider is to implement the keyword as a weak keyword if the position it is used is sufficient to distinguish it. An additional option to consider is the k# prefix which was introduced in RFC 3101 . This allows the use of a keyword in editions before the edition where the keyword is introduced. This is currently not implemented.","breadcrumbs":"Editions » Keywords","id":"457","title":"Keywords"},"458":{"body":"Spans are marked with the edition of the crate that the span came from. See Macro hygiene in the Edition Guide for a user-centric description of what this means. You should normally use the edition from the token span instead of looking at the global Session edition. For example, use span.edition().at_least_rust_2021() instead of sess.at_least_rust_2021(). This helps ensure that macros behave correctly when used across crates.","breadcrumbs":"Editions » Edition hygiene","id":"458","title":"Edition hygiene"},"459":{"body":"Lints support a few different options for interacting with editions. Lints can be future incompatible edition migration lints , which are used to support migrations to newer editions. Alternatively, lints can be edition-specific , where they change their default level starting in a specific edition.","breadcrumbs":"Editions » Lints","id":"459","title":"Lints"},"46":{"body":"By default, when rust-analyzer runs a check or format command, it will share the same build directory as manual command-line builds. This can be inconvenient for two reasons: Each build will lock the build directory and force the other to wait, so it becomes impossible to run command-line builds while rust-analyzer is running commands in the background. There is an increased risk of one of the builds deleting previously-built artifacts due to conflicting compiler flags or other settings, forcing additional rebuilds in some cases. To avoid these problems: Add --build-dir=build/rust-analyzer to all of the custom x commands in your editor's rust-analyzer configuration. (Feel free to choose a different directory name if desired.) Modify the rust-analyzer.rustfmt.overrideCommand setting so that it points to the copy of rustfmt in that other build directory. Modify the rust-analyzer.procMacro.server setting so that it points to the copy of rust-analyzer-proc-macro-srv in that other build directory. Using separate build directories for command-line builds and rust-analyzer requires extra disk space.","breadcrumbs":"How to build and run the compiler » Suggested workflows » Using a separate build directory for rust-analyzer","id":"46","title":"Using a separate build directory for rust-analyzer"},"460":{"body":"Migration lints are used to migrate projects from one edition to the next. They are implemented with a MachineApplicable suggestion which will rewrite code so that it will successfully compile in both the previous and the next edition . For example, the keyword_idents lint will take identifiers that conflict with a new keyword to use the raw identifier syntax to avoid the conflict (for example changing async to r#async). Migration lints must be declared with the FutureIncompatibilityReason::EditionError or FutureIncompatibilityReason::EditionSemanticsChange future-incompatible option in the lint declaration: declare_lint! { pub KEYWORD_IDENTS, Allow, \"detects edition keywords being used as an identifier\", @future_incompatible = FutureIncompatibleInfo { reason: FutureIncompatibilityReason::EditionError(Edition::Edition2018), reference: \"issue #49716 \", };\n} When declared like this, the lint is automatically added to the appropriate rust-20xx-compatibility lint group. When a user runs cargo fix --edition, cargo will pass the --force-warn rust-20xx-compatibility flag to force all of these lints to appear during the edition migration. Cargo also passes --cap-lints=allow so that no other lints interfere with the edition migration. Make sure that the example code sets the correct edition. The example should illustrate the previous edition, and show what the migration warning would look like. For example, this lint for a 2024 migration shows an example in 2021: declare_lint! { /// The `keyword_idents_2024` lint detects ... /// /// ### Example /// /// ```rust,edition2021 /// #![warn(keyword_idents_2024)] /// fn gen() {} /// ``` /// /// {{produces}}\n} Migration lints can be either Allow or Warn by default. If it is Allow, users usually won't see this warning unless they are doing an edition migration manually or there is a problem during the migration. Most migration lints are Allow. If it is Warn by default, users on all editions will see this warning. Only use Warn if you think it is important for everyone to be aware of the change, and to encourage people to update their code on all editions. Beware that new warn-by-default lint that hit many projects can be very disruptive and frustrating for users. You may consider switching an Allow to Warn several years after the edition stabilizes. This will only show up for the relatively small number of stragglers who have not updated to the new edition.","breadcrumbs":"Editions » Migration lints","id":"460","title":"Migration lints"},"461":{"body":"Lints can be marked so that they have a different level starting in a specific edition. In the lint declaration, use the @edition marker: declare_lint! { pub SOME_LINT_NAME, Allow, \"my lint description\", @edition Edition2024 => Warn;\n} Here, SOME_LINT_NAME defaults to Allow on all editions before 2024, and then becomes Warn afterwards. This should generally be used sparingly, as there are other options: Small impact stylistic changes unrelated to an edition can just make the lint Warn on all editions. If you want people to adopt a different way to write things, then go ahead and commit to having it show up for all projects. Beware that if a new warn-by-default lint hits many projects, it can be very disruptive and frustrating for users. Change the new style to be a hard error in the new edition, and use a migration lint to automatically convert projects to the new style. For example, ellipsis_inclusive_range_patterns is a hard error in 2021, and warns in all previous editions. Beware that these cannot be added after the edition stabilizes. Migration lints can also change over time. For example, the migration lint can start out as Allow by default. For people performing the migration, they will automatically get updated to the new code. Then, after some years, the lint can be made to Warn in previous editions. For example anonymous_parameters was a 2018 Edition migration lint (and a hard-error in 2018) that was Allow by default in previous editions. Then, three years later, it was changed to Warn for all previous editions, so that all users got a warning that the style was being phased out. If this was a warning from the start, it would have impacted many projects and be very disruptive. By making it part of the edition, most users eventually updated to the new edition and were handled by the migration. Switching to Warn only impacted a few stragglers who did not update.","breadcrumbs":"Editions » Edition-specific lints","id":"461","title":"Edition-specific lints"},"462":{"body":"Lints can be marked as being unstable, which can be helpful when developing a new edition feature, and you want to test out a migration lint. The feature gate can be specified in the lint's declaration like this: declare_lint! { pub SOME_LINT_NAME, Allow, \"my cool lint\", @feature_gate = sym::my_feature_name;\n} Then, the lint will only fire if the user has the appropriate #![feature(my_feature_name)]. Just beware that when it comes time to do crater runs testing the migration that the feature gate will need to be removed. Alternatively, you can implement an allow-by-default migration lint for an upcoming unstable edition without a feature gate. Although users may technically be able to enable the lint before the edition is stabilized, most will not notice the new lint exists, and it should not disrupt anything or cause any breakage.","breadcrumbs":"Editions » Lints and stability","id":"462","title":"Lints and stability"},"463":{"body":"In the 2018 edition, there was a concept of \"idiom lints\" under the rust-2018-idioms lint group. The concept was to have new idiomatic styles under a different lint group separate from the forced migrations under the rust-2018-compatibility lint group, giving some flexibility as to how people opt-in to certain edition changes. Overall this approach did not seem to work very well, and it is unlikely that we will use the idiom groups in the future.","breadcrumbs":"Editions » Idiom lints","id":"463","title":"Idiom lints"},"464":{"body":"","breadcrumbs":"Editions » Standard library changes","id":"464","title":"Standard library changes"},"465":{"body":"Each edition comes with a specific prelude of the standard library. These are implemented as regular modules in core::prelude and std::prelude . New items can be added to the prelude, just beware that this can conflict with user's pre-existing code. Usually a migration lint should be used to migrate existing code to avoid the conflict. For example, rust_2021_prelude_collisions is used to handle the collisions with the new traits in 2021.","breadcrumbs":"Editions » Preludes","id":"465","title":"Preludes"},"466":{"body":"Usually it is not possible to make breaking changes to the standard library. In some rare cases, the teams may decide that the behavior change is important enough to break this rule. The downside is that this requires special handling in the compiler to be able to distinguish when the old and new signatures or behaviors should be used. One example is the change in method resolution for into_iter() of arrays . This was implemented with the #[rustc_skip_array_during_method_dispatch] attribute on the IntoIterator trait which then tells the compiler to consider an alternate trait resolution choice based on the edition. Another example is the panic! macro changes . This required defining multiple panic macros, and having the built-in panic macro implementation determine the appropriate way to expand it. This also included the non_fmt_panics migration lint to adjust old code to the new form, which required the rustc_diagnostic_item attribute to detect the usage of the panic macro. In general it is recommended to avoid these special cases except for very high value situations.","breadcrumbs":"Editions » Customized language behavior","id":"466","title":"Customized language behavior"},"467":{"body":"Updating the edition of the standard library itself roughly involves the following process: Wait until the newly stabilized edition has reached beta and the bootstrap compiler has been updated. Apply migration lints. This can be an involved process since some code is in external submodules [1] , and the standard library makes heavy use of conditional compilation. Also, running cargo fix --edition can be impractical on the standard library itself. One approach is to individually add #![warn(...)] at the top of each crate for each lint, run ./x check library, apply the migrations, remove the #![warn(...)] and commit each migration separately. You'll likely need to run ./x check with --target for many different targets to get full coverage (otherwise you'll likely spend days or weeks getting CI to pass) [2] . See also the advanced migration guide for more tips. Apply migrations to backtrace-rs . Example for 2024 . Note that this doesn't update the edition of the crate itself because that is published independently on crates.io, and that would otherwise restrict the minimum Rust version. Consider adding some #![deny()] attributes to avoid regressions until its edition gets updated. Apply migrations to stdarch , and update its edition, and formatting. Example for 2024 . Post PRs to update the backtrace and stdarch submodules, and wait for those to land. Apply migration lints to the standard library crates, and update their edition. I recommend working one crate at a time starting with core. Example for 2024 . This will hopefully change in the future to pull these submodules into rust-lang/rust. You'll also likely need to do a lot of testing for different targets, and this is where docker testing comes in handy.","breadcrumbs":"Editions » Migrating the standard library edition","id":"467","title":"Migrating the standard library edition"},"468":{"body":"After the edition team has given the go-ahead, the process for stabilizing an edition is roughly: Update LATEST_STABLE_EDITION . Update Edition::is_stable . Hunt and find any document that refers to edition by number, and update it: --edition flag Rustdoc attributes Clean up any tests that use the //@ edition header to remove the -Zunstable-options flag to ensure they are indeed stable. Note: Ideally this should be automated, see #133582 . Bless any tests that change. Update lint-docs to default to the new edition. See example for 2024 .","breadcrumbs":"Editions » Stabilizing an edition","id":"468","title":"Stabilizing an edition"},"469":{"body":"Bootstrapping is the process of using a compiler to compile itself. More accurately, it means using an older compiler to compile a newer version of the same compiler. This raises a chicken-and-egg paradox: where did the first compiler come from? It must have been written in a different language. In Rust's case it was written in OCaml . However, it was abandoned long ago, and the only way to build a modern version of rustc is with a slightly less modern version. This is exactly how x.py works: it downloads the current beta release of rustc, then uses it to compile the new compiler. In this section, we give a high-level overview of what Bootstrap does , followed by a high-level introduction to how Bootstrap does it . Additionally, see debugging bootstrap to learn about debugging methods.","breadcrumbs":"Prologue » Bootstrapping the compiler","id":"469","title":"Bootstrapping the compiler"},"47":{"body":"Selecting vscode in ./x setup editor will prompt you to create a .vscode/settings.json file which will configure Visual Studio code. The recommended rust-analyzer settings live at src/etc/rust_analyzer_settings.json . If running ./x check on save is inconvenient, in VS Code you can use a Build Task instead: // .vscode/tasks.json\n{ \"version\": \"2.0.0\", \"tasks\": [ { \"label\": \"./x check\", \"command\": \"./x check\", \"type\": \"shell\", \"problemMatcher\": \"$rustc\", \"presentation\": { \"clear\": true }, \"group\": { \"kind\": \"build\", \"isDefault\": true } } ]\n}","breadcrumbs":"How to build and run the compiler » Suggested workflows » Visual Studio Code","id":"47","title":"Visual Studio Code"},"470":{"body":"Stages of bootstrapping Overview Stage 0: the pre-compiled compiler Stage 1: from current code, by an earlier compiler Stage 2: the truly current compiler Stage 3: the same-result test Building the stages Complications of bootstrapping Understanding stages of bootstrap Overview Build artifacts Examples Examples of what not to do Building vs. running Stages and std Cross-compiling rustc What is a 'sysroot'? -Z force-unstable-if-unmarked Passing flags to commands invoked by bootstrap Environment Variables Clarification of build command's stdout Building stage0 {std,compiler} artifacts Copying stage0 {std,rustc} Assembling stage1 compiler Bootstrapping is the process of using a compiler to compile itself. More accurately, it means using an older compiler to compile a newer version of the same compiler. This raises a chicken-and-egg paradox: where did the first compiler come from? It must have been written in a different language. In Rust's case it was written in OCaml . However, it was abandoned long ago, and the only way to build a modern version of rustc is with a slightly less modern version. This is exactly how ./x.py works: it downloads the current beta release of rustc, then uses it to compile the new compiler. Note that this documentation mostly covers user-facing information. See bootstrap/README.md to read about bootstrap internals.","breadcrumbs":"What Bootstrapping does » What Bootstrapping does","id":"470","title":"What Bootstrapping does"},"471":{"body":"","breadcrumbs":"What Bootstrapping does » Stages of bootstrapping","id":"471","title":"Stages of bootstrapping"},"472":{"body":"Stage 0: the pre-compiled compiler Stage 1: from current code, by an earlier compiler Stage 2: the truly current compiler Stage 3: the same-result test Compiling rustc is done in stages. Here's a diagram, adapted from Jynn Nelson's talk on bootstrapping at RustConf 2022, with detailed explanations below. The A, B, C, and D show the ordering of the stages of bootstrapping. Blue nodes are downloaded, yellow nodes are built with the stage0 compiler, and green nodes are built with the stage1 compiler. graph TD s0c[\"stage0 compiler (1.86.0-beta.1)\"]:::downloaded -->|A| s0l(\"stage0 std (1.86.0-beta.1)\"):::downloaded; s0c & s0l --- stepb[ ]:::empty; stepb -->|B| s0ca[\"stage0 compiler artifacts (1.87.0-dev)\"]:::with-s0c; s0ca -->|copy| s1c[\"stage1 compiler (1.87.0-dev)\"]:::with-s0c; s1c -->|C| s1l(\"stage1 std (1.87.0-dev)\"):::with-s1c; s1c & s1l --- stepd[ ]:::empty; stepd -->|D| s1ca[\"stage1 compiler artifacts (1.87.0-dev)\"]:::with-s1c; s1ca -->|copy| s2c[\"stage2 compiler\"]:::with-s1c; classDef empty width:0px,height:0px; classDef downloaded fill: lightblue; classDef with-s0c fill: yellow; classDef with-s1c fill: lightgreen;","breadcrumbs":"What Bootstrapping does » Overview","id":"472","title":"Overview"},"473":{"body":"The stage0 compiler is by default the very recent beta rustc compiler and its associated dynamic libraries, which ./x.py will download for you. (You can also configure ./x.py to change stage0 to something else.) The precompiled stage0 compiler is then used only to compile src/bootstrap and compiler/rustc with precompiled stage0 std. Note that to build the stage1 compiler we use the precompiled stage0 compiler and std. Therefore, to use a compiler with a std that is freshly built from the tree, you need to build the stage2 compiler. There are two concepts at play here: a compiler (with its set of dependencies) and its 'target' or 'object' libraries (std and rustc). Both are staged, but in a staggered manner.","breadcrumbs":"What Bootstrapping does » Stage 0: the pre-compiled compiler","id":"473","title":"Stage 0: the pre-compiled compiler"},"474":{"body":"The rustc source code is then compiled with the stage0 compiler to produce the stage1 compiler.","breadcrumbs":"What Bootstrapping does » Stage 1: from current code, by an earlier compiler","id":"474","title":"Stage 1: from current code, by an earlier compiler"},"475":{"body":"We then rebuild the compiler using stage1 compiler with in-tree std to produce the stage2 compiler. The stage1 compiler itself was built by precompiled stage0 compiler and std and hence not by the source in your working directory. This means that the ABI generated by the stage0 compiler may not match the ABI that would have been made by the stage1 compiler, which can cause problems for dynamic libraries, tests and tools using rustc_private. Note that the proc_macro crate avoids this issue with a C FFI layer called proc_macro::bridge, allowing it to be used with stage1. The stage2 compiler is the one distributed with rustup and all other install methods. However, it takes a very long time to build because one must first build the new compiler with an older compiler and then use that to build the new compiler with itself. For development, you usually only want to use --stage 1 flag to build things. See Building the compiler .","breadcrumbs":"What Bootstrapping does » Stage 2: the truly current compiler","id":"475","title":"Stage 2: the truly current compiler"},"476":{"body":"Stage 3 is optional. To sanity check our new compiler we can build the libraries with the stage2 compiler. The result ought to be identical to before, unless something has broken.","breadcrumbs":"What Bootstrapping does » Stage 3: the same-result test","id":"476","title":"Stage 3: the same-result test"},"477":{"body":"The script ./x tries to be helpful and pick the stage you most likely meant for each subcommand. Here are some x commands with their default stages: check: --stage 1 clippy: --stage 1 doc: --stage 1 build: --stage 1 test: --stage 1 dist: --stage 2 install: --stage 2 bench: --stage 2 You can always override the stage by passing --stage N explicitly. For more information about stages, see below .","breadcrumbs":"What Bootstrapping does » Building the stages","id":"477","title":"Building the stages"},"478":{"body":"Since the build system uses the current beta compiler to build a stage1 bootstrapping compiler, the compiler source code can't use some features until they reach beta (because otherwise the beta compiler doesn't support them). On the other hand, for compiler intrinsics and internal features, the features have to be used. Additionally, the compiler makes heavy use of nightly features (#![feature(...)]). How can we resolve this problem? There are two methods used: The build system sets --cfg bootstrap when building with stage0, so we can use cfg(not(bootstrap)) to only use features when built with stage1. Setting --cfg bootstrap in this way is used for features that were just stabilized, which require #![feature(...)] when built with stage0, but not for stage1. The build system sets RUSTC_BOOTSTRAP=1. This special variable means to break the stability guarantees of Rust: allowing use of #![feature(...)] with a compiler that's not nightly. Setting RUSTC_BOOTSTRAP=1 should never be used except when bootstrapping the compiler.","breadcrumbs":"What Bootstrapping does » Complications of bootstrapping","id":"478","title":"Complications of bootstrapping"},"479":{"body":"","breadcrumbs":"What Bootstrapping does » Understanding stages of bootstrap","id":"479","title":"Understanding stages of bootstrap"},"48":{"body":"For Neovim users, there are a few options. The easiest way is by using neoconf.nvim , which allows for project-local configuration files with the native LSP. The steps for how to use it are below. Note that they require rust-analyzer to already be configured with Neovim. Steps for this can be found here . First install the plugin. This can be done by following the steps in the README. Run ./x setup editor, and select vscode to create a .vscode/settings.json file. neoconf is able to read and update rust-analyzer settings automatically when the project is opened when this file is detected. If you're using coc.nvim, you can run ./x setup editor and select vim to create a .vim/coc-settings.json. The settings can be edited with :CocLocalConfig. The recommended settings live at src/etc/rust_analyzer_settings.json . Another way is without a plugin, and creating your own logic in your configuration. The following code will work for any checkout of rust-lang/rust (newer than Febuary 2025): local function expand_config_variables(option) local var_placeholders = { ['${workspaceFolder}'] = function(_) return vim.lsp.buf.list_workspace_folders()[1] end, } if type(option) == \"table\" then local mt = getmetatable(option) local result = {} for k, v in pairs(option) do result[expand_config_variables(k)] = expand_config_variables(v) end return setmetatable(result, mt) end if type(option) ~= \"string\" then return option end local ret = option for key, fn in pairs(var_placeholders) do ret = ret:gsub(key, fn) end return ret\nend\nlspconfig.rust_analyzer.setup { root_dir = function() local default = lspconfig.rust_analyzer.config_def.default_config.root_dir() -- the default root detection uses the cargo workspace root. -- but for rust-lang/rust, the standard library is in its own workspace. -- use the git root instead. local compiler_config = vim.fs.joinpath(default, \"../src/bootstrap/defaults/config.compiler.toml\") if vim.fs.basename(default) == \"library\" and vim.uv.fs_stat(compiler_config) then return vim.fs.dirname(default) end return default end, on_init = function(client) local path = client.workspace_folders[1].name local config = vim.fs.joinpath(path, \"src/etc/rust_analyzer_zed.json\") if vim.uv.fs_stat(config) then -- load rust-lang/rust settings local file = io.open(config) local json = vim.json.decode(file:read(\"*a\")) client.config.settings[\"rust-analyzer\"] = expand_config_variables(json.lsp[\"rust-analyzer\"].initialization_options) client.notify(\"workspace/didChangeConfiguration\", { settings = client.config.settings }) end return true end\n} If you would like to use the build task that is described above, you may either make your own command in your config, or you can install a plugin such as overseer.nvim that can read VSCode's task.json files , and follow the same instructions as above.","breadcrumbs":"How to build and run the compiler » Suggested workflows » Neovim","id":"48","title":"Neovim"},"480":{"body":"This is a detailed look into the separate bootstrap stages. The convention ./x uses is that: A --stage N flag means to run the stage N compiler (stageN/rustc). A \"stage N artifact\" is a build artifact that is produced by the stage N compiler. The stage N+1 compiler is assembled from stage N artifacts . This process is called uplifting . Build artifacts Anything you can build with ./x is a build artifact . Build artifacts include, but are not limited to: binaries, like stage0-rustc/rustc-main shared objects, like stage0-sysroot/rustlib/libstd-6fae108520cf72fe.so rlib files, like stage0-sysroot/rustlib/libstd-6fae108520cf72fe.rlib HTML files generated by rustdoc, like doc/std Examples ./x test tests/ui means to build the stage1 compiler and run compiletest on it. If you're working on the compiler, this is normally the test command you want. ./x test --stage 0 library/std means to run tests on the standard library without building rustc from source ('build with stage0, then test the artifacts'). If you're working on the standard library, this is normally the test command you want. ./x build --stage 0 means to build with the stage0 rustc. ./x doc --stage 0 means to document using the stage0 rustdoc. Examples of what not to do ./x test --stage 0 tests/ui is not useful: it runs tests on the beta compiler and doesn't build rustc from source. Use test tests/ui instead, which builds stage1 from source. ./x test --stage 0 compiler/rustc builds the compiler but runs no tests: it's running cargo test -p rustc, but cargo doesn't understand Rust's tests. You shouldn't need to use this, use test instead (without arguments). ./x build --stage 0 compiler/rustc builds the compiler, but does not build libstd or even libcore. Most of the time, you'll want ./x build library instead, which allows compiling programs without needing to define lang items.","breadcrumbs":"What Bootstrapping does » Overview","id":"480","title":"Overview"},"481":{"body":"In short, stage 0 uses the stage0 compiler to create stage0 artifacts which will later be uplifted to be the stage1 compiler . In each stage, two major steps are performed: std is compiled by the stage N compiler. That std is linked to programs built by the stage N compiler, including the stage N artifacts (stage N+1 compiler). This is somewhat intuitive if one thinks of the stage N artifacts as \"just\" another program we are building with the stage N compiler: build --stage N compiler/rustc is linking the stage N artifacts to the std built by the stage N compiler.","breadcrumbs":"What Bootstrapping does » Building vs. running","id":"481","title":"Building vs. running"},"482":{"body":"Note that there are two std libraries in play here: The library linked to stageN/rustc, which was built by stage N-1 (stage N-1 std) The library used to compile programs with stageN/rustc, which was built by stage N (stage N std). Stage N std is pretty much necessary for any useful work with the stage N compiler. Without it, you can only compile programs with #![no_core] -- not terribly useful! The reason these need to be different is because they aren't necessarily ABI-compatible: there could be new layout optimizations, changes to MIR, or other changes to Rust metadata on nightly that aren't present in beta. This is also where --keep-stage 1 library/std comes into play. Since most changes to the compiler don't actually change the ABI, once you've produced a std in stage1, you can probably just reuse it with a different compiler. If the ABI hasn't changed, you're good to go, no need to spend time recompiling that std. The flag --keep-stage simply instructs the build script to assumes the previous compile is fine and copies those artifacts into the appropriate place, skipping the cargo invocation.","breadcrumbs":"What Bootstrapping does » Stages and std","id":"482","title":"Stages and std"},"483":{"body":"Cross-compiling is the process of compiling code that will run on another architecture. For instance, you might want to build an ARM version of rustc using an x86 machine. Building stage2 std is different when you are cross-compiling. This is because ./x uses the following logic: if HOST and TARGET are the same, it will reuse stage1 std for stage2! This is sound because stage1 std was compiled with the stage1 compiler, i.e. a compiler using the source code you currently have checked out. So it should be identical (and therefore ABI-compatible) to the std that stage2/rustc would compile. However, when cross-compiling, stage1 std will only run on the host. So the stage2 compiler has to recompile std for the target. (See in the table how stage2 only builds non-host std targets).","breadcrumbs":"What Bootstrapping does » Cross-compiling rustc","id":"483","title":"Cross-compiling rustc"},"484":{"body":"When you build a project with cargo, the build artifacts for dependencies are normally stored in target/debug/deps. This only contains dependencies cargo knows about; in particular, it doesn't have the standard library. Where do std or proc_macro come from? They come from the sysroot , the root of a number of directories where the compiler loads build artifacts at runtime. The sysroot doesn't just store the standard library, though - it includes anything that needs to be loaded at runtime. That includes (but is not limited to): Libraries libstd/libtest/libproc_macro. Compiler crates themselves, when using rustc_private. In-tree these are always present; out of tree, you need to install rustc-dev with rustup. Shared object file libLLVM.so for the LLVM project. In-tree this is either built from source or downloaded from CI; out-of-tree, you need to install llvm-tools-preview with rustup. All the artifacts listed so far are compiler runtime dependencies. You can see them with rustc --print sysroot: $ ls $(rustc --print sysroot)/lib\nlibchalk_derive-0685d79833dc9b2b.so libstd-25c6acf8063a3802.so\nlibLLVM-11-rust-1.50.0-nightly.so libtest-57470d2aa8f7aa83.so\nlibrustc_driver-4f0cc9f50e53f0ba.so libtracing_attributes-e4be92c35ab2a33b.so\nlibrustc_macros-5f0ec4a119c6ac86.so rustlib There are also runtime dependencies for the standard library! These are in lib/rustlib/, not lib/ directly. $ ls $(rustc --print sysroot)/lib/rustlib/x86_64-unknown-linux-gnu/lib | head -n 5\nlibaddr2line-6c8e02b8fedc1e5f.rlib\nlibadler-9ef2480568df55af.rlib\nliballoc-9c4002b5f79ba0e1.rlib\nlibcfg_if-512eb53291f6de7e.rlib\nlibcompiler_builtins-ef2408da76957905.rlib Directory lib/rustlib/ includes libraries like hashbrown and cfg_if, which are not part of the public API of the standard library, but are used to implement it. Also lib/rustlib/ is part of the search path for linkers, but lib will never be part of the search path. -Z force-unstable-if-unmarked Since lib/rustlib/ is part of the search path we have to be careful about which crates are included in it. In particular, all crates except for the standard library are built with the flag -Z force-unstable-if-unmarked, which means that you have to use #![feature(rustc_private)] in order to load it (as opposed to the standard library, which is always available). The -Z force-unstable-if-unmarked flag has a variety of purposes to help enforce that the correct crates are marked as unstable. It was introduced primarily to allow rustc and the standard library to link to arbitrary crates on crates.io which do not themselves use staged_api. rustc also relies on this flag to mark all of its crates as unstable with the rustc_private feature so that each crate does not need to be carefully marked with unstable. This flag is automatically applied to all of rustc and the standard library by the bootstrap scripts. This is needed because the compiler and all of its dependencies are shipped in sysroot to all users. This flag has the following effects: Marks the crate as \"unstable\" with the rustc_private feature if it is not itself marked as stable or unstable. Allows these crates to access other forced-unstable crates without any need for attributes. Normally a crate would need a #![feature(rustc_private)] attribute to use other unstable crates. However, that would make it impossible for a crate from crates.io to access its own dependencies since that crate won't have a feature(rustc_private) attribute, but everything is compiled with -Z force-unstable-if-unmarked. Code which does not use -Z force-unstable-if-unmarked should include the #![feature(rustc_private)] crate attribute to access these forced-unstable crates. This is needed for things which link rustc its self, such as MIRI or clippy. You can find more discussion about sysroots in: The rustdoc PR explaining why it uses extern crate for dependencies loaded from sysroot Discussions about sysroot on Zulip Discussions about building rustdoc out of tree","breadcrumbs":"What Bootstrapping does » What is a 'sysroot'?","id":"484","title":"What is a 'sysroot'?"},"485":{"body":"Conveniently ./x allows you to pass stage-specific flags to rustc and cargo when bootstrapping. The RUSTFLAGS_BOOTSTRAP environment variable is passed as RUSTFLAGS to the bootstrap stage (stage0), and RUSTFLAGS_NOT_BOOTSTRAP is passed when building artifacts for later stages. RUSTFLAGS will work, but also affects the build of bootstrap itself, so it will be rare to want to use it. Finally, MAGIC_EXTRA_RUSTFLAGS bypasses the cargo cache to pass flags to rustc without recompiling all dependencies. RUSTDOCFLAGS, RUSTDOCFLAGS_BOOTSTRAP and RUSTDOCFLAGS_NOT_BOOTSTRAP are analogous to RUSTFLAGS, but for rustdoc. CARGOFLAGS will pass arguments to cargo itself (e.g. --timings). CARGOFLAGS_BOOTSTRAP and CARGOFLAGS_NOT_BOOTSTRAP work analogously to RUSTFLAGS_BOOTSTRAP. --test-args will pass arguments through to the test runner. For tests/ui, this is compiletest. For unit tests and doc tests this is the libtest runner. Most test runners accept --help, which you can use to find out the options accepted by the runner.","breadcrumbs":"What Bootstrapping does » Passing flags to commands invoked by bootstrap","id":"485","title":"Passing flags to commands invoked by bootstrap"},"486":{"body":"During bootstrapping, there are a bunch of compiler-internal environment variables that are used. If you are trying to run an intermediate version of rustc, sometimes you may need to set some of these environment variables manually. Otherwise, you get an error like the following: thread 'main' panicked at 'RUSTC_STAGE was not set: NotPresent', library/core/src/result.rs:1165:5 If ./stageN/bin/rustc gives an error about environment variables, that usually means something is quite wrong -- such as you're trying to compile rustc or std or something which depends on environment variables. In the unlikely case that you actually need to invoke rustc in such a situation, you can tell the bootstrap shim to print all env variables by adding -vvv to your x command. Finally, bootstrap makes use of the cc-rs crate which has its own method of configuring C compilers and C flags via environment variables.","breadcrumbs":"What Bootstrapping does » Environment Variables","id":"486","title":"Environment Variables"},"487":{"body":"In this part, we will investigate the build command's stdout in an action (similar, but more detailed and complete documentation compare to topic above). When you execute x build --dry-run command, the build output will be something like the following: Building stage0 library artifacts (x86_64-unknown-linux-gnu -> x86_64-unknown-linux-gnu)\nCopying stage0 library from stage0 (x86_64-unknown-linux-gnu -> x86_64-unknown-linux-gnu / x86_64-unknown-linux-gnu)\nBuilding stage0 compiler artifacts (x86_64-unknown-linux-gnu -> x86_64-unknown-linux-gnu)\nCopying stage0 rustc from stage0 (x86_64-unknown-linux-gnu -> x86_64-unknown-linux-gnu / x86_64-unknown-linux-gnu)\nAssembling stage1 compiler (x86_64-unknown-linux-gnu)\nBuilding stage1 library artifacts (x86_64-unknown-linux-gnu -> x86_64-unknown-linux-gnu)\nCopying stage1 library from stage1 (x86_64-unknown-linux-gnu -> x86_64-unknown-linux-gnu / x86_64-unknown-linux-gnu)\nBuilding stage1 tool rust-analyzer-proc-macro-srv (x86_64-unknown-linux-gnu)\nBuilding rustdoc for stage1 (x86_64-unknown-linux-gnu)","breadcrumbs":"What Bootstrapping does » Clarification of build command's stdout","id":"487","title":"Clarification of build command's stdout"},"488":{"body":"These steps use the provided (downloaded, usually) compiler to compile the local Rust source into libraries we can use.","breadcrumbs":"What Bootstrapping does » Building stage0 {std,compiler} artifacts","id":"488","title":"Building stage0 {std,compiler} artifacts"},"489":{"body":"This copies the library and compiler artifacts from cargo into stage0-sysroot/lib/rustlib/{target-triple}/lib","breadcrumbs":"What Bootstrapping does » Copying stage0 {std,rustc}","id":"489","title":"Copying stage0 {std,rustc}"},"49":{"body":"Emacs provides support for rust-analyzer with project-local configuration through Eglot . Steps for setting up Eglot with rust-analyzer can be found here . Having set up Emacs & Eglot for Rust development in general, you can run ./x setup editor and select emacs, which will prompt you to create .dir-locals.el with the recommended configuration for Eglot. The recommended settings live at src/etc/rust_analyzer_eglot.el . For more information on project-specific Eglot configuration, consult the manual .","breadcrumbs":"How to build and run the compiler » Suggested workflows » Emacs","id":"49","title":"Emacs"},"490":{"body":"This copies the libraries we built in \"building stage0 ... artifacts\" into the stage1 compiler's lib/ directory. These are the host libraries that the compiler itself uses to run. These aren't actually used by artifacts the new compiler generates. This step also copies the rustc and rustdoc binaries we generated into build/$HOST/stage/bin. The stage1/bin/rustc is a fully functional compiler built with stage0 (precompiled) compiler and std. To use a compiler built entirely from source with the in-tree compiler and std, you need to build the stage2 compiler, which is compiled using the stage1 (in-tree) compiler and std.","breadcrumbs":"What Bootstrapping does » Assembling stage1 compiler","id":"490","title":"Assembling stage1 compiler"},"491":{"body":"The core concept in Bootstrap is a build Step , which are chained together by Builder::ensure . Builder::ensure takes a Step as input, and runs the Step if and only if it has not already been run. Let's take a closer look at Step .","breadcrumbs":"How Bootstrap does it » How Bootstrap does it","id":"491","title":"How Bootstrap does it"},"492":{"body":"A Step represents a granular collection of actions involved in the process of producing some artifact. It can be thought of like a rule in Makefiles. The Step trait is defined as: pub trait Step: 'static + Clone + Debug + PartialEq + Eq + Hash { type Output: Clone; const DEFAULT: bool = false; const ONLY_HOSTS: bool = false; // Required methods fn run(self, builder: &Builder<'_>) -> Self::Output; fn should_run(run: ShouldRun<'_>) -> ShouldRun<'_>; // Provided method fn make_run(_run: RunConfig<'_>) { ... }\n} run is the function that is responsible for doing the work. Builder::ensure invokes run. should_run is the command-line interface, which determines if an invocation such as x build foo should run a given Step . In a \"default\" context where no paths are provided, then make_run is called directly. make_run is invoked only for things directly asked via the CLI and not for steps which are dependencies of other steps.","breadcrumbs":"How Bootstrap does it » Synopsis of Step","id":"492","title":"Synopsis of Step"},"493":{"body":"There's a couple of preliminary steps before core Bootstrap code is reached: Shell script or make: ./x or ./x.ps1 or make Convenience wrapper script: x.py src/bootstrap/bootstrap.py src/bootstrap/src/bin/main.rs See src/bootstrap/README.md for a more specific description of the implementation details.","breadcrumbs":"How Bootstrap does it » The entry points","id":"493","title":"The entry points"},"494":{"body":"There are three types of tools you can write in bootstrap: Mode::ToolBootstrap Use this for tools that don’t need anything from the in-tree compiler and can run with the stage0 rustc. The output is placed in the \"stage0-bootstrap-tools\" directory. This mode is for general-purpose tools built entirely with the stage0 compiler, including target libraries and only works for stage 0. Mode::ToolStd Use this for tools that rely on the locally built std. The output goes into the \"stageN-tools\" directory. This mode is rarely used, mainly for compiletest which requires libtest. Mode::ToolRustc Use this for tools that depend on both the locally built rustc and the target std. This is more complex than the other modes because the tool must be built with the same compiler used for rustc and placed in the \"stageN-tools\" directory. When you choose Mode::ToolRustc, ToolBuild implementation takes care of this automatically. If you need to use the builder’s compiler for something specific, you can get it from ToolBuildResult, which is returned by the tool's Step . Regardless of the tool type you must return ToolBuildResult from the tool’s Step implementation and use ToolBuild inside it.","breadcrumbs":"Writing tools in Bootstrap » Writing tools in Bootstrap","id":"494","title":"Writing tools in Bootstrap"},"495":{"body":"There are two main ways to debug bootstrap itself. The first is through println logging, and the second is through the tracing feature. FIXME: this section should be expanded","breadcrumbs":"Debugging bootstrap » Debugging bootstrap","id":"495","title":"Debugging bootstrap"},"496":{"body":"Bootstrap has extensive unstructured logging. Most of it is gated behind the --verbose flag (pass -vv for even more detail). If you want to know which Step ran a command, you could invoke bootstrap like so: $ ./x dist rustc --dry-run -vv\nlearning about cargo\nrunning: RUSTC_BOOTSTRAP=\"1\" \"/home/jyn/src/rust2/build/x86_64-unknown-linux-gnu/stage0/bin/cargo\" \"metadata\" \"--format-version\" \"1\" \"--no-deps\" \"--manifest-path\" \"/home/jyn/src/rust2/Cargo.toml\" (failure_mode=Exit) (created at src/bootstrap/src/core/metadata.rs:81:25, executed at src/bootstrap/src/core/metadata.rs:92:50)\nrunning: RUSTC_BOOTSTRAP=\"1\" \"/home/jyn/src/rust2/build/x86_64-unknown-linux-gnu/stage0/bin/cargo\" \"metadata\" \"--format-version\" \"1\" \"--no-deps\" \"--manifest-path\" \"/home/jyn/src/rust2/library/Cargo.toml\" (failure_mode=Exit) (created at src/bootstrap/src/core/metadata.rs:81:25, executed at src/bootstrap/src/core/metadata.rs:92:50)\n> Assemble { target_compiler: Compiler { stage: 1, host: x86_64-unknown-linux-gnu } } > Libdir { compiler: Compiler { stage: 1, host: x86_64-unknown-linux-gnu }, target: x86_64-unknown-linux-gnu } > Sysroot { compiler: Compiler { stage: 1, host: x86_64-unknown-linux-gnu }, force_recompile: false }\nRemoving sysroot /home/jyn/src/rust2/build/tmp-dry-run/x86_64-unknown-linux-gnu/stage1 to avoid caching bugs < Sysroot { compiler: Compiler { stage: 1, host: x86_64-unknown-linux-gnu }, force_recompile: false } < Libdir { compiler: Compiler { stage: 1, host: x86_64-unknown-linux-gnu }, target: x86_64-unknown-linux-gnu }\n... This will go through all the recursive dependency calculations, where Steps internally call builder.ensure(), without actually running cargo or the compiler. In some cases, even this may not be enough logging (if so, please add more!). In that case, you can omit --dry-run, which will show the normal output inline with the debug logging: c Sysroot { compiler: Compiler { stage: 0, host: x86_64-unknown-linux-gnu }, force_recompile: false }\nusing sysroot /home/jyn/src/rust2/build/x86_64-unknown-linux-gnu/stage0-sysroot\nBuilding stage0 library artifacts (x86_64-unknown-linux-gnu)\nrunning: cd \"/home/jyn/src/rust2\" && env ... RUSTC_VERBOSE=\"2\" RUSTC_WRAPPER=\"/home/jyn/src/rust2/build/bootstrap/debug/rustc\" \"/home/jyn/src/rust2/build/x86_64-unknown-linux-gnu/stage0/bin/cargo\" \"build\" \"--target\" \"x86_64-unknown-linux-gnu\" \"-Zbinary-dep-depinfo\" \"-Zroot-dir=/home/jyn/src/rust2\" \"-v\" \"-v\" \"--manifest-path\" \"/home/jyn/src/rust2/library/sysroot/Cargo.toml\" \"--message-format\" \"json-render-diagnostics\" 0.293440230s INFO prepare_target{force=false package_id=sysroot v0.0.0 (/home/jyn/src/rust2/library/sysroot) target=\"sysroot\"}: cargo::core::compiler::fingerprint: fingerprint error for sysroot v0.0.0 (/home/jyn/src/rust2/library/sysroot)/Build/TargetInner { name_inferred: true, ..: lib_target(\"sysroot\", [\"lib\"], \"/home/jyn/src/rust2/library/sysroot/src/lib.rs\", Edition2021) }\n... In most cases this should not be necessary. TODO: we should convert all this to structured logging so it's easier to control precisely.","breadcrumbs":"Debugging bootstrap » println logging","id":"496","title":"println logging"},"497":{"body":"Bootstrap has conditional tracing setup to provide structured logging.","breadcrumbs":"Debugging bootstrap » tracing in bootstrap","id":"497","title":"tracing in bootstrap"},"498":{"body":"Bootstrap will conditionally build tracing support and enable tracing output if the BOOTSTRAP_TRACING env var is set. Basic usage Example basic usage [1] : It is not recommended to use just BOOTSTRAP_TRACING=TRACE because that will dump everything at TRACE level, including logs intentionally gated behind custom targets as they are too verbose even for TRACE level by default. $ BOOTSTRAP_TRACING=bootstrap=TRACE ./x build library --stage 1 Example output [2] : $ BOOTSTRAP_TRACING=bootstrap=TRACE ./x check src/bootstrap/\nBuilding bootstrap Compiling bootstrap v0.0.0 (/home/joe/repos/rust/src/bootstrap) Finished `dev` profile [unoptimized] target(s) in 2.74s DEBUG bootstrap parsing flags bootstrap::core::config::flags::Flags::parse args=[\"check\", \"src/bootstrap/\"] DEBUG bootstrap parsing config based on flags DEBUG bootstrap creating new build based on config bootstrap::Build::build TRACE bootstrap setting up job management TRACE bootstrap downloading rustfmt early bootstrap::handling hardcoded subcommands (Format, Suggest, Perf) DEBUG bootstrap not a hardcoded subcommand; returning to normal handling, cmd=Check { all_targets: false } DEBUG bootstrap handling subcommand normally bootstrap::executing real run bootstrap::(1) executing dry-run sanity-check bootstrap::(2) executing actual run\nChecking stage0 library artifacts (x86_64-unknown-linux-gnu) Finished `release` profile [optimized + debuginfo] target(s) in 0.04s\nChecking stage0 compiler artifacts {rustc-main, rustc_abi, rustc_arena, rustc_ast, rustc_ast_ir, rustc_ast_lowering, rustc_ast_passes, rustc_ast_pretty, rustc_attr_data_structures, rustc_attr_parsing, rustc_baked_icu_data, rustc_borrowck, rustc_builtin_macros, rustc_codegen_llvm, rustc_codegen_ssa, rustc_const_eval, rustc_data_structures, rustc_driver, rustc_driver_impl, rustc_error_codes, rustc_error_messages, rustc_errors, rustc_expand, rustc_feature, rustc_fluent_macro, rustc_fs_util, rustc_graphviz, rustc_hir, rustc_hir_analysis, rustc_hir_pretty, rustc_hir_typeck, rustc_incremental, rustc_index, rustc_index_macros, rustc_infer, rustc_interface, rustc_lexer, rustc_lint, rustc_lint_defs, rustc_llvm, rustc_log, rustc_macros, rustc_metadata, rustc_middle, rustc_mir_build, rustc_mir_dataflow, rustc_mir_transform, rustc_monomorphize, rustc_next_trait_solver, rustc_parse, rustc_parse_format, rustc_passes, rustc_pattern_analysis, rustc_privacy, rustc_query_impl, rustc_query_system, rustc_resolve, rustc_sanitizers, rustc_serialize, rustc_session, rustc_smir, rustc_span, rustc_symbol_mangling, rustc_target, rustc_trait_selection, rustc_traits, rustc_transmute, rustc_ty_utils, rustc_type_ir, rustc_type_ir_macros, stable_mir} (x86_64-unknown-linux-gnu) Finished `release` profile [optimized + debuginfo] target(s) in 0.23s\nChecking stage0 bootstrap artifacts (x86_64-unknown-linux-gnu) Checking bootstrap v0.0.0 (/home/joe/repos/rust/src/bootstrap) Finished `release` profile [optimized + debuginfo] target(s) in 0.64s DEBUG bootstrap checking for postponed test failures from `test --no-fail-fast`\nBuild completed successfully in 0:00:08 Controlling tracing output The env var BOOTSTRAP_TRACING accepts a tracing env-filter . There are two orthogonal ways to control which kind of tracing logs you want: You can specify the log level , e.g. DEBUG or TRACE. You can also control the log target , e.g. bootstrap or bootstrap::core::config vs custom targets like CONFIG_HANDLING. Custom targets are used to limit what is output when BOOTSTRAP_TRACING=bootstrap=TRACE is used, as they can be too verbose even for TRACE level by default. Currently used custom targets: CONFIG_HANDLING The TRACE filter will enable all trace level or less verbose level tracing output. You can of course combine them (custom target logs are typically gated behind TRACE log level additionally): $ BOOTSTRAP_TRACING=CONFIG_HANDLING=TRACE ./x build library --stage 1 This output is always subject to further changes. FIXME(#96176): specific tracing for compiler() vs compiler_for() The additional targets COMPILER and COMPILER_FOR are used to help trace what builder.compiler() and builder.compiler_for() does. They should be removed if #96176 is resolved.","breadcrumbs":"Debugging bootstrap » Enabling tracing output","id":"498","title":"Enabling tracing output"},"499":{"body":"Both tracing::* macros and the tracing::instrument proc-macro attribute need to be gated behind tracing feature. Examples: #[cfg(feature = \"tracing\")]\nuse tracing::instrument; struct Foo; impl Step for Foo { type Output = (); #[cfg_attr(feature = \"tracing\", instrument(level = \"trace\", name = \"Foo::should_run\", skip_all))] fn should_run(run: ShouldRun<'_>) -> ShouldRun<'_> { trace!(?run, \"entered Foo::should_run\"); todo!() } #[cfg_attr( feature = \"tracing\", instrument( level = \"trace\", name = \"Foo::run\", skip_all, fields(compiler = ?builder.compiler), ), )] fn run(self, builder: &Builder<'_>) -> Self::Output { trace!(?run, \"entered Foo::run\"); todo!() } } For #[instrument], it's recommended to: Gate it behind trace level for fine-granularity, possibly debug level for core functions. Explicitly pick an instrumentation name via name = \"..\" to distinguish between e.g. run of different steps. Take care to not cause diverging behavior via tracing, e.g. building extra things only when tracing infra is enabled.","breadcrumbs":"Debugging bootstrap » Using tracing in bootstrap","id":"499","title":"Using tracing in bootstrap"},"5":{"body":"If you're looking for somewhere to start, check out the following issue search . See the Triage for an explanation of these labels. You can also try filtering the search to areas you're interested in. For example: repo:rust-lang/rust-clippy will only show clippy issues label:T-compiler will only show issues related to the compiler label:A-diagnostics will only show diagnostic issues Not all important or beginner work has issue labels. See below for how to find work that isn't labelled.","breadcrumbs":"Getting Started » Easy or mentored issues","id":"5","title":"Easy or mentored issues"},"50":{"body":"Helix comes with built-in LSP and rust-analyzer support. It can be configured through languages.toml, as described here . You can run ./x setup editor and select helix, which will prompt you to create languages.toml with the recommended configuration for Helix. The recommended settings live at src/etc/rust_analyzer_helix.toml .","breadcrumbs":"How to build and run the compiler » Suggested workflows » Helix","id":"50","title":"Helix"},"500":{"body":"You can use the COMMAND tracing target to trace execution of most commands spawned by bootstrap. If you also use the BOOTSTRAP_PROFILE=1 environment variable, bootstrap will generate a Chrome JSON trace file, which can be visualized in Chrome's chrome://tracing page or on https://ui.perfetto.dev. $ BOOTSTRAP_TRACING=COMMAND=trace BOOTSTRAP_PROFILE=1 ./x build library","breadcrumbs":"Debugging bootstrap » Profiling bootstrap","id":"500","title":"Profiling bootstrap"},"501":{"body":"Unfortunately, because bootstrap is a rust-analyzer.linkedProjects, you can't ask r-a to check/build bootstrap itself with tracing feature enabled to get relevant completions, due to lack of support as described in https://github.com/rust-lang/rust-analyzer/issues/8521 .","breadcrumbs":"Debugging bootstrap » rust-analyzer integration?","id":"501","title":"rust-analyzer integration?"},"502":{"body":"The rust compiler uses some external crates that can run into cyclic dependencies with the compiler itself: the compiler needs an updated crate to build, but the crate needs an updated compiler. This page describes how #[cfg(bootstrap)] can be used to break this cycle.","breadcrumbs":"cfg(bootstrap) in dependencies » cfg(bootstrap) in compiler dependencies","id":"502","title":"cfg(bootstrap) in compiler dependencies"},"503":{"body":"Usually the use of #[cfg(bootstrap)] in an external crate causes a warning: warning: unexpected `cfg` condition name: `bootstrap` --> src/main.rs:1:7 |\n1 | #[cfg(bootstrap)] | ^^^^^^^^^ | = help: expected names are: `docsrs`, `feature`, and `test` and 31 more = help: consider using a Cargo feature instead = help: or consider adding in `Cargo.toml` the `check-cfg` lint config for the lint: [lints.rust] unexpected_cfgs = { level = \"warn\", check-cfg = ['cfg(bootstrap)'] } = help: or consider adding `println!(\"cargo::rustc-check-cfg=cfg(bootstrap)\");` to the top of the `build.rs` = note: see for more information about checking conditional configuration = note: `#[warn(unexpected_cfgs)]` on by default This warning can be silenced by adding these lines to the project's Cargo.toml: [lints.rust]\nunexpected_cfgs = { level = \"warn\", check-cfg = ['cfg(bootstrap)'] } Now #[cfg(bootstrap)] can be used in the crate just like it can be in the compiler: when the bootstrap compiler is used, code annotated with #[cfg(bootstrap)] is compiled, otherwise code annotated with #[cfg(not(bootstrap))] is compiled.","breadcrumbs":"cfg(bootstrap) in dependencies » Enabling #[cfg(bootstrap)]","id":"503","title":"Enabling #[cfg(bootstrap)]"},"504":{"body":"As a concrete example we'll use a change where the #[naked] attribute was made into an unsafe attribute, which caused a cyclic dependency with the compiler-builtins crate.","breadcrumbs":"cfg(bootstrap) in dependencies » The update dance","id":"504","title":"The update dance"},"505":{"body":"In this example it is possible to accept both the old and new behavior at the same time by disabling an error.","breadcrumbs":"cfg(bootstrap) in dependencies » Step 1: accept the new behavior in the compiler ( #139797 )","id":"505","title":"Step 1: accept the new behavior in the compiler ( #139797 )"},"506":{"body":"Now in the crate, use #[cfg(bootstrap)] to use the old behavior, or #[cfg(not(bootstrap))] to use the new behavior.","breadcrumbs":"cfg(bootstrap) in dependencies » Step 2: update the crate ( #821 )","id":"506","title":"Step 2: update the crate ( #821 )"},"507":{"body":"For compiler-builtins this meant a version bump, in other cases it may be a git submodule update.","breadcrumbs":"cfg(bootstrap) in dependencies » Step 3: update the crate version used by the compiler ( #139934 )","id":"507","title":"Step 3: update the crate version used by the compiler ( #139934 )"},"508":{"body":"The updated crate can now be used. In this example that meant that the old behavior could be removed.","breadcrumbs":"cfg(bootstrap) in dependencies » Step 4: remove the old behavior from the compiler ( #139753 )","id":"508","title":"Step 4: remove the old behavior from the compiler ( #139753 )"},"509":{"body":"The remaining parts of this guide discuss how the compiler works. They go through everything from high-level structure of the compiler to how each stage of compilation works. They should be friendly to both readers interested in the end-to-end process of compilation and readers interested in learning about a specific system they wish to contribute to. If anything is unclear, feel free to file an issue on the rustc-dev-guide repo or contact the compiler team, as detailed in this chapter from Part 1 . In this part, we will look at the high-level architecture of the compiler. In particular, we will look at three overarching design choices that impact the whole compiler: the query system, incremental compilation, and interning.","breadcrumbs":"Prologue » High-Level Compiler Architecture","id":"509","title":"High-Level Compiler Architecture"},"51":{"body":"Zed comes with built-in LSP and rust-analyzer support. It can be configured through .zed/settings.json, as described here . Selecting zed in ./x setup editor will prompt you to create a .zed/settings.json file which will configure Zed with the recommended configuration. The recommended rust-analyzer settings live at src/etc/rust_analyzer_zed.json .","breadcrumbs":"How to build and run the compiler » Suggested workflows » Zed","id":"51","title":"Zed"},"510":{"body":"What the compiler does to your code Invocation Lexing and parsing AST lowering MIR lowering Code generation How it does it Intermediate representations Queries ty::Ty Parallelism Bootstrapping References This chapter is about the overall process of compiling a program -- how everything fits together. The Rust compiler is special in two ways: it does things to your code that other compilers don't do (e.g. borrow-checking) and it has a lot of unconventional implementation choices (e.g. queries). We will talk about these in turn in this chapter, and in the rest of the guide, we will look at the individual pieces in more detail.","breadcrumbs":"Overview of the compiler » Overview of the compiler","id":"510","title":"Overview of the compiler"},"511":{"body":"So first, let's look at what the compiler does to your code. For now, we will avoid mentioning how the compiler implements these steps except as needed.","breadcrumbs":"Overview of the compiler » What the compiler does to your code","id":"511","title":"What the compiler does to your code"},"512":{"body":"Compilation begins when a user writes a Rust source program in text and invokes the rustc compiler on it. The work that the compiler needs to perform is defined by command-line options. For example, it is possible to enable nightly features (-Z flags), perform check-only builds, or emit the LLVM Intermediate Representation (LLVM-IR) rather than executable machine code. The rustc executable call may be indirect through the use of cargo. Command line argument parsing occurs in the rustc_driver . This crate defines the compile configuration that is requested by the user and passes it to the rest of the compilation process as a rustc_interface::Config .","breadcrumbs":"Overview of the compiler » Invocation","id":"512","title":"Invocation"},"513":{"body":"The raw Rust source text is analyzed by a low-level lexer located in rustc_lexer . At this stage, the source text is turned into a stream of atomic source code units known as tokens . The lexer supports the Unicode character encoding. The token stream passes through a higher-level lexer located in rustc_parse to prepare for the next stage of the compile process. The Lexer struct is used at this stage to perform a set of validations and turn strings into interned symbols ( interning is discussed later). String interning is a way of storing only one immutable copy of each distinct string value. The lexer has a small interface and doesn't depend directly on the diagnostic infrastructure in rustc. Instead it provides diagnostics as plain data which are emitted in rustc_parse::lexer as real diagnostics. The lexer preserves full fidelity information for both IDEs and procedural macros (sometimes referred to as \"proc-macros\"). The parser translates the token stream from the lexer into an Abstract Syntax Tree (AST) . It uses a recursive descent (top-down) approach to syntax analysis. The crate entry points for the parser are the Parser::parse_crate_mod() and Parser::parse_mod() methods found in rustc_parse::parser::Parser . The external module parsing entry point is rustc_expand::module::parse_external_mod . And the macro-parser entry point is Parser::parse_nonterminal() . Parsing is performed with a set of parser utility methods including bump , check , eat , expect , look_ahead . Parsing is organized by semantic construct. Separate parse_* methods can be found in the rustc_parse directory. The source file name follows the construct name. For example, the following files are found in the parser: expr.rs pat.rs ty.rs stmt.rs This naming scheme is used across many compiler stages. You will find either a file or directory with the same name across the parsing, lowering, type checking, Typed High-level Intermediate Representation (THIR) lowering, and Mid-level Intermediate Representation (MIR) building sources. Macro-expansion, AST-validation, name-resolution, and early linting also take place during the lexing and parsing stage. The rustc_ast::ast ::{ Crate , Expr , Pat , ...} AST nodes are returned from the parser while the standard Diag API is used for error handling. Generally Rust's compiler will try to recover from errors by parsing a superset of Rust's grammar, while also emitting an error type.","breadcrumbs":"Overview of the compiler » Lexing and parsing","id":"513","title":"Lexing and parsing"},"514":{"body":"Next the AST is converted into High-Level Intermediate Representation (HIR) , a more compiler-friendly representation of the AST. This process is called \"lowering\" and involves a lot of desugaring (the expansion and formalizing of shortened or abbreviated syntax constructs) of things like loops and async fn. We then use the HIR to do type inference (the process of automatic detection of the type of an expression), trait solving (the process of pairing up an impl with each reference to a trait), and type checking . Type checking is the process of converting the types found in the HIR ( hir::Ty ), which represent what the user wrote, into the internal representation used by the compiler ( Ty<'tcx> ). It's called type checking because the information is used to verify the type safety, correctness and coherence of the types used in the program.","breadcrumbs":"Overview of the compiler » AST lowering","id":"514","title":"AST lowering"},"515":{"body":"The HIR is further lowered to MIR (used for borrow checking ) by constructing the THIR (an even more desugared HIR used for pattern and exhaustiveness checking) to convert into MIR. We do many optimizations on the MIR because it is generic and that improves later code generation and compilation speed. It is easier to do some optimizations at MIR level than at LLVM-IR level. For example LLVM doesn't seem to be able to optimize the pattern the simplify_try MIR-opt looks for. Rust code is also monomorphized during code generation, which means making copies of all the generic code with the type parameters replaced by concrete types. To do this, we need to collect a list of what concrete types to generate code for. This is called monomorphization collection and it happens at the MIR level.","breadcrumbs":"Overview of the compiler » MIR lowering","id":"515","title":"MIR lowering"},"516":{"body":"We then begin what is simply called code generation or codegen . The code generation stage is when higher-level representations of source are turned into an executable binary. Since rustc uses LLVM for code generation, the first step is to convert the MIR to LLVM-IR. This is where the MIR is actually monomorphized. The LLVM-IR is passed to LLVM, which does a lot more optimizations on it, emitting machine code which is basically assembly code with additional low-level types and annotations added (e.g. an ELF object or WASM). The different libraries/binaries are then linked together to produce the final binary.","breadcrumbs":"Overview of the compiler » Code generation","id":"516","title":"Code generation"},"517":{"body":"Now that we have a high-level view of what the compiler does to your code, let's take a high-level view of how it does all that stuff. There are a lot of constraints and conflicting goals that the compiler needs to satisfy/optimize for. For example, Compilation speed: how fast is it to compile a program? More/better compile-time analyses often means compilation is slower. Also, we want to support incremental compilation, so we need to take that into account. How can we keep track of what work needs to be redone and what can be reused if the user modifies their program? Also we can't store too much stuff in the incremental cache because it would take a long time to load from disk and it could take a lot of space on the user's system... Compiler memory usage: while compiling a program, we don't want to use more memory than we need. Program speed: how fast is your compiled program? More/better compile-time analyses often means the compiler can do better optimizations. Program size: how large is the compiled binary? Similar to the previous point. Compiler compilation speed: how long does it take to compile the compiler? This impacts contributors and compiler maintenance. Implementation complexity: building a compiler is one of the hardest things a person/group can do, and Rust is not a very simple language, so how do we make the compiler's code base manageable? Compiler correctness: the binaries produced by the compiler should do what the input programs says they do, and should continue to do so despite the tremendous amount of change constantly going on. Integration: a number of other tools need to use the compiler in various ways (e.g. cargo, clippy, MIRI) that must be supported. Compiler stability: the compiler should not crash or fail ungracefully on the stable channel. Rust stability: the compiler must respect Rust's stability guarantees by not breaking programs that previously compiled despite the many changes that are always going on to its implementation. Limitations of other tools: rustc uses LLVM in its backend, and LLVM has some strengths we leverage and some aspects we need to work around. So, as you continue your journey through the rest of the guide, keep these things in mind. They will often inform decisions that we make.","breadcrumbs":"Overview of the compiler » How it does it","id":"517","title":"How it does it"},"518":{"body":"As with most compilers, rustc uses some intermediate representations (IRs) to facilitate computations. In general, working directly with the source code is extremely inconvenient and error-prone. Source code is designed to be human-friendly while at the same time being unambiguous, but it's less convenient for doing something like, say, type checking. Instead most compilers, including rustc, build some sort of IR out of the source code which is easier to analyze. rustc has a few IRs, each optimized for different purposes: Token stream: the lexer produces a stream of tokens directly from the source code. This stream of tokens is easier for the parser to deal with than raw text. Abstract Syntax Tree (AST): the abstract syntax tree is built from the stream of tokens produced by the lexer. It represents pretty much exactly what the user wrote. It helps to do some syntactic sanity checking (e.g. checking that a type is expected where the user wrote one). High-level IR (HIR): This is a sort of desugared AST. It's still close to what the user wrote syntactically, but it includes some implicit things such as some elided lifetimes, etc. This IR is amenable to type checking. Typed HIR (THIR) formerly High-level Abstract IR (HAIR) : This is an intermediate between HIR and MIR. It is like the HIR but it is fully typed and a bit more desugared (e.g. method calls and implicit dereferences are made fully explicit). As a result, it is easier to lower to MIR from THIR than from HIR. Middle-level IR (MIR): This IR is basically a Control-Flow Graph (CFG). A CFG is a type of diagram that shows the basic blocks of a program and how control flow can go between them. Likewise, MIR also has a bunch of basic blocks with simple typed statements inside them (e.g. assignment, simple computations, etc) and control flow edges to other basic blocks (e.g., calls, dropping values). MIR is used for borrow checking and other important dataflow-based checks, such as checking for uninitialized values. It is also used for a series of optimizations and for constant evaluation (via MIRI). Because MIR is still generic, we can do a lot of analyses here more efficiently than after monomorphization. LLVM-IR: This is the standard form of all input to the LLVM compiler. LLVM-IR is a sort of typed assembly language with lots of annotations. It's a standard format that is used by all compilers that use LLVM (e.g. the clang C compiler also outputs LLVM-IR). LLVM-IR is designed to be easy for other compilers to emit and also rich enough for LLVM to run a bunch of optimizations on it. One other thing to note is that many values in the compiler are interned . This is a performance and memory optimization in which we allocate the values in a special allocator called an arena . Then, we pass around references to the values allocated in the arena. This allows us to make sure that identical values (e.g. types in your program) are only allocated once and can be compared cheaply by comparing pointers. Many of the intermediate representations are interned.","breadcrumbs":"Overview of the compiler » Intermediate representations","id":"518","title":"Intermediate representations"},"519":{"body":"The first big implementation choice is Rust's use of the query system in its compiler. The Rust compiler is not organized as a series of passes over the code which execute sequentially. The Rust compiler does this to make incremental compilation possible -- that is, if the user makes a change to their program and recompiles, we want to do as little redundant work as possible to output the new binary. In rustc, all the major steps above are organized as a bunch of queries that call each other. For example, there is a query to ask for the type of something and another to ask for the optimized MIR of a function. These queries can call each other and are all tracked through the query system. The results of the queries are cached on disk so that the compiler can tell which queries' results changed from the last compilation and only redo those. This is how incremental compilation works. In principle, for the query-fied steps, we do each of the above for each item individually. For example, we will take the HIR for a function and use queries to ask for the LLVM-IR for that HIR. This drives the generation of optimized MIR, which drives the borrow checker, which drives the generation of MIR, and so on. ... except that this is very over-simplified. In fact, some queries are not cached on disk, and some parts of the compiler have to run for all code anyway for correctness even if the code is dead code (e.g. the borrow checker). For example, currently the mir_borrowck query is first executed on all functions of a crate. Then the codegen backend invokes the collect_and_partition_mono_items query, which first recursively requests the optimized_mir for all reachable functions, which in turn runs mir_borrowck for that function and then creates codegen units. This kind of split will need to remain to ensure that unreachable functions still have their errors emitted. Moreover, the compiler wasn't originally built to use a query system; the query system has been retrofitted into the compiler, so parts of it are not query-fied yet. Also, LLVM isn't our code, so that isn't querified either. The plan is to eventually query-fy all of the steps listed in the previous section, but as of November 2022, only the steps between HIR and LLVM-IR are query-fied. That is, lexing, parsing, name resolution, and macro expansion are done all at once for the whole program. One other thing to mention here is the all-important \"typing context\", TyCtxt , which is a giant struct that is at the center of all things. (Note that the name is mostly historic. This is not a \"typing context\" in the sense of Γ or Δ from type theory. The name is retained because that's what the name of the struct is in the source code.) All queries are defined as methods on the TyCtxt type, and the in-memory query cache is stored there too. In the code, there is usually a variable called tcx which is a handle on the typing context. You will also see lifetimes with the name 'tcx, which means that something is tied to the lifetime of the TyCtxt (usually it is stored or interned there).","breadcrumbs":"Overview of the compiler » Queries","id":"519","title":"Queries"},"52":{"body":"When doing simple refactoring, it can be useful to run ./x check continuously. If you set up rust-analyzer as described above, this will be done for you every time you save a file. Here you are just checking that the compiler can build , but often that is all you need (e.g., when renaming a method). You can then run ./x build when you actually need to run tests. In fact, it is sometimes useful to put off tests even when you are not 100% sure the code will work. You can then keep building up refactoring commits and only run the tests at some later time. You can then use git bisect to track down precisely which commit caused the problem. A nice side-effect of this style is that you are left with a fairly fine-grained set of commits at the end, all of which build and pass tests. This often helps reviewing.","breadcrumbs":"How to build and run the compiler » Suggested workflows » Check, check, and check again","id":"52","title":"Check, check, and check again"},"520":{"body":"Types are really important in Rust, and they form the core of a lot of compiler analyses. The main type (in the compiler) that represents types (in the user's program) is rustc_middle::ty::Ty . This is so important that we have a whole chapter on ty::Ty , but for now, we just want to mention that it exists and is the way rustc represents types! Also note that the rustc_middle::ty module defines the TyCtxt struct we mentioned before.","breadcrumbs":"Overview of the compiler » ty::Ty","id":"520","title":"ty::Ty"},"521":{"body":"Compiler performance is a problem that we would like to improve on (and are always working on). One aspect of that is parallelizing rustc itself. Currently, there is only one part of rustc that is parallel by default: code generation . However, the rest of the compiler is still not yet parallel. There have been lots of efforts spent on this, but it is generally a hard problem. The current approach is to turn RefCell s into Mutex s -- that is, we switch to thread-safe internal mutability. However, there are ongoing challenges with lock contention, maintaining query-system invariants under concurrency, and the complexity of the code base. One can try out the current work by enabling parallel compilation in bootstrap.toml. It's still early days, but there are already some promising performance improvements.","breadcrumbs":"Overview of the compiler » Parallelism","id":"521","title":"Parallelism"},"522":{"body":"rustc itself is written in Rust. So how do we compile the compiler? We use an older compiler to compile the newer compiler. This is called bootstrapping . Bootstrapping has a lot of interesting implications. For example, it means that one of the major users of Rust is the Rust compiler, so we are constantly testing our own software (\"eating our own dogfood\"). For more details on bootstrapping, see the bootstrapping section of the guide .","breadcrumbs":"Overview of the compiler » Bootstrapping","id":"522","title":"Bootstrapping"},"523":{"body":"Command line parsing Guide: The Rustc Driver and Interface Driver definition: rustc_driver Main entry point: rustc_session::config::build_session_options Lexical Analysis: Lex the user program to a stream of tokens Guide: Lexing and Parsing Lexer definition: rustc_lexer Main entry point: rustc_lexer::cursor::Cursor::advance_token Parsing: Parse the stream of tokens to an Abstract Syntax Tree (AST) Guide: Lexing and Parsing Guide: Macro Expansion Guide: Name Resolution Parser definition: rustc_parse Main entry points: Entry point for first file in crate Entry point for outline module parsing Entry point for macro fragments AST definition: rustc_ast Feature gating: TODO Early linting: TODO The High Level Intermediate Representation (HIR) Guide: The HIR Guide: Identifiers in the HIR Guide: The HIR Map Guide: Lowering AST to HIR How to view HIR representation for your code cargo rustc -- -Z unpretty=hir-tree Rustc HIR definition: rustc_hir Main entry point: TODO Late linting: TODO Type Inference Guide: Type Inference Guide: The ty Module: Representing Types (semantics) Main entry point (type inference): InferCtxtBuilder::enter Main entry point (type checking bodies): the typeck query These two functions can't be decoupled. The Mid Level Intermediate Representation (MIR) Guide: The MIR (Mid level IR) Definition: rustc_middle/src/mir Definition of sources that manipulates the MIR: rustc_mir_build , rustc_mir_dataflow , rustc_mir_transform The Borrow Checker Guide: MIR Borrow Check Definition: rustc_borrowck Main entry point: mir_borrowck query MIR Optimizations Guide: MIR Optimizations Definition: rustc_mir_transform Main entry point: optimized_mir query Code Generation Guide: Code Generation Generating Machine Code from LLVM-IR with LLVM - TODO: reference? Main entry point: rustc_codegen_ssa::base::codegen_crate This monomorphizes and produces LLVM-IR for one codegen unit. It then starts a background thread to run LLVM, which must be joined later. Monomorphization happens lazily via FunctionCx::monomorphize and rustc_codegen_ssa::base::codegen_instance","breadcrumbs":"Overview of the compiler » References","id":"523","title":"References"},"524":{"body":"Workspace structure Compiler Big picture rustdoc Tests Build System Standard library Other Now that we have seen what the compiler does , let's take a look at the structure of the rust-lang/rust repository, where the rustc source code lives. You may find it helpful to read the \"Overview of the compiler\" chapter, which introduces how the compiler works, before this one.","breadcrumbs":"The compiler source code » High-level overview of the compiler source","id":"524","title":"High-level overview of the compiler source"},"525":{"body":"The rust-lang/rust repository consists of a single large cargo workspace containing the compiler, the standard libraries ( core , alloc , std , proc_macro , etc ), and rustdoc , along with the build system and a bunch of tools and submodules for building a full Rust distribution. The repository consists of three main directories: compiler/ contains the source code for rustc. It consists of many crates that together make up the compiler. library/ contains the standard libraries ( core , alloc , std , proc_macro , test ), as well as the Rust runtime ( backtrace , rtstartup , lang_start ). tests/ contains the compiler tests. src/ contains the source code for rustdoc , clippy , cargo , the build system, language docs, etc.","breadcrumbs":"The compiler source code » Workspace structure","id":"525","title":"Workspace structure"},"526":{"body":"The compiler is implemented in the various compiler/ crates. The compiler/ crates all have names starting with rustc_*. These are a collection of around 50 interdependent crates ranging in size from tiny to huge. There is also the rustc crate which is the actual binary (i.e. the main function); it doesn't actually do anything besides calling the rustc_driver crate, which drives the various parts of compilation in other crates. The dependency order of these crates is complex, but roughly it is something like this: rustc (the binary) calls rustc_driver::main . rustc_driver depends on a lot of other crates, but the main one is rustc_interface . rustc_interface depends on most of the other compiler crates. It is a fairly generic interface for driving the whole compilation. Most of the other rustc_* crates depend on rustc_middle , which defines a lot of central data structures in the compiler. rustc_middle and most of the other crates depend on a handful of crates representing the early parts of the compiler (e.g. the parser), fundamental data structures (e.g. Span ), or error reporting: rustc_data_structures , rustc_span , rustc_errors , etc. You can see the exact dependencies by running cargo tree, just like you would for any other Rust package: cargo tree --package rustc_driver One final thing: src/llvm-project is a submodule for our fork of LLVM. During bootstrapping, LLVM is built and the compiler/rustc_llvm crate contains Rust wrappers around LLVM (which is written in C++), so that the compiler can interface with it. Most of this book is about the compiler, so we won't have any further explanation of these crates here.","breadcrumbs":"The compiler source code » Compiler","id":"526","title":"Compiler"},"527":{"body":"The dependency structure of the compiler is influenced by two main factors: Organization. The compiler is a huge codebase; it would be an impossibly large crate. In part, the dependency structure reflects the code structure of the compiler. Compile-time. By breaking the compiler into multiple crates, we can take better advantage of incremental/parallel compilation using cargo. In particular, we try to have as few dependencies between crates as possible so that we don't have to rebuild as many crates if you change one. At the very bottom of the dependency tree are a handful of crates that are used by the whole compiler (e.g. rustc_span ). The very early parts of the compilation process (e.g. parsing and the Abstract Syntax Tree (AST) ) depend on only these. After the AST is constructed and other early analysis is done, the compiler's query system gets set up. The query system is set up in a clever way using function pointers. This allows us to break dependencies between crates, allowing more parallel compilation. The query system is defined in rustc_middle , so nearly all subsequent parts of the compiler depend on this crate. It is a really large crate, leading to long compile times. Some efforts have been made to move stuff out of it with varying success. Another side-effect is that sometimes related functionality gets scattered across different crates. For example, linting functionality is found across earlier parts of the crate, rustc_lint , rustc_middle , and other places. Ideally there would be fewer, more cohesive crates, with incremental and parallel compilation making sure compile times stay reasonable. However, incremental and parallel compilation haven't gotten good enough for that yet, so breaking things into separate crates has been our solution so far. At the top of the dependency tree is rustc_driver and rustc_interface which is an unstable wrapper around the query system helping drive various stages of compilation. Other consumers of the compiler may use this interface in different ways (e.g. rustdoc or maybe eventually rust-analyzer). The rustc_driver crate first parses command line arguments and then uses rustc_interface to drive the compilation to completion.","breadcrumbs":"The compiler source code » Big picture","id":"527","title":"Big picture"},"528":{"body":"The bulk of rustdoc is in librustdoc . However, the rustdoc binary itself is src/tools/rustdoc , which does nothing except call rustdoc::main . There is also JavaScript and CSS for the docs in src/tools/rustdoc-js and src/tools/rustdoc-themes . You can read more about rustdoc in this chapter .","breadcrumbs":"The compiler source code » rustdoc","id":"528","title":"rustdoc"},"529":{"body":"The test suite for all of the above is in tests/ . You can read more about the test suite in this chapter . The test harness is in src/tools/compiletest/ .","breadcrumbs":"The compiler source code » Tests","id":"529","title":"Tests"},"53":{"body":"The x suggest subcommand suggests (and runs) a subset of the extensive rust-lang/rust tests based on files you have changed. This is especially useful for new contributors who have not mastered the arcane x flags yet and more experienced contributors as a shorthand for reducing mental effort. In all cases it is useful not to run the full tests (which can take on the order of tens of minutes) and just run a subset which are relevant to your changes. For example, running tidy and linkchecker is useful when editing Markdown files, whereas UI tests are much less likely to be helpful. While x suggest is a useful tool, it does not guarantee perfect coverage (just as PR CI isn't a substitute for bors). See the dedicated chapter for more information and contribution instructions. Please note that x suggest is in a beta state currently and the tests that it will suggest are limited.","breadcrumbs":"How to build and run the compiler » Suggested workflows » x suggest","id":"53","title":"x suggest"},"530":{"body":"There are a number of tools in the repository just for building the compiler, standard library, rustdoc , etc, along with testing, building a full Rust distribution, etc. One of the primary tools is src/bootstrap/ . You can read more about bootstrapping in this chapter . The process may also use other tools from src/tools/ , such as tidy/ or compiletest/ .","breadcrumbs":"The compiler source code » Build System","id":"530","title":"Build System"},"531":{"body":"This code is fairly similar to most other Rust crates except that it must be built in a special way because it can use unstable ( nightly ) features. The standard library is sometimes referred to as libstd or the \"standard facade\" .","breadcrumbs":"The compiler source code » Standard library","id":"531","title":"Standard library"},"532":{"body":"There are a lot of other things in the rust-lang/rust repo that are related to building a full Rust distribution. Most of the time you don't need to worry about them. These include: src/ci : The CI configuration. This actually quite extensive because we run a lot of tests on a lot of platforms. src/doc : Various documentation, including submodules for a few books. src/etc : Miscellaneous utilities. And more...","breadcrumbs":"The compiler source code » Other","id":"532","title":"Other"},"533":{"body":"Invoking queries How the compiler executes a query Providers How providers are set up How are providers registered? Adding a new provider Adding a new query External links As described in Overview of the compiler , the Rust compiler is still (as of July 2021) transitioning from a traditional \"pass-based\" setup to a \"demand-driven\" system. The compiler query system is the key to rustc's demand-driven organization. The idea is pretty simple. Instead of entirely independent passes (parsing, type-checking, etc.), a set of function-like queries compute information about the input source. For example, there is a query called type_of that, given the DefId of some item, will compute the type of that item and return it to you. Query execution is memoized . The first time you invoke a query, it will go do the computation, but the next time, the result is returned from a hashtable. Moreover, query execution fits nicely into incremental computation ; the idea is roughly that, when you invoke a query, the result may be returned to you by loading stored data from disk. [1] Eventually, we want the entire compiler control-flow to be query driven. There will effectively be one top-level query (compile) that will run compilation on a crate; this will in turn demand information about that crate, starting from the end . For example: The compile query might demand to get a list of codegen-units (i.e. modules that need to be compiled by LLVM). But computing the list of codegen-units would invoke some subquery that returns the list of all modules defined in the Rust source. That query in turn would invoke something asking for the HIR. This keeps going further and further back until we wind up doing the actual parsing. Although this vision is not fully realized, large sections of the compiler (for example, generating MIR ) currently work exactly like this. The Incremental compilation in detail chapter gives a more in-depth description of what queries are and how they work. If you intend to write a query of your own, this is a good read.","breadcrumbs":"Queries: demand-driven compilation » Queries: demand-driven compilation","id":"533","title":"Queries: demand-driven compilation"},"534":{"body":"Invoking a query is simple. The TyCtxt (\"type context\") struct offers a method for each defined query. For example, to invoke the type_of query, you would just do this: let ty = tcx.type_of(some_def_id);","breadcrumbs":"Queries: demand-driven compilation » Invoking queries","id":"534","title":"Invoking queries"},"535":{"body":"So you may be wondering what happens when you invoke a query method. The answer is that, for each query, the compiler maintains a cache – if your query has already been executed, then, the answer is simple: we clone the return value out of the cache and return it (therefore, you should try to ensure that the return types of queries are cheaply cloneable; insert an Rc if necessary).","breadcrumbs":"Queries: demand-driven compilation » How the compiler executes a query","id":"535","title":"How the compiler executes a query"},"536":{"body":"If, however, the query is not in the cache, then the compiler will call the corresponding provider function. A provider is a function implemented in a specific module and manually registered into the Providers struct during compiler initialization. The macro system generates the Providers struct, which acts as a function table for all query implementations, where each field is a function pointer to the actual provider. Note: The Providers struct is generated by macros and acts as a function table for all query implementations. It is not a Rust trait, but a plain struct with function pointer fields. Providers are defined per-crate. The compiler maintains, internally, a table of providers for every crate, at least conceptually. Right now, there are really two sets: the providers for queries about the local crate (that is, the one being compiled) and providers for queries about external crates (that is, dependencies of the local crate). Note that what determines the crate that a query is targeting is not the kind of query, but the key . For example, when you invoke tcx.type_of(def_id), that could be a local query or an external query, depending on what crate the def_id is referring to (see the self::keys::Key trait for more information on how that works). Providers always have the same signature: fn provider<'tcx>( tcx: TyCtxt<'tcx>, key: QUERY_KEY,\n) -> QUERY_RESULT { ...\n} Providers take two arguments: the tcx and the query key. They return the result of the query. N.B. Most of the rustc_* crates only provide local providers . Almost all extern providers wind up going through the rustc_metadata crate , which loads the information from the crate metadata. But in some cases there are crates that provide queries for both local and external crates, in which case they define both a provide and a provide_extern function, through wasm_import_module_map , that rustc_driver can invoke.","breadcrumbs":"Queries: demand-driven compilation » Providers","id":"536","title":"Providers"},"537":{"body":"When the tcx is created, it is given the providers by its creator using the Providers struct. This struct is generated by the macros here, but it is basically a big list of function pointers: struct Providers { type_of: for<'tcx> fn(TyCtxt<'tcx>, DefId) -> Ty<'tcx>, // ... one field for each query\n} How are providers registered? The Providers struct is filled in during compiler initialization, mainly by the rustc_driver crate. But the actual provider functions are implemented in various rustc_* crates (like rustc_middle, rustc_hir_analysis, etc). To register providers, each crate exposes a provide function that looks like this: pub fn provide(providers: &mut Providers) { *providers = Providers { type_of, // ... add more providers here ..*providers };\n} This function takes a mutable reference to the Providers struct and sets the fields to point to the correct provider functions. You can also assign fields individually, e.g. providers.type_of = type_of;. Adding a new provider Suppose you want to add a new query called fubar. You would: Implement the provider function: fn fubar<'tcx>(tcx: TyCtxt<'tcx>, key: DefId) -> Fubar<'tcx> { ... } Register it in the provide function: pub fn provide(providers: &mut Providers) { *providers = Providers { fubar, ..*providers };\n}","breadcrumbs":"Queries: demand-driven compilation » How providers are set up","id":"537","title":"How providers are set up"},"538":{"body":"How do you add a new query? Defining a query takes place in two steps: Declare the query name, its arguments and description. Supply query providers where needed. To declare the query name and arguments, you simply add an entry to the big macro invocation in compiler/rustc_middle/src/query/mod.rs . Then you need to add a documentation comment to it with some internal description. Then, provide the desc attribute which contains a user-facing description of the query. The desc attribute is shown to the user in query cycles. This looks something like: rustc_queries! { /// Records the type of every item. query type_of(key: DefId) -> Ty<'tcx> { cache_on_disk_if { key.is_local() } desc { |tcx| \"computing the type of `{}`\", tcx.def_path_str(key) } } ...\n} A query definition has the following form: query type_of(key: DefId) -> Ty<'tcx> { ... }\n^^^^^ ^^^^^^^ ^^^^^ ^^^^^^^^ ^^^\n| | | | |\n| | | | query modifiers\n| | | result type\n| | query key type\n| name of query\nquery keyword Let's go over these elements one by one: Query keyword: indicates a start of a query definition. Name of query: the name of the query method (tcx.type_of(..)). Also used as the name of a struct (ty::queries::type_of) that will be generated to represent this query. Query key type: the type of the argument to this query. This type must implement the ty::query::keys::Key trait, which defines (for example) how to map it to a crate, and so forth. Result type of query: the type produced by this query. This type should (a) not use RefCell or other interior mutability and (b) be cheaply cloneable. Interning or using Rc or Arc is recommended for non-trivial data types. [2] Query modifiers: various flags and options that customize how the query is processed (mostly with respect to incremental compilation ). So, to add a query: Add an entry to rustc_queries! using the format above. Link the provider by modifying the appropriate provide method; or add a new one if needed and ensure that rustc_driver is invoking it. The one exception to those rules is the ty::steal::Steal type, which is used to cheaply modify MIR in place. See the definition of Steal for more details. New uses of Steal should not be added without alerting @rust-lang/compiler.","breadcrumbs":"Queries: demand-driven compilation » Adding a new query","id":"538","title":"Adding a new query"},"539":{"body":"Related design ideas, and tracking issues: Design document: On-demand Rustc incremental design doc Tracking Issue: \"Red/Green\" dependency tracking in compiler More discussion and issues: GitHub issue #42633 Incremental Compilation Beta Incremental Compilation Announcement","breadcrumbs":"Queries: demand-driven compilation » External links","id":"539","title":"External links"},"54":{"body":"Some parts of the bootstrap process uses pinned, nightly versions of tools like rustfmt. To make things like cargo fmt work correctly in your repo, run cd \nrustup override set nightly after installing a nightly toolchain with rustup. Don't forget to do this for all directories you have setup a worktree for . You may need to use the pinned nightly version from src/stage0, but often the normal nightly channel will work. Note see the section on vscode for how to configure it with this real rustfmt x uses, and the section on rustup for how to setup rustup toolchain for your bootstrapped compiler Note This does not allow you to build rustc with cargo directly. You still have to use x to work on the compiler or standard library, this just lets you use cargo fmt.","breadcrumbs":"How to build and run the compiler » Suggested workflows » Configuring rustup to use nightly","id":"54","title":"Configuring rustup to use nightly"},"540":{"body":"What is a query? Caching/Memoization Input data An example execution trace of some queries Cycles \"Steal\" Queries This chapter provides a deeper dive into the abstract model queries are built on. It does not go into implementation details but tries to explain the underlying logic. The examples here, therefore, have been stripped down and simplified and don't directly reflect the compilers internal APIs.","breadcrumbs":"Queries: demand-driven compilation » The Query Evaluation Model in detail » The Query Evaluation Model in detail","id":"540","title":"The Query Evaluation Model in detail"},"541":{"body":"Abstractly we view the compiler's knowledge about a given crate as a \"database\" and queries are the way of asking the compiler questions about it, i.e. we \"query\" the compiler's \"database\" for facts. However, there's something special to this compiler database: It starts out empty and is filled on-demand when queries are executed. Consequently, a query must know how to compute its result if the database does not contain it yet. For doing so, it can access other queries and certain input values that the database is pre-filled with on creation. A query thus consists of the following things: A name that identifies the query A \"key\" that specifies what we want to look up A result type that specifies what kind of result it yields A \"provider\" which is a function that specifies how the result is to be computed if it isn't already present in the database. As an example, the name of the type_of query is type_of, its query key is a DefId identifying the item we want to know the type of, the result type is Ty<'tcx>, and the provider is a function that, given the query key and access to the rest of the database, can compute the type of the item identified by the key. So in some sense a query is just a function that maps the query key to the corresponding result. However, we have to apply some restrictions in order for this to be sound: The key and result must be immutable values. The provider function must be a pure function in the sense that for the same key it must always yield the same result. The only parameters a provider function takes are the key and a reference to the \"query context\" (which provides access to the rest of the \"database\"). The database is built up lazily by invoking queries. The query providers will invoke other queries, for which the result is either already cached or computed by calling another query provider. These query provider invocations conceptually form a directed acyclic graph (DAG) at the leaves of which are input values that are already known when the query context is created.","breadcrumbs":"Queries: demand-driven compilation » The Query Evaluation Model in detail » What is a query?","id":"541","title":"What is a query?"},"542":{"body":"Results of query invocations are \"memoized\" which means that the query context will cache the result in an internal table and, when the query is invoked with the same query key again, will return the result from the cache instead of running the provider again. This caching is crucial for making the query engine efficient. Without memoization the system would still be sound (that is, it would yield the same results) but the same computations would be done over and over again. Memoization is one of the main reasons why query providers have to be pure functions. If calling a provider function could yield different results for each invocation (because it accesses some global mutable state) then we could not memoize the result.","breadcrumbs":"Queries: demand-driven compilation » The Query Evaluation Model in detail » Caching/Memoization","id":"542","title":"Caching/Memoization"},"543":{"body":"When the query context is created, it is still empty: No queries have been executed, no results are cached. But the context already provides access to \"input\" data, i.e. pieces of immutable data that were computed before the context was created and that queries can access to do their computations. As of January 2021, this input data consists mainly of the HIR map, upstream crate metadata, and the command-line options the compiler was invoked with; but in the future inputs will just consist of command-line options and a list of source files -- the HIR map will itself be provided by a query which processes these source files. Without inputs, queries would live in a void without anything to compute their result from (remember, query providers only have access to other queries and the context but not any other outside state or information). For a query provider, input data and results of other queries look exactly the same: It just tells the context \"give me the value of X\". Because input data is immutable, the provider can rely on it being the same across different query invocations, just as is the case for query results.","breadcrumbs":"Queries: demand-driven compilation » The Query Evaluation Model in detail » Input data","id":"543","title":"Input data"},"544":{"body":"How does this DAG of query invocations come into existence? At some point the compiler driver will create the, as yet empty, query context. It will then, from outside of the query system, invoke the queries it needs to perform its task. This looks something like the following: fn compile_crate() { let cli_options = ...; let hir_map = ...; // Create the query context `tcx` let tcx = TyCtxt::new(cli_options, hir_map); // Do type checking by invoking the type check query tcx.type_check_crate();\n} The type_check_crate query provider would look something like the following: fn type_check_crate_provider(tcx, _key: ()) { let list_of_hir_items = tcx.hir_map.list_of_items(); for item_def_id in list_of_hir_items { tcx.type_check_item(item_def_id); }\n} We see that the type_check_crate query accesses input data (tcx.hir_map.list_of_items()) and invokes other queries (type_check_item). The type_check_item invocations will themselves access input data and/or invoke other queries, so that in the end the DAG of query invocations will be built up backwards from the node that was initially executed: (2) (1) list_of_all_hir_items <----------------------------- type_check_crate() | (5) (4) (3) | Hir(foo) <--- type_of(foo) <--- type_check_item(foo) <-------+ | | +-----------------+ | | | (7) v (6) (8) | Hir(bar) <--- type_of(bar) <--- type_check_item(bar) <-------+ // (x) denotes invocation order We also see that often a query result can be read from the cache: type_of(bar) was computed for type_check_item(foo) so when type_check_item(bar) needs it, it is already in the cache. Query results stay cached in the query context as long as the context lives. So if the compiler driver invoked another query later on, the above graph would still exist and already executed queries would not have to be re-done.","breadcrumbs":"Queries: demand-driven compilation » The Query Evaluation Model in detail » An example execution trace of some queries","id":"544","title":"An example execution trace of some queries"},"545":{"body":"Earlier we stated that query invocations form a DAG. However, it would be easy to form a cyclic graph by, for example, having a query provider like the following: fn cyclic_query_provider(tcx, key) -> u32 { // Invoke the same query with the same key again tcx.cyclic_query(key)\n} Since query providers are regular functions, this would behave much as expected: Evaluation would get stuck in an infinite recursion. A query like this would not be very useful either. However, sometimes certain kinds of invalid user input can result in queries being called in a cyclic way. The query engine includes a check for cyclic invocations of queries with the same input arguments. And, because cycles are an irrecoverable error, will abort execution with a \"cycle error\" message that tries to be human readable. At some point the compiler had a notion of \"cycle recovery\", that is, one could \"try\" to execute a query and if it ended up causing a cycle, proceed in some other fashion. However, this was later removed because it is not entirely clear what the theoretical consequences of this are, especially regarding incremental compilation.","breadcrumbs":"Queries: demand-driven compilation » The Query Evaluation Model in detail » Cycles","id":"545","title":"Cycles"},"546":{"body":"Some queries have their result wrapped in a Steal struct. These queries behave exactly the same as regular with one exception: Their result is expected to be \"stolen\" out of the cache at some point, meaning some other part of the program is taking ownership of it and the result cannot be accessed anymore. This stealing mechanism exists purely as a performance optimization because some result values are too costly to clone (e.g. the MIR of a function). It seems like result stealing would violate the condition that query results must be immutable (after all we are moving the result value out of the cache) but it is OK as long as the mutation is not observable. This is achieved by two things: Before a result is stolen, we make sure to eagerly run all queries that might ever need to read that result. This has to be done manually by calling those queries. Whenever a query tries to access a stolen result, we make an ICE (Internal Compiler Error) so that such a condition cannot go unnoticed. This is not an ideal setup because of the manual intervention needed, so it should be used sparingly and only when it is well known which queries might access a given result. In practice, however, stealing has not turned out to be much of a maintenance burden. To summarize: \"Steal queries\" break some of the rules in a controlled way. There are checks in place that make sure that nothing can go silently wrong.","breadcrumbs":"Queries: demand-driven compilation » The Query Evaluation Model in detail » \"Steal\" Queries","id":"546","title":"\"Steal\" Queries"},"547":{"body":"The basic algorithm The try-mark-green algorithm The query DAG Improvements to the basic algorithm Resources Footnotes The incremental compilation scheme is, in essence, a surprisingly simple extension to the overall query system. We'll start by describing a slightly simplified variant of the real thing – the \"basic algorithm\" – and then describe some possible improvements.","breadcrumbs":"Queries: demand-driven compilation » Incremental compilation » Incremental compilation","id":"547","title":"Incremental compilation"},"548":{"body":"The basic algorithm is called the red-green algorithm [1] . The high-level idea is that, after each run of the compiler, we will save the results of all the queries that we do, as well as the query DAG . The query DAG is a DAG that indexes which queries executed which other queries. So, for example, there would be an edge from a query Q1 to another query Q2 if computing Q1 required computing Q2 (note that because queries cannot depend on themselves, this results in a DAG and not a general graph). NOTE : You might think of a query as simply the definition of a query. A thing that you can invoke, a bit like a function, and which either returns a cached result or actually executes the code. If that's the way you think about queries, it's good to know that in the following text, queries will be said to have colours. Keep in mind though, that here the word query also refers to a certain invocation of the query for a certain input. As you will read later, queries are fingerprinted based on their arguments. The result of a query might change when we give it one argument and be coloured red, while it stays the same for another argument and is thus green. In short, the word query is here not just used to mean the definition of a query, but also for a specific instance of that query with given arguments. On the next run of the compiler, then, we can sometimes reuse these query results to avoid re-executing a query. We do this by assigning every query a color : If a query is colored red , that means that its result during this compilation has changed from the previous compilation. If a query is colored green , that means that its result is the same as the previous compilation. There are two key insights here: First, if all the inputs to query Q are colored green, then the query Q must result in the same value as last time and hence need not be re-executed (or else the compiler is not deterministic). Second, even if some inputs to a query changes, it may be that it still produces the same result as the previous compilation. In particular, the query may only use part of its input. Therefore, after executing a query, we always check whether it produced the same result as the previous time. If it did, we can still mark the query as green, and hence avoid re-executing dependent queries.","breadcrumbs":"Queries: demand-driven compilation » Incremental compilation » The basic algorithm","id":"548","title":"The basic algorithm"},"549":{"body":"At the core of incremental compilation is an algorithm called \"try-mark-green\". It has the job of determining the color of a given query Q (which must not have yet been executed). In cases where Q has red inputs, determining Q's color may involve re-executing Q so that we can compare its output, but if all of Q's inputs are green, then we can conclude that Q must be green without re-executing it or inspecting its value at all. In the compiler, this allows us to avoid deserializing the result from disk when we don't need it, and in fact enables us to sometimes skip serializing the result as well (see the refinements section below). Try-mark-green works as follows: First check if the query Q was executed during the previous compilation. If not, we can just re-execute the query as normal, and assign it the color of red. If yes, then load the 'dependent queries' of Q. If there is a saved result, then we load the reads(Q) vector from the query DAG. The \"reads\" is the set of queries that Q executed during its execution. For each query R in reads(Q), we recursively demand the color of R using try-mark-green. Note: it is important that we visit each node in reads(Q) in same order as they occurred in the original compilation. See the section on the query DAG below . If any of the nodes in reads(Q) wind up colored red , then Q is dirty. We re-execute Q and compare the hash of its result to the hash of the result from the previous compilation. If the hash has not changed, we can mark Q as green and return. Otherwise, all of the nodes in reads(Q) must be green . In that case, we can color Q as green and return.","breadcrumbs":"Queries: demand-driven compilation » Incremental compilation » The try-mark-green algorithm","id":"549","title":"The try-mark-green algorithm"},"55":{"body":"If you are not working on the compiler, you often don't need to build the compiler tree. For example, you can skip building the compiler and only build the library tree or the tools under src/tools. To achieve that, you have to enable this by setting the download-rustc option in your configuration. This tells bootstrap to use the latest nightly compiler for stage > 0 steps, meaning it will have two precompiled compilers: stage0 compiler and download-rustc compiler for stage > 0 steps. This way, it will never need to build the in-tree compiler. As a result, your build time will be significantly reduced by not building the in-tree compiler.","breadcrumbs":"How to build and run the compiler » Suggested workflows » Faster Builds with CI-rustc","id":"55","title":"Faster Builds with CI-rustc"},"550":{"body":"The query DAG code is stored in compiler/rustc_middle/src/dep_graph . Construction of the DAG is done by instrumenting the query execution. One key point is that the query DAG also tracks ordering; that is, for each query Q, we not only track the queries that Q reads, we track the order in which they were read. This allows try-mark-green to walk those queries back in the same order. This is important because once a subquery comes back as red, we can no longer be sure that Q will continue along the same path as before. That is, imagine a query like this: fn main_query(tcx) { if tcx.subquery1() { tcx.subquery2() } else { tcx.subquery3() }\n} Now imagine that in the first compilation, main_query starts by executing subquery1, and this returns true. In that case, the next query main_query executes will be subquery2, and subquery3 will not be executed at all. But now imagine that in the next compilation, the input has changed such that subquery1 returns false . In this case, subquery2 would never execute. If try-mark-green were to visit reads(main_query) out of order, however, it might visit subquery2 before subquery1, and hence execute it. This can lead to ICEs and other problems in the compiler.","breadcrumbs":"Queries: demand-driven compilation » Incremental compilation » The query DAG","id":"550","title":"The query DAG"},"551":{"body":"In the description of the basic algorithm, we said that at the end of compilation we would save the results of all the queries that were performed. In practice, this can be quite wasteful – many of those results are very cheap to recompute, and serializing and deserializing them is not a particular win. In practice, what we would do is to save the hashes of all the subqueries that we performed. Then, in select cases, we also save the results. This is why the incremental algorithm separates computing the color of a node, which often does not require its value, from computing the result of a node. Computing the result is done via a simple algorithm like so: Check if a saved result for Q is available. If so, compute the color of Q. If Q is green, deserialize and return the saved result. Otherwise, execute Q. We can then compare the hash of the result and color Q as green if it did not change.","breadcrumbs":"Queries: demand-driven compilation » Incremental compilation » Improvements to the basic algorithm","id":"551","title":"Improvements to the basic algorithm"},"552":{"body":"The initial design document can be found here , which expands on the memoization details, provides more high-level overview and motivation for this system.","breadcrumbs":"Queries: demand-driven compilation » Incremental compilation » Resources","id":"552","title":"Resources"},"553":{"body":"I have long wanted to rename it to the Salsa algorithm, but it never caught on. -@nikomatsakis","breadcrumbs":"Queries: demand-driven compilation » Incremental compilation » Footnotes","id":"553","title":"Footnotes"},"554":{"body":"A Basic Algorithm For Incremental Query Evaluation The problem with the basic algorithm: false positives Improving accuracy: the red-green algorithm The real world: how persistence makes everything complicated A Question Of Stability: Bridging The Gap Between Compilation Sessions Checking query results for changes: HashStable and Fingerprints A tale of two DepGraphs: the old and the new Didn't you forget something?: cache promotion Incremental compilation and the compiler backend Query modifiers The projection query pattern Shortcomings of the current system Incrementality of on-disk data structures Unnecessary data dependencies The incremental compilation scheme is, in essence, a surprisingly simple extension to the overall query system. It relies on the fact that: queries are pure functions -- given the same inputs, a query will always yield the same result, and the query model structures compilation in an acyclic graph that makes dependencies between individual computations explicit. This chapter will explain how we can use these properties for making things incremental and then goes on to discuss version implementation issues.","breadcrumbs":"Queries: demand-driven compilation » Incremental compilation in detail » Incremental compilation in detail","id":"554","title":"Incremental compilation in detail"},"555":{"body":"As explained in the query evaluation model primer , query invocations form a directed-acyclic graph. Here's the example from the previous chapter again: list_of_all_hir_items <----------------------------- type_check_crate() | | Hir(foo) <--- type_of(foo) <--- type_check_item(foo) <-------+ | | +-----------------+ | | | v | Hir(bar) <--- type_of(bar) <--- type_check_item(bar) <-------+ Since every access from one query to another has to go through the query context, we can record these accesses and thus actually build this dependency graph in memory. With dependency tracking enabled, when compilation is done, we know which queries were invoked (the nodes of the graph) and for each invocation, which other queries or input has gone into computing the query's result (the edges of the graph). Now suppose we change the source code of our program so that HIR of bar looks different than before. Our goal is to only recompute those queries that are actually affected by the change while re-using the cached results of all the other queries. Given the dependency graph we can do exactly that. For a given query invocation, the graph tells us exactly what data has gone into computing its results, we just have to follow the edges until we reach something that has changed. If we don't encounter anything that has changed, we know that the query still would evaluate to the same result we already have in our cache. Taking the type_of(foo) invocation from above as an example, we can check whether the cached result is still valid by following the edges to its inputs. The only edge leads to Hir(foo), an input that has not been affected by the change. So we know that the cached result for type_of(foo) is still valid. The story is a bit different for type_check_item(foo): We again walk the edges and already know that type_of(foo) is fine. Then we get to type_of(bar) which we have not checked yet, so we walk the edges of type_of(bar) and encounter Hir(bar) which has changed. Consequently the result of type_of(bar) might yield a different result than what we have in the cache and, transitively, the result of type_check_item(foo) might have changed too. We thus re-run type_check_item(foo), which in turn will re-run type_of(bar), which will yield an up-to-date result because it reads the up-to-date version of Hir(bar). Also, we re-run type_check_item(bar) because result of type_of(bar) might have changed.","breadcrumbs":"Queries: demand-driven compilation » Incremental compilation in detail » A Basic Algorithm For Incremental Query Evaluation","id":"555","title":"A Basic Algorithm For Incremental Query Evaluation"},"556":{"body":"If you read the previous paragraph carefully you'll notice that it says that type_of(bar) might have changed because one of its inputs has changed. There's also the possibility that it might still yield exactly the same result even though its input has changed. Consider an example with a simple query that just computes the sign of an integer: IntValue(x) <---- sign_of(x) <--- some_other_query(x) Let's say that IntValue(x) starts out as 1000 and then is set to 2000. Even though IntValue(x) is different in the two cases, sign_of(x) yields the result + in both cases. If we follow the basic algorithm, however, some_other_query(x) would have to (unnecessarily) be re-evaluated because it transitively depends on a changed input. Change detection yields a \"false positive\" in this case because it has to conservatively assume that some_other_query(x) might be affected by that changed input. Unfortunately it turns out that the actual queries in the compiler are full of examples like this and small changes to the input often potentially affect very large parts of the output binaries. As a consequence, we had to make the change detection system smarter and more accurate.","breadcrumbs":"Queries: demand-driven compilation » Incremental compilation in detail » The problem with the basic algorithm: false positives","id":"556","title":"The problem with the basic algorithm: false positives"},"557":{"body":"The \"false positives\" problem can be solved by interleaving change detection and query re-evaluation. Instead of walking the graph all the way to the inputs when trying to find out if some cached result is still valid, we can check if a result has actually changed after we were forced to re-evaluate it. We call this algorithm the red-green algorithm because nodes in the dependency graph are assigned the color green if we were able to prove that its cached result is still valid and the color red if the result has turned out to be different after re-evaluating it. The meat of red-green change tracking is implemented in the try-mark-green algorithm, that, you've guessed it, tries to mark a given node as green: fn try_mark_green(tcx, current_node) -> bool { // Fetch the inputs to `current_node`, i.e. get the nodes that the direct // edges from `node` lead to. let dependencies = tcx.dep_graph.get_dependencies_of(current_node); // Now check all the inputs for changes for dependency in dependencies { match tcx.dep_graph.get_node_color(dependency) { Green => { // This input has already been checked before and it has not // changed; so we can go on to check the next one } Red => { // We found an input that has changed. We cannot mark // `current_node` as green without re-running the // corresponding query. return false } Unknown => { // This is the first time we look at this node. Let's try // to mark it green by calling try_mark_green() recursively. if try_mark_green(tcx, dependency) { // We successfully marked the input as green, on to the // next. } else { // We could *not* mark the input as green. This means we // don't know if its value has changed. In order to find // out, we re-run the corresponding query now! tcx.run_query_for(dependency); // Fetch and check the node color again. Running the query // has forced it to either red (if it yielded a different // result than we have in the cache) or green (if it // yielded the same result). match tcx.dep_graph.get_node_color(dependency) { Red => { // The input turned out to be red, so we cannot // mark `current_node` as green. return false } Green => { // Re-running the query paid off! The result is the // same as before, so this particular input does // not invalidate `current_node`. } Unknown => { // There is no way a node has no color after // re-running the query. panic!(\"unreachable\") } } } } } } // If we have gotten through the entire loop, it means that all inputs // have turned out to be green. If all inputs are unchanged, it means // that the query result corresponding to `current_node` cannot have // changed either. tcx.dep_graph.mark_green(current_node); true\n} NOTE: The actual implementation can be found in compiler/rustc_query_system/src/dep_graph/graph.rs By using red-green marking we can avoid the devastating cumulative effect of having false positives during change detection. Whenever a query is executed in incremental mode, we first check if its already green. If not, we run try_mark_green() on it. If it still isn't green after that, then we actually invoke the query provider to re-compute the result. Re-computing the query might then itself involve recursively invoking more queries, which can mean we come back to the try_mark_green() algorithm for the dependencies recursively.","breadcrumbs":"Queries: demand-driven compilation » Incremental compilation in detail » Improving accuracy: the red-green algorithm","id":"557","title":"Improving accuracy: the red-green algorithm"},"558":{"body":"The sections above described the underlying algorithm for incremental compilation but because the compiler process exits after being finished and takes the query context with its result cache with it into oblivion, we have to persist data to disk, so the next compilation session can make use of it. This comes with a whole new set of implementation challenges: The query result cache is stored to disk, so they are not readily available for change comparison. A subsequent compilation session will start off with new version of the code that has arbitrary changes applied to it. All kinds of IDs and indices that are generated from a global, sequential counter (e.g. NodeId, DefId, etc) might have shifted, making the persisted results on disk not immediately usable anymore because the same numeric IDs and indices might refer to completely new things in the new compilation session. Persisting things to disk comes at a cost, so not every tiny piece of information should be actually cached in between compilation sessions. Fixed-sized, plain-old-data is preferred to complex things that need to run through an expensive (de-)serialization step. The following sections describe how the compiler solves these issues.","breadcrumbs":"Queries: demand-driven compilation » Incremental compilation in detail » The real world: how persistence makes everything complicated","id":"558","title":"The real world: how persistence makes everything complicated"},"559":{"body":"As noted before, various IDs (like DefId) are generated by the compiler in a way that depends on the contents of the source code being compiled. ID assignment is usually deterministic, that is, if the exact same code is compiled twice, the same things will end up with the same IDs. However, if something changes, e.g. a function is added in the middle of a file, there is no guarantee that anything will have the same ID as it had before. As a consequence we cannot represent the data in our on-disk cache the same way it is represented in memory. For example, if we just stored a piece of type information like TyKind::FnDef(DefId, &'tcx Substs<'tcx>) (as we do in memory) and then the contained DefId points to a different function in a new compilation session we'd be in trouble. The solution to this problem is to find \"stable\" forms for IDs which remain valid in between compilation sessions. For the most important case, DefIds, these are the so-called DefPaths. Each DefId has a corresponding DefPath but in place of a numeric ID, a DefPath is based on the path to the identified item, e.g. std::collections::HashMap. The advantage of an ID like this is that it is not affected by unrelated changes. For example, one can add a new function to std::collections but std::collections::HashMap would still be std::collections::HashMap. A DefPath is \"stable\" across changes made to the source code while a DefId isn't. There is also the DefPathHash which is just a 128-bit hash value of the DefPath. The two contain the same information and we mostly use the DefPathHash because it simpler to handle, being Copy and self-contained. This principle of stable identifiers is used to make the data in the on-disk cache resilient to source code changes. Instead of storing a DefId, we store the DefPathHash and when we deserialize something from the cache, we map the DefPathHash to the corresponding DefId in the current compilation session (which is just a simple hash table lookup). The HirId, used for identifying HIR components that don't have their own DefId, is another such stable ID. It is (conceptually) a pair of a DefPath and a LocalId, where the LocalId identifies something (e.g. a hir::Expr) locally within its \"owner\" (e.g. a hir::Item). If the owner is moved around, the LocalIds within it are still the same.","breadcrumbs":"Queries: demand-driven compilation » Incremental compilation in detail » A Question Of Stability: Bridging The Gap Between Compilation Sessions","id":"559","title":"A Question Of Stability: Bridging The Gap Between Compilation Sessions"},"56":{"body":"You can further enable the --incremental flag to save additional time in subsequent rebuilds: ./x test tests/ui --incremental --test-args issue-1234 If you don't want to include the flag with every command, you can enable it in the bootstrap.toml: [rust]\nincremental = true Note that incremental compilation will use more disk space than usual. If disk space is a concern for you, you might want to check the size of the build directory from time to time.","breadcrumbs":"How to build and run the compiler » Suggested workflows » Using incremental compilation","id":"56","title":"Using incremental compilation"},"560":{"body":"In order to do red-green-marking we often need to check if the result of a query has changed compared to the result it had during the previous compilation session. There are two performance problems with this though: We'd like to avoid having to load the previous result from disk just for doing the comparison. We already computed the new result and will use that. Also loading a result from disk will \"pollute\" the interners with data that is unlikely to ever be used. We don't want to store each and every result in the on-disk cache. For example, it would be wasted effort to persist things to disk that are already available in upstream crates. The compiler avoids these problems by using so-called Fingerprints. Each time a new query result is computed, the query engine will compute a 128 bit hash value of the result. We call this hash value \"the Fingerprint of the query result\". The hashing is (and has to be) done \"in a stable way\". This means that whenever something is hashed that might change in between compilation sessions (e.g. a DefId), we instead hash its stable equivalent (e.g. the corresponding DefPath). That's what the whole HashStable infrastructure is for. This way Fingerprints computed in two different compilation sessions are still comparable. The next step is to store these fingerprints along with the dependency graph. This is cheap since fingerprints are just bytes to be copied. It's also cheap to load the entire set of fingerprints together with the dependency graph. Now, when red-green-marking reaches the point where it needs to check if a result has changed, it can just compare the (already loaded) previous fingerprint to the fingerprint of the new result. This approach works rather well but it's not without flaws: There is a small possibility of hash collisions. That is, two different results could have the same fingerprint and the system would erroneously assume that the result hasn't changed, leading to a missed update. We mitigate this risk by using a high-quality hash function and a 128 bit wide hash value. Due to these measures the practical risk of a hash collision is negligible. Computing fingerprints is quite costly. It is the main reason why incremental compilation can be slower than non-incremental compilation. We are forced to use a good and thus expensive hash function, and we have to map things to their stable equivalents while doing the hashing.","breadcrumbs":"Queries: demand-driven compilation » Incremental compilation in detail » Checking query results for changes: HashStable and Fingerprints","id":"560","title":"Checking query results for changes: HashStable and Fingerprints"},"561":{"body":"The initial description of dependency tracking glosses over a few details that quickly become a head scratcher when actually trying to implement things. In particular it's easy to overlook that we are actually dealing with two dependency graphs: The one we built during the previous compilation session and the one that we are building for the current compilation session. When a compilation session starts, the compiler loads the previous dependency graph into memory as an immutable piece of data. Then, when a query is invoked, it will first try to mark the corresponding node in the graph as green. This means really that we are trying to mark the node in the previous dep-graph as green that corresponds to the query key in the current session. How do we do this mapping between current query key and previous DepNode? The answer is again Fingerprints: Nodes in the dependency graph are identified by a fingerprint of the query key. Since fingerprints are stable across compilation sessions, computing one in the current session allows us to find a node in the dependency graph from the previous session. If we don't find a node with the given fingerprint, it means that the query key refers to something that did not yet exist in the previous session. So, having found the dep-node in the previous dependency graph, we can look up its dependencies (i.e. also dep-nodes in the previous graph) and continue with the rest of the try-mark-green algorithm. The next interesting thing happens when we successfully marked the node as green. At that point we copy the node and the edges to its dependencies from the old graph into the new graph. We have to do this because the new dep-graph cannot acquire the node and edges via the regular dependency tracking. The tracking system can only record edges while actually running a query -- but running the query, although we have the result already cached, is exactly what we want to avoid. Once the compilation session has finished, all the unchanged parts have been copied over from the old into the new dependency graph, while the changed parts have been added to the new graph by the tracking system. At this point, the new graph is serialized out to disk, alongside the query result cache, and can act as the previous dep-graph in a subsequent compilation session.","breadcrumbs":"Queries: demand-driven compilation » Incremental compilation in detail » A tale of two DepGraphs: the old and the new","id":"561","title":"A tale of two DepGraphs: the old and the new"},"562":{"body":"The system described so far has a somewhat subtle property: If all inputs of a dep-node are green then the dep-node itself can be marked as green without computing or loading the corresponding query result. Applying this property transitively often leads to the situation that some intermediate results are never actually loaded from disk, as in the following example: input(A) <-- intermediate_query(B) <-- leaf_query(C) The compiler might need the value of leaf_query(C) in order to generate some output artifact. If it can mark leaf_query(C) as green, it will load the result from the on-disk cache. The result of intermediate_query(B) is never loaded though. As a consequence, when the compiler persists the new result cache by writing all in-memory query results to disk, intermediate_query(B) will not be in memory and thus will be missing from the new result cache. If there subsequently is another compilation session that actually needs the result of intermediate_query(B) it will have to be re-computed even though we had a perfectly valid result for it in the cache just before. In order to prevent this from happening, the compiler does something called \"cache promotion\": Before emitting the new result cache it will walk all green dep-nodes and make sure that their query result is loaded into memory. That way the result cache doesn't unnecessarily shrink again.","breadcrumbs":"Queries: demand-driven compilation » Incremental compilation in detail » Didn't you forget something?: cache promotion","id":"562","title":"Didn't you forget something?: cache promotion"},"563":{"body":"The compiler backend, the part involving LLVM, is using the query system but it is not implemented in terms of queries itself. As a consequence it does not automatically partake in dependency tracking. However, the manual integration with the tracking system is pretty straight-forward. The compiler simply tracks what queries get invoked when generating the initial LLVM version of each codegen unit (CGU), which results in a dep-node for each CGU. In subsequent compilation sessions it then tries to mark the dep-node for a CGU as green. If it succeeds, it knows that the corresponding object and bitcode files on disk are still valid. If it doesn't succeed, the entire CGU has to be recompiled. This is the same approach that is used for regular queries. The main differences are: that we cannot easily compute a fingerprint for LLVM modules (because they are opaque C++ objects), that the logic for dealing with cached values is rather different from regular queries because here we have bitcode and object files instead of serialized Rust values in the common result cache file, and the operations around LLVM are so expensive in terms of computation time and memory consumption that we need to have tight control over what is executed when and what stays in memory for how long. The query system could probably be extended with general purpose mechanisms to deal with all of the above but so far that seemed like more trouble than it would save.","breadcrumbs":"Queries: demand-driven compilation » Incremental compilation in detail » Incremental compilation and the compiler backend","id":"563","title":"Incremental compilation and the compiler backend"},"564":{"body":"The query system allows for applying modifiers to queries. These modifiers affect certain aspects of how the system treats the query with respect to incremental compilation: eval_always - A query with the eval_always attribute is re-executed unconditionally during incremental compilation. I.e. the system will not even try to mark the query's dep-node as green. This attribute has two use cases: eval_always queries can read inputs (from files, global state, etc). They can also produce side effects like writing to files and changing global state. Some queries are very likely to be re-evaluated because their result depends on the entire source code. In this case eval_always can be used as an optimization because the system can skip recording dependencies in the first place. no_hash - Applying no_hash to a query tells the system to not compute the fingerprint of the query's result. This has two consequences: Not computing the fingerprint can save quite a bit of time because fingerprinting is expensive, especially for large, complex values. Without the fingerprint, the system has to unconditionally assume that the result of the query has changed. As a consequence anything depending on a no_hash query will always be re-executed. Using no_hash for a query can make sense in two circumstances: If the result of the query is very likely to change whenever one of its inputs changes, e.g. a function like |a, b, c| -> (a * b * c). In such a case recomputing the query will always yield a red node if one of the inputs is red so we can spare us the trouble and default to red immediately. A counter example would be a function like |a| -> (a == 42) where the result does not change for most changes of a. If the result of a query is a big, monolithic collection (e.g. index_hir) and there are \"projection queries\" reading from that collection (e.g. hir_owner). In such a case the big collection will likely fulfill the condition above (any changed input means recomputing the whole collection) and the results of the projection queries will be hashed anyway. If we also hashed the collection query it would mean that we effectively hash the same data twice: once when hashing the collection and another time when hashing all the projection query results. no_hash allows us to avoid that redundancy and the projection queries act as a \"firewall\", shielding their dependents from the unconditionally red no_hash node. cache_on_disk_if - This attribute is what determines which query results are persisted in the incremental compilation query result cache. The attribute takes an expression that allows per query invocation decisions. For example, it makes no sense to store values from upstream crates in the cache because they are already available in the upstream crate's metadata. anon - This attribute makes the system use \"anonymous\" dep-nodes for the given query. An anonymous dep-node is not identified by the corresponding query key, instead its ID is computed from the IDs of its dependencies. This allows the red-green system to do its change detection even if there is no query key available for a given dep-node -- something which is needed for handling trait selection because it is not based on queries.","breadcrumbs":"Queries: demand-driven compilation » Incremental compilation in detail » Query modifiers","id":"564","title":"Query modifiers"},"565":{"body":"It's interesting to note that eval_always and no_hash can be used together in the so-called \"projection query\" pattern. It is often the case that there is one query that depends on the entirety of the compiler's input (e.g. the indexed HIR) and another query that projects individual values out of this monolithic value (e.g. a HIR item with a certain DefId). These projection queries allow for building change propagation \"firewalls\" because even if the result of the monolithic query changes (which it is very likely to do) the small projections can still mostly be marked as green. +------------+ | | +---------------+ +--------+ | | <---------| projection(x) | <---------| foo(a) | | | +---------------+ +--------+ | | | monolithic | +---------------+ +--------+ | query | <---------| projection(y) | <---------| bar(b) | | | +---------------+ +--------+ | | | | +---------------+ +--------+ | | <---------| projection(z) | <---------| baz(c) | | | +---------------+ +--------+ +------------+ Let's assume that the result monolithic_query changes so that also the result of projection(x) has changed, i.e. both their dep-nodes are being marked as red. As a consequence foo(a) needs to be re-executed; but bar(b) and baz(c) can be marked as green. However, if foo, bar, and baz would have directly depended on monolithic_query then all of them would have had to be re-evaluated. This pattern works even without eval_always and no_hash but the two modifiers can be used to avoid unnecessary overhead. If the monolithic query is likely to change at any minor modification of the compiler's input it makes sense to mark it as eval_always, thus getting rid of its dependency tracking cost. And it always makes sense to mark the monolithic query as no_hash because we have the projections to take care of keeping things green as much as possible.","breadcrumbs":"Queries: demand-driven compilation » Incremental compilation in detail » The projection query pattern","id":"565","title":"The projection query pattern"},"566":{"body":"There are many things that still can be improved.","breadcrumbs":"Queries: demand-driven compilation » Incremental compilation in detail » Shortcomings of the current system","id":"566","title":"Shortcomings of the current system"},"567":{"body":"The current system is not able to update on-disk caches and the dependency graph in-place. Instead it has to rewrite each file entirely in each compilation session. The overhead of doing so is a few percent of total compilation time.","breadcrumbs":"Queries: demand-driven compilation » Incremental compilation in detail » Incrementality of on-disk data structures","id":"567","title":"Incrementality of on-disk data structures"},"568":{"body":"Data structures used as query results could be factored in a way that removes edges from the dependency graph. Especially \"span\" information is very volatile, so including it in query result will increase the chance that the result won't be reusable. See https://github.com/rust-lang/rust/issues/47389 for more information.","breadcrumbs":"Queries: demand-driven compilation » Incremental compilation in detail » Unnecessary data dependencies","id":"568","title":"Unnecessary data dependencies"},"569":{"body":"","breadcrumbs":"Queries: demand-driven compilation » Debugging and testing » Debugging and testing dependencies","id":"569","title":"Debugging and testing dependencies"},"57":{"body":"Setting optimize = false makes the compiler too slow for tests. However, to improve the test cycle, you can disable optimizations selectively only for the crates you'll have to rebuild ( source ). For example, when working on rustc_mir_build, the rustc_mir_build and rustc_driver crates take the most time to incrementally rebuild. You could therefore set the following in the root Cargo.toml: [profile.release.package.rustc_mir_build]\nopt-level = 0\n[profile.release.package.rustc_driver]\nopt-level = 0","breadcrumbs":"How to build and run the compiler » Suggested workflows » Fine-tuning optimizations","id":"57","title":"Fine-tuning optimizations"},"570":{"body":"There are various ways to write tests against the dependency graph. The simplest mechanisms are the #[rustc_if_this_changed] and #[rustc_then_this_would_need] annotations. These are used in ui tests to test whether the expected set of paths exist in the dependency graph. As an example, see tests/ui/dep-graph/dep-graph-caller-callee.rs , or the tests below. #[rustc_if_this_changed]\nfn foo() { } #[rustc_then_this_would_need(TypeckTables)] //~ ERROR OK\nfn bar() { foo(); } This should be read as If this (foo) is changed, then this (i.e. bar)'s TypeckTables would need to be changed. Technically, what occurs is that the test is expected to emit the string \"OK\" on stderr, associated to this line. You could also add the lines #[rustc_then_this_would_need(TypeckTables)] //~ ERROR no path\nfn baz() { } Whose meaning is If foo is changed, then baz's TypeckTables does not need to be changed. The macro must emit an error, and the error message must contains \"no path\". Recall that the //~ ERROR OK is a comment from the point of view of the Rust code we test, but is meaningful from the point of view of the test itself.","breadcrumbs":"Queries: demand-driven compilation » Debugging and testing » Testing the dependency graph","id":"570","title":"Testing the dependency graph"},"571":{"body":"","breadcrumbs":"Queries: demand-driven compilation » Debugging and testing » Debugging the dependency graph","id":"571","title":"Debugging the dependency graph"},"572":{"body":"The compiler is also capable of dumping the dependency graph for your debugging pleasure. To do so, pass the -Z dump-dep-graph flag. The graph will be dumped to dep_graph.{txt,dot} in the current directory. You can override the filename with the RUST_DEP_GRAPH environment variable. Frequently, though, the full dep graph is quite overwhelming and not particularly helpful. Therefore, the compiler also allows you to filter the graph. You can filter in three ways: All edges originating in a particular set of nodes (usually a single node). All edges reaching a particular set of nodes. All edges that lie between given start and end nodes. To filter, use the RUST_DEP_GRAPH_FILTER environment variable, which should look like one of the following: source_filter // nodes originating from source_filter\n-> target_filter // nodes that can reach target_filter\nsource_filter -> target_filter // nodes in between source_filter and target_filter source_filter and target_filter are a &-separated list of strings. A node is considered to match a filter if all of those strings appear in its label. So, for example: RUST_DEP_GRAPH_FILTER='-> TypeckTables' would select the predecessors of all TypeckTables nodes. Usually though you want the TypeckTables node for some particular fn, so you might write: RUST_DEP_GRAPH_FILTER='-> TypeckTables & bar' This will select only the predecessors of TypeckTables nodes for functions with bar in their name. Perhaps you are finding that when you change foo you need to re-type-check bar, but you don't think you should have to. In that case, you might do: RUST_DEP_GRAPH_FILTER='Hir & foo -> TypeckTables & bar' This will dump out all the nodes that lead from Hir(foo) to TypeckTables(bar), from which you can (hopefully) see the source of the erroneous edge.","breadcrumbs":"Queries: demand-driven compilation » Debugging and testing » Dumping the graph","id":"572","title":"Dumping the graph"},"573":{"body":"Sometimes, after you dump the dependency graph, you will find some path that should not exist, but you will not be quite sure how it came to be. When the compiler is built with debug assertions, it can help you track that down. Simply set the RUST_FORBID_DEP_GRAPH_EDGE environment variable to a filter. Every edge created in the dep-graph will be tested against that filter – if it matches, a bug! is reported, so you can easily see the backtrace (RUST_BACKTRACE=1). The syntax for these filters is the same as described in the previous section. However, note that this filter is applied to every edge and doesn't handle longer paths in the graph, unlike the previous section. Example: You find that there is a path from the Hir of foo to the type check of bar and you don't think there should be. You dump the dep-graph as described in the previous section and open dep-graph.txt to see something like: Hir(foo) -> Collect(bar)\nCollect(bar) -> TypeckTables(bar) That first edge looks suspicious to you. So you set RUST_FORBID_DEP_GRAPH_EDGE to Hir&foo -> Collect&bar, re-run, and then observe the backtrace. Voila, bug fixed!","breadcrumbs":"Queries: demand-driven compilation » Debugging and testing » Tracking down incorrect edges","id":"573","title":"Tracking down incorrect edges"},"574":{"body":"What is Salsa? How does it work? Key Salsa concepts Query Database Query Groups This chapter is based on the explanation given by Niko Matsakis in this video about Salsa . To find out more you may want to watch Salsa In More Depth , also by Niko Matsakis. As of November 2022, although Salsa is inspired by (among other things) rustc's query system, it is not used directly in rustc. It is used in chalk , an implementation of Rust's trait system, and extensively in rust-analyzer , the official implementation of the language server protocol for Rust, but there are no medium or long-term concrete plans to integrate it into the compiler.","breadcrumbs":"Queries: demand-driven compilation » Salsa » How Salsa works","id":"574","title":"How Salsa works"},"575":{"body":"Salsa is a library for incremental recomputation. This means it allows reusing computations that were already done in the past to increase the efficiency of future computations. The objectives of Salsa are: Provide that functionality in an automatic way, so reusing old computations is done automatically by the library. Doing so in a \"sound\", or \"correct\", way, therefore leading to the same results as if it had been done from scratch. Salsa's actual model is much richer, allowing many kinds of inputs and many different outputs. For example, integrating Salsa with an IDE could mean that the inputs could be manifests (Cargo.toml, rust-toolchain.toml), entire source files (foo.rs), snippets and so on. The outputs of such an integration could range from a binary executable, to lints, types (for example, if a user selects a certain variable and wishes to see its type), completions, etc.","breadcrumbs":"Queries: demand-driven compilation » Salsa » What is Salsa?","id":"575","title":"What is Salsa?"},"576":{"body":"The first thing that Salsa has to do is identify the \"base inputs\" that are not something computed but given as input. Then Salsa has to also identify intermediate, \"derived\" values, which are something that the library produces, but, for each derived value there's a \"pure\" function that computes the derived value. For example, there might be a function ast(x: Path) -> AST. The produced Abstract Syntax Tree (AST) isn't a final value, it's an intermediate value that the library would use for the computation. This means that when you try to compute with the library, Salsa is going to compute various derived values, and eventually read the input and produce the result for the asked computation. In the course of computing, Salsa tracks which inputs were accessed and which values are derived. This information is used to determine what's going to happen when the inputs change: are the derived values still valid? This doesn't necessarily mean that each computation downstream from the input is going to be checked, which could be costly. Salsa only needs to check each downstream computation until it finds one that isn't changed. At that point, it won't check other derived computations since they wouldn't need to change. It's helpful to think about this as a graph with nodes. Each derived value has a dependency on other values, which could themselves be either base or derived. Base values don't have a dependency. I <- A <- C ... |\nJ <- B <--+ When an input I changes, the derived value A could change. The derived value B, which does not depend on I, A, or any value derived from A or I, is not subject to change. Therefore, Salsa can reuse the computation done for B in the past, without having to compute it again. The computation could also terminate early. Keeping the same graph as before, say that input I has changed in some way (and input J hasn't), but when computing A again, it's found that A hasn't changed from the previous computation. This leads to an \"early termination\", because there's no need to check if C needs to change, since both C direct inputs, A and B, haven't changed.","breadcrumbs":"Queries: demand-driven compilation » Salsa » How does it work?","id":"576","title":"How does it work?"},"577":{"body":"","breadcrumbs":"Queries: demand-driven compilation » Salsa » Key Salsa concepts","id":"577","title":"Key Salsa concepts"},"578":{"body":"A query is some value that Salsa can access in the course of computation. Each query can have a number of keys (from 0 to many), and all queries have a result, akin to functions. 0-key queries are called \"input\" queries.","breadcrumbs":"Queries: demand-driven compilation » Salsa » Query","id":"578","title":"Query"},"579":{"body":"The database is basically the context for the entire computation, it's meant to store Salsa's internal state, all intermediate values for each query, and anything else that the computation might need. The database must know all the queries the library is going to do before it can be built, but they don't need to be specified in the same place. After the database is formed, it can be accessed with queries that are very similar to functions. Since each query's result is stored in the database, when a query is invoked N-times, it will return N- cloned results, without having to recompute the query (unless the input has changed in such a way that it warrants recomputation). For each input query (0-key), a \"set\" method is generated, allowing the user to change the output of such query, and trigger previous memoized values to be potentially invalidated.","breadcrumbs":"Queries: demand-driven compilation » Salsa » Database","id":"579","title":"Database"},"58":{"body":"Working on multiple branches in parallel can be a little annoying, since building the compiler on one branch will cause the old build and the incremental compilation cache to be overwritten. One solution would be to have multiple clones of the repository, but that would mean storing the Git metadata multiple times, and having to update each clone individually. Fortunately, Git has a better solution called worktrees . This lets you create multiple \"working trees\", which all share the same Git database. Moreover, because all of the worktrees share the same object database, if you update a branch (e.g. master) in any of them, you can use the new commits from any of the worktrees. One caveat, though, is that submodules do not get shared. They will still be cloned multiple times. Given you are inside the root directory for your Rust repository, you can create a \"linked working tree\" in a new \"rust2\" directory by running the following command: git worktree add ../rust2 Creating a new worktree for a new branch based on master looks like: git worktree add -b my-feature ../rust2 master You can then use that rust2 folder as a separate workspace for modifying and building rustc!","breadcrumbs":"How to build and run the compiler » Suggested workflows » Working on multiple branches at the same time","id":"58","title":"Working on multiple branches at the same time"},"580":{"body":"A query group is a set of queries which have been defined together as a unit. The database is formed by combining query groups. Query groups are akin to \"Salsa modules\". A set of queries in a query group are just a set of methods in a trait. To create a query group a trait annotated with a specific attribute (#[salsa::query_group(...)]) has to be created. An argument must also be provided to said attribute as it will be used by Salsa to create a struct to be used later when the database is created. Example input query group: /// This attribute will process this tree, produce this tree as output, and produce\n/// a bunch of intermediate stuff that Salsa also uses. One of these things is a\n/// \"StorageStruct\", whose name we have specified in the attribute.\n///\n/// This query group is a bunch of **input** queries, that do not rely on any\n/// derived input.\n#[salsa::query_group(InputsStorage)]\npub trait Inputs { /// This attribute (`#[salsa::input]`) indicates that this query is a base /// input, therefore `set_manifest` is going to be auto-generated #[salsa::input] fn manifest(&self) -> Manifest; #[salsa::input] fn source_text(&self, name: String) -> String;\n} To create a derived query group, one must specify which other query groups this one depends on by specifying them as supertraits, as seen in the following example: /// This query group is going to contain queries that depend on derived values.\n/// A query group can access another query group's queries by specifying the\n/// dependency as a supertrait. Query groups can be stacked as much as needed using\n/// that pattern.\n#[salsa::query_group(ParserStorage)]\npub trait Parser: Inputs { /// This query `ast` is not an input query, it's a derived query this means /// that a definition is necessary. fn ast(&self, name: String) -> String;\n} When creating a derived query the implementation of said query must be defined outside the trait. The definition must take a database parameter as an impl Trait (or dyn Trait), where trait is the query group that the definition belongs to, in addition to the other keys. /// This is going to be the definition of the `ast` query in the `Parser` trait.\n/// So, when the query `ast` is invoked, and it needs to be recomputed, Salsa is\n/// going to call this function and it's going to give it the database as `impl\n/// Parser`. The function doesn't need to be aware of all the queries of all the\n/// query groups\nfn ast(db: &impl Parser, name: String) -> String { //! Note, `impl Parser` is used here but `dyn Parser` works just as well /* code */ ///By passing an `impl Parser`, this is allowed let source_text = db.input_file(name); /* do the actual parsing */ return ast;\n} Eventually, after all the query groups have been defined, the database can be created by declaring a struct. To specify which query groups are going to be part of the database an attribute (#[salsa::database(...)]) must be added. The argument of said attribute is a list of identifiers, specifying the query groups storages . ///This attribute specifies which query groups are going to be in the database\n#[salsa::database(InputsStorage, ParserStorage)]\n#[derive(Default)] //optional!\nstruct MyDatabase { ///You also need this one field runtime : salsa::Runtime,\n}\n///And this trait has to be implemented\nimpl salsa::Database for MyDatabase { fn salsa_runtime(&self) -> &salsa::Runtime { &self.runtime }\n} Example usage: fn main() { let db = MyDatabase::default(); db.set_manifest(...); db.set_source_text(...); loop { db.ast(...); //will reuse results db.set_source_text(...); }\n}","breadcrumbs":"Queries: demand-driven compilation » Salsa » Query Groups","id":"580","title":"Query Groups"},"581":{"body":"Generally rustc tries to be pretty careful how it manages memory. The compiler allocates a lot of data structures throughout compilation, and if we are not careful, it will take a lot of time and space to do so. One of the main way the compiler manages this is using arena s and interning .","breadcrumbs":"Memory management in rustc » Memory management in rustc","id":"581","title":"Memory management in rustc"},"582":{"body":"Since A LOT of data structures are created during compilation, for performance reasons, we allocate them from a global memory pool. Each are allocated once from a long-lived arena . This is called arena allocation . This system reduces allocations/deallocations of memory. It also allows for easy comparison of types (more on types here ) for equality: for each interned type X, we implemented PartialEq for X , so we can just compare pointers. The CtxtInterners type contains a bunch of maps of interned types and the arena itself.","breadcrumbs":"Memory management in rustc » Arenas and Interning","id":"582","title":"Arenas and Interning"},"583":{"body":"Taking the example of ty::TyKind which represents a type in the compiler (you can read more here ). Each time we want to construct a type, the compiler doesn’t naively allocate from the buffer. Instead, we check if that type was already constructed. If it was, we just get the same pointer we had before, otherwise we make a fresh pointer. With this schema if we want to know if two types are the same, all we need to do is compare the pointers which is efficient. ty::TyKind should never be constructed on the stack, and it would be unusable if done so. You always allocate them from this arena and you always intern them so they are unique. At the beginning of the compilation we make a buffer and each time we need to allocate a type we use some of this memory buffer. If we run out of space we get another one. The lifetime of that buffer is 'tcx. Our types are tied to that lifetime, so when compilation finishes all the memory related to that buffer is freed and our 'tcx references would be invalid. In addition to types, there are a number of other arena-allocated data structures that you can allocate, and which are found in this module. Here are a few examples: GenericArgs , allocated with mk_args – this will intern a slice of types, often used to specify the values to be substituted for generics args (e.g. HashMap would be represented as a slice &'tcx [tcx.types.i32, tcx.types.u32]). TraitRef , typically passed by value – a trait reference consists of a reference to a trait along with its various type parameters (including Self), like i32: Display (here, the def-id would reference the Display trait, and the args would contain i32). Note that def-id is defined and discussed in depth in the AdtDef and DefId section. Predicate defines something the trait system has to prove (see traits module).","breadcrumbs":"Memory management in rustc » Example: ty::TyKind","id":"583","title":"Example: ty::TyKind"},"584":{"body":"The typing context (tcx) is the central data structure in the compiler. It is the context that you use to perform all manner of queries. The struct TyCtxt defines a reference to this shared context: tcx: TyCtxt<'tcx>\n// ----\n// |\n// arena lifetime As you can see, the TyCtxt type takes a lifetime parameter. When you see a reference with a lifetime like 'tcx, you know that it refers to arena-allocated data (or data that lives as long as the arenas, anyhow).","breadcrumbs":"Memory management in rustc » The tcx and how it uses lifetimes","id":"584","title":"The tcx and how it uses lifetimes"},"585":{"body":"The Rust compiler is a fairly large program containing lots of big data structures (e.g. the Abstract Syntax Tree (AST) , High-Level Intermediate Representation (HIR) , and the type system) and as such, arenas and references are heavily relied upon to minimize unnecessary memory use. This manifests itself in the way people can plug into the compiler (i.e. the driver ), preferring a \"push\"-style API (callbacks) instead of the more Rust-ic \"pull\" style (think the Iterator trait). Thread-local storage and interning are used a lot through the compiler to reduce duplication while also preventing a lot of the ergonomic issues due to many pervasive lifetimes. The rustc_middle::ty::tls module is used to access these thread-locals, although you should rarely need to touch it.","breadcrumbs":"Memory management in rustc » A Note On Lifetimes","id":"585","title":"A Note On Lifetimes"},"586":{"body":"rustc has to serialize and deserialize various data during compilation. Specifically: \"Crate metadata\", consisting mainly of query outputs, are serialized from a binary format into rlib and rmeta files that are output when compiling a library crate. These rlib and rmeta files are then deserialized by the crates which depend on that library. Certain query outputs are serialized in a binary format to persist incremental compilation results . CrateInfo is serialized to JSON when the -Z no-link flag is used, and deserialized from JSON when the -Z link-only flag is used.","breadcrumbs":"Serialization in rustc » Serialization in rustc","id":"586","title":"Serialization in rustc"},"587":{"body":"The rustc_serialize crate defines two traits for types which can be serialized: pub trait Encodable { fn encode(&self, s: &mut S) -> Result<(), S::Error>;\n} pub trait Decodable: Sized { fn decode(d: &mut D) -> Result;\n} It also defines implementations of these for various common standard library primitive types such as integer types, floating point types, bool, char, str, etc. For types that are constructed from those types, Encodable and Decodable are usually implemented by derives . These generate implementations that forward deserialization to the fields of the struct or enum. For a struct those impls look something like this: #![feature(rustc_private)]\nextern crate rustc_serialize;\nuse rustc_serialize::{Decodable, Decoder, Encodable, Encoder}; struct MyStruct { int: u32, float: f32,\n} impl Encodable for MyStruct { fn encode(&self, s: &mut E) -> Result<(), E::Error> { s.emit_struct(\"MyStruct\", 2, |s| { s.emit_struct_field(\"int\", 0, |s| self.int.encode(s))?; s.emit_struct_field(\"float\", 1, |s| self.float.encode(s)) }) }\n} impl Decodable for MyStruct { fn decode(s: &mut D) -> Result { s.read_struct(\"MyStruct\", 2, |d| { let int = d.read_struct_field(\"int\", 0, Decodable::decode)?; let float = d.read_struct_field(\"float\", 1, Decodable::decode)?; Ok(MyStruct { int, float }) }) }\n}","breadcrumbs":"Serialization in rustc » The Encodable and Decodable traits","id":"587","title":"The Encodable and Decodable traits"},"588":{"body":"rustc has a lot of arena allocated types . Deserializing these types isn't possible without access to the arena that they need to be allocated on. The TyDecoder and TyEncoder traits are supertraits of Decoder and Encoder that allow access to a TyCtxt . Types which contain arena allocated types can then bound the type parameter of their Encodable and Decodable implementations with these traits. For example impl<'tcx, D: TyDecoder<'tcx>> Decodable for MyStruct<'tcx> { /* ... */\n} The TyEncodable and TyDecodable derive macros will expand to such an implementation. Decoding the actual arena allocated type is harder, because some of the implementations can't be written due to the orphan rules . To work around this, the RefDecodable trait is defined in rustc_middle . This can then be implemented for any type. The TyDecodable macro will call RefDecodable to decode references, but various generic code needs types to actually be Decodable with a specific decoder. For interned types instead of manually implementing RefDecodable, using a new type wrapper, like ty::Predicate and manually implementing Encodable and Decodable may be simpler.","breadcrumbs":"Serialization in rustc » Encoding and Decoding arena allocated types","id":"588","title":"Encoding and Decoding arena allocated types"},"589":{"body":"The rustc_macros crate defines various derives to help implement Decodable and Encodable. The Encodable and Decodable macros generate implementations that apply to all Encoders and Decoders. These should be used in crates that don't depend on rustc_middle , or that have to be serialized by a type that does not implement TyEncoder. MetadataEncodable and MetadataDecodable generate implementations that only allow decoding by rustc_metadata::rmeta::encoder::EncodeContext and rustc_metadata::rmeta::decoder::DecodeContext . These are used for types that contain rustc_metadata::rmeta:: Lazy*. TyEncodable and TyDecodable generate implementation that apply to any TyEncoder or TyDecoder. These should be used for types that are only serialized in crate metadata and/or the incremental cache, which is most serializable types in rustc_middle.","breadcrumbs":"Serialization in rustc » Derive macros","id":"589","title":"Derive macros"},"59":{"body":"Several nix configurations are defined in src/tools/nix-dev-shell. If you're using direnv, you can create a symbol link to src/tools/nix-dev-shell/envrc-flake or src/tools/nix-dev-shell/envrc-shell ln -s ./src/tools/nix-dev-shell/envrc-flake ./.envrc # Use flake or ln -s ./src/tools/nix-dev-shell/envrc-shell ./.envrc # Use nix-shell","breadcrumbs":"How to build and run the compiler » Suggested workflows » Working with nix","id":"59","title":"Working with nix"},"590":{"body":"Ty can be deeply recursive, if each Ty was encoded naively then crate metadata would be very large. To handle this, each TyEncoder has a cache of locations in its output where it has serialized types. If a type being encoded is in the cache, then instead of serializing the type as usual, the byte offset within the file being written is encoded instead. A similar scheme is used for ty::Predicate.","breadcrumbs":"Serialization in rustc » Shorthands","id":"590","title":"Shorthands"},"591":{"body":"Crate metadata is initially loaded before the TyCtxt<'tcx> is created, so some deserialization needs to be deferred from the initial loading of metadata. The LazyValue type wraps the (relative) offset in the crate metadata where a T has been serialized. There are also some variants, LazyArray and LazyTable . The LazyArray<[T]> and LazyTable types provide some functionality over Lazy> and Lazy>: It's possible to encode a LazyArray directly from an Iterator, without first collecting into a Vec. Indexing into a LazyTable does not require decoding entries other than the one being read. note : LazyValue does not cache its value after being deserialized the first time. Instead the query system itself is the main way of caching these results.","breadcrumbs":"Serialization in rustc » LazyValue","id":"591","title":"LazyValue"},"592":{"body":"A few types, most notably DefId, need to have different implementations for different Encoders. This is currently handled by ad-hoc specializations, for example: DefId has a default implementation of Encodable and a specialized one for Encodable.","breadcrumbs":"Serialization in rustc » Specialization","id":"592","title":"Specialization"},"593":{"body":"As of November 2024,\nthe parallel front-end is undergoing significant changes,\nso this page contains quite a bit of outdated information. Tracking issue: https://github.com/rust-lang/rust/issues/113349 As of November 2024, most of the rust compiler is now parallelized. The codegen part is executed concurrently by default. You can use the -C codegen-units=n option to control the number of concurrent tasks. The parts after HIR lowering to codegen such as type checking, borrowing checking, and mir optimization are parallelized in the nightly version. Currently, they are executed in serial by default, and parallelization is manually enabled by the user using the -Z threads = n option. Other parts, such as lexical parsing, HIR lowering, and macro expansion, are still executed in serial mode. The following sections are kept for now but are quite outdated.","breadcrumbs":"Parallel compilation » Parallel compilation","id":"593","title":"Parallel compilation"},"594":{"body":"During monomorphization the compiler splits up all the code to be generated into smaller chunks called codegen units . These are then generated by independent instances of LLVM running in parallel. At the end, the linker is run to combine all the codegen units together into one binary. This process occurs in the rustc_codegen_ssa::base module.","breadcrumbs":"Parallel compilation » Code generation","id":"594","title":"Code generation"},"595":{"body":"The underlying thread-safe data-structures used in the parallel compiler can be found in the rustc_data_structures::sync module. These data structures are implemented differently depending on whether parallel-compiler is true. data structure parallel non-parallel Lock (parking_lot::Mutex) (std::cell::RefCell) RwLock (parking_lot::RwLock) (std::cell::RefCell) MTLock (Lock) (T) ReadGuard parking_lot::RwLockReadGuard std::cell::Ref MappedReadGuard parking_lot::MappedRwLockReadGuard std::cell::Ref WriteGuard parking_lot::RwLockWriteGuard std::cell::RefMut MappedWriteGuard parking_lot::MappedRwLockWriteGuard std::cell::RefMut LockGuard parking_lot::MutexGuard std::cell::RefMut These thread-safe data structures are interspersed during compilation which can cause lock contention resulting in degraded performance as the number of threads increases beyond 4. So we audit the use of these data structures which leads to either a refactoring so as to reduce the use of shared state, or the authoring of persistent documentation covering the specific of the invariants, the atomicity, and the lock orderings. On the other hand, we still need to figure out what other invariants during compilation might not hold in parallel compilation.","breadcrumbs":"Parallel compilation » Data structures","id":"595","title":"Data structures"},"596":{"body":"WorkerLocal is a special data structure implemented for parallel compilers. It holds worker-locals values for each thread in a thread pool. You can only access the worker local value through the Deref impl on the thread pool it was constructed on. It panics otherwise. WorkerLocal is used to implement the Arena allocator in the parallel environment, which is critical in parallel queries. Its implementation is located in the rustc_data_structures::sync::worker_local module. However, in the non-parallel compiler, it is implemented as (OneThread), whose T can be accessed directly through Deref::deref.","breadcrumbs":"Parallel compilation » WorkerLocal","id":"596","title":"WorkerLocal"},"597":{"body":"The parallel iterators provided by the rayon crate are easy ways to implement parallelism. In the current implementation of the parallel compiler we use a custom fork of rayon to run tasks in parallel. Some iterator functions are implemented to run loops in parallel when parallel-compiler is true. Function(Omit Send and Sync) Introduction Owning Module par_iter (t: T) -> T::Iter generate a parallel iterator rustc_data_structure::sync par_for_each_in (t: T, for_each: impl Fn(T::Item)) generate a parallel iterator and run for_each on each element rustc_data_structure::sync Map::par_body_owners (self, f: impl Fn(LocalDefId)) run f on all hir owners in the crate rustc_middle::hir::map Map::par_for_each_module (self, f: impl Fn(LocalDefId)) run f on all modules and sub modules in the crate rustc_middle::hir::map ModuleItems::par_items (&self, f: impl Fn(ItemId)) run f on all items in the module rustc_middle::hir ModuleItems::par_trait_items (&self, f: impl Fn(TraitItemId)) run f on all trait items in the module rustc_middle::hir ModuleItems::par_impl_items (&self, f: impl Fn(ImplItemId)) run f on all impl items in the module rustc_middle::hir ModuleItems::par_foreign_items (&self, f: impl Fn(ForeignItemId)) run f on all foreign items in the module rustc_middle::hir There are a lot of loops in the compiler which can possibly be parallelized using these functions. As of August 2022, scenarios where the parallel iterator function has been used are as follows: caller scenario callee rustc_metadata::rmeta::encoder::prefetch_mir Prefetch queries which will be needed later by metadata encoding par_iter rustc_monomorphize::collector::collect_crate_mono_items Collect monomorphized items reachable from non-generic items par_for_each_in rustc_interface::passes::analysis Check the validity of the match statements Map::par_body_owners rustc_interface::passes::analysis MIR borrow check Map::par_body_owners rustc_typeck::check::typeck_item_bodies Type check Map::par_body_owners rustc_interface::passes::hir_id_validator::check_crate Check the validity of hir Map::par_for_each_module rustc_interface::passes::analysis Check the validity of loops body, attributes, naked functions, unstable abi, const bodys Map::par_for_each_module rustc_interface::passes::analysis Liveness and intrinsic checking of MIR Map::par_for_each_module rustc_interface::passes::analysis Deathness checking Map::par_for_each_module rustc_interface::passes::analysis Privacy checking Map::par_for_each_module rustc_lint::late::check_crate Run per-module lints Map::par_for_each_module rustc_typeck::check_crate Well-formedness checking Map::par_for_each_module There are still many loops that have the potential to use parallel iterators.","breadcrumbs":"Parallel compilation » Parallel iterator","id":"597","title":"Parallel iterator"},"598":{"body":"The query model has some properties that make it actually feasible to evaluate multiple queries in parallel without too much effort: All data a query provider can access is via the query context, so the query context can take care of synchronizing access. Query results are required to be immutable so they can safely be used by different threads concurrently. When a query foo is evaluated, the cache table for foo is locked. If there already is a result, we can clone it, release the lock and we are done. If there is no cache entry and no other active query invocation computing the same result, we mark the key as being \"in progress\", release the lock and start evaluating. If there is another query invocation for the same key in progress, we release the lock, and just block the thread until the other invocation has computed the result we are waiting for. Cycle error detection in the parallel compiler requires more complex logic than in single-threaded mode. When worker threads in parallel queries stop making progress due to interdependence, the compiler uses an extra thread (named deadlock handler) to detect, remove and report the cycle error. The parallel query feature still has implementation to do, most of which is related to the previous Data Structures and Parallel Iterators. See this open feature tracking issue .","breadcrumbs":"Parallel compilation » Query system","id":"598","title":"Query system"},"599":{"body":"As of November 2022, there are still a number of steps to complete before rustdoc rendering can be made parallel (see a open discussion of parallel rustdoc ).","breadcrumbs":"Parallel compilation » Rustdoc","id":"599","title":"Rustdoc"},"6":{"body":"Some work is too large to be done by a single person. In this case, it's common to have \"Tracking issues\" to co-ordinate the work between contributors. Here are some example tracking issues where it's easy to pick up work without a large time commitment: Move UI tests to subdirectories If you find more recurring work, please feel free to add it here!","breadcrumbs":"Getting Started » Recurring work","id":"6","title":"Recurring work"},"60":{"body":"Note that when using nix on a not-NixOS distribution, it may be necessary to set patch-binaries-for-nix = true in bootstrap.toml . Bootstrap tries to detect whether it's running in nix and enable patching automatically, but this detection can have false negatives. You can also use your nix shell to manage bootstrap.toml: let config = pkgs.writeText \"rustc-config\" '' # Your bootstrap.toml content goes here ''\npkgs.mkShell { /* ... */ # This environment variable tells bootstrap where our bootstrap.toml is. RUST_BOOTSTRAP_CONFIG = config;\n}","breadcrumbs":"How to build and run the compiler » Suggested workflows » Note","id":"60","title":"Note"},"600":{"body":"Here are some resources that can be used to learn more: This IRLO thread by alexchricton about performance This IRLO thread by Zoxc, one of the pioneers of the effort This list of interior mutability in the compiler by nikomatsakis","breadcrumbs":"Parallel compilation » Resources","id":"600","title":"Resources"},"601":{"body":"From Crate to Clean Passes Anything But a Gas Station (or: Hot Potato) From Clean To HTML From Soup to Nuts (or: \"An Unbroken Thread Stretches From Those First Cells To Us\") Other Tricks Up Its Sleeve Testing Locally See Also This page describes rustdoc 's passes and modes. For an overview of rustdoc, see the \"Rustdoc overview\" chapter .","breadcrumbs":"Rustdoc internals » Rustdoc Internals","id":"601","title":"Rustdoc Internals"},"602":{"body":"In core.rs are two central items: the rustdoc::core::DocContext struct, and the rustdoc::core::run_global_ctxt function. The latter is where rustdoc calls out to rustc to compile a crate to the point where rustdoc can take over. The former is a state container used when crawling through a crate to gather its documentation. The main process of crate crawling is done in clean/mod.rs through several functions with names that start with clean_. Each function accepts an hir or ty data structure, and outputs a clean structure used by rustdoc. For example, this function for converting lifetimes : fn clean_lifetime<'tcx>(lifetime: &hir::Lifetime, cx: &mut DocContext<'tcx>) -> Lifetime { if let Some( rbv::ResolvedArg::EarlyBound(did) | rbv::ResolvedArg::LateBound(_, _, did) | rbv::ResolvedArg::Free(_, did), ) = cx.tcx.named_bound_var(lifetime.hir_id) && let Some(lt) = cx.args.get(&did).and_then(|arg| arg.as_lt()) { return lt.clone(); } Lifetime(lifetime.ident.name)\n} Also, clean/mod.rs defines the types for the \"cleaned\" Abstract Syntax Tree (AST) used later to render documentation pages. Each usually accompanies a clean_* function that takes some AST or High-Level Intermediate Representation (HIR) type from rustc and converts it into the appropriate \"cleaned\" type. \"Big\" items like modules or associated items may have some extra processing in its clean function, but for the most part these impls are straightforward conversions. The \"entry point\" to this module is clean::utils::krate , which is called by run_global_ctxt . The first step in clean::utils::krate is to invoke visit_ast::RustdocVisitor to process the module tree into an intermediate visit_ast::Module . This is the step that actually crawls the rustc_hir::Crate , normalizing various aspects of name resolution, such as: handling #[doc(inline)] and #[doc(no_inline)] handling import globs and cycles, so there are no duplicates or infinite directory trees inlining public use exports of private items, or showing a \"Reexport\" line in the module page inlining items with #[doc(hidden)] if the base item is hidden but the showing #[macro_export]-ed macros at the crate root, regardless of whether they're defined as a reexport or not After this step, clean::krate invokes clean_doc_module , which actually converts the HIR items to the cleaned AST . This is also the step where cross- crate inlining is performed, which requires converting rustc_middle data structures into the cleaned AST . The other major thing that happens in clean/mod.rs is the collection of doc comments and #[doc=\"\"] attributes into a separate field of the Attributes struct, present on anything that gets hand-written documentation. This makes it easier to collect this documentation later in the process. The primary output of this process is a clean::types::Crate with a tree of Item s which describe the publicly-documentable items in the target crate.","breadcrumbs":"Rustdoc internals » From Crate to Clean","id":"602","title":"From Crate to Clean"},"603":{"body":"Before moving on to the next major step, a few important \"passes\" occur over the cleaned AST . Several of these passes are lints and reports, but some of them mutate or generate new items. These are all implemented in the librustdoc/passes directory, one file per pass. By default, all of these passes are run on a crate, but the ones regarding dropping private/hidden items can be bypassed by passing --document-private-items to rustdoc. Note that unlike the previous set of AST transformations, the passes are run on the cleaned crate. Here is the list of passes as of March 2023: calculate-doc-coverage calculates information used for the --show-coverage flag. check-doc-test-visibility runs doctest visibility–related lints. This pass runs before strip-private, which is why it needs to be separate from run-lints. collect-intra-doc-links resolves intra-doc links . collect-trait-impls collects trait impls for each item in the crate. For example, if we define a struct that implements a trait, this pass will note that the struct implements that trait. propagate-doc-cfg propagates #[doc(cfg(...))] to child items. run-lints runs some of rustdoc's lints, defined in passes/lint. This is the last pass to run. bare_urls detects links that are not linkified, e.g., in Markdown such as Go to https://example.com/. It suggests wrapping the link with angle brackets: Go to . to linkify it. This is the code behind the rustdoc::bare_urls lint. check_code_block_syntax validates syntax inside Rust code blocks (```rust) html_tags detects invalid HTML (like an unclosed ) in doc comments. strip-hidden and strip-private strip all doc(hidden) and private items from the output. strip-private implies strip-priv-imports. Basically, the goal is to remove items that are not relevant for public documentation. This pass is skipped when --document-hidden-items is passed. strip-priv-imports strips all private import statements (use, extern crate) from a crate. This is necessary because rustdoc will handle public imports by either inlining the item's documentation to the module or creating a \"Reexports\" section with the import in it. The pass ensures that all of these imports are actually relevant to documentation. It is technically only run when --document-private-items is passed, but strip-private accomplishes the same thing. strip-private strips all private items from a crate which cannot be seen externally. This pass is skipped when --document-private-items is passed. There is also a stripper module in librustdoc/passes, but it is a collection of utility functions for the strip-* passes and is not a pass itself.","breadcrumbs":"Rustdoc internals » Passes Anything But a Gas Station (or: Hot Potato )","id":"603","title":"Passes Anything But a Gas Station (or: Hot Potato )"},"604":{"body":"This is where the \"second phase\" in rustdoc begins. This phase primarily lives in the librustdoc/formats and librustdoc/html folders, and it all starts with formats::renderer::run_format . This code is responsible for setting up a type that impl FormatRenderer, which for HTML is Context . This structure contains methods that get called by run_format to drive the doc rendering, which includes: init generates static.files, as well as search index and src/ item generates the item HTML files themselves after_krate generates other global resources like all.html In item, the \"page rendering\" occurs, via a mixture of Askama templates and manual write!() calls, starting in html/layout.rs . The parts that have not been converted to templates occur within a series of std::fmt::Display implementations and functions that pass around a &mut std::fmt::Formatter. The parts that actually generate HTML from the items and documentation start with print_item defined in html/render/print_item.rs , which switches out to one of several item_* functions based on kind of Item being rendered. Depending on what kind of rendering code you're looking for, you'll probably find it either in html/render/mod.rs for major items like \"what sections should I print for a struct page\" or html/format.rs for smaller component pieces like \"how should I print a where clause as part of some other item\". Whenever rustdoc comes across an item that should print hand-written documentation alongside, it calls out to html/markdown.rs which interfaces with the Markdown parser. This is exposed as a series of types that wrap a string of Markdown, and implement fmt::Display to emit HTML text. It takes special care to enable certain features like footnotes and tables and add syntax highlighting to Rust code blocks (via html/highlight.rs) before running the Markdown parser. There's also a function find_codes which is called by find_testable_codes that specifically scans for Rust code blocks so the test-runner code can find all the doctests in the crate.","breadcrumbs":"Rustdoc internals » From Clean To HTML","id":"604","title":"From Clean To HTML"},"605":{"body":"It's important to note that rustdoc can ask the compiler for type information directly, even during HTML generation. This didn't used to be the case , and a lot of rustdoc's architecture was designed around not doing that, but a TyCtxt is now passed to formats::renderer::run_format, which is used to run generation for both HTML and the (unstable as of March 2023) JSON format. This change has allowed other changes to remove data from the \"clean\" AST that can be easily derived from TyCtxt queries, and we'll usually accept PRs that remove fields from \"clean\" (it's been soft-deprecated), but this is complicated from two other constraints that rustdoc runs under: Docs can be generated for crates that don't actually pass type checking. This is used for generating docs that cover mutually-exclusive platform configurations, such as libstd having a single package of docs that cover all supported operating systems. This means rustdoc has to be able to generate docs from HIR. Docs can inline across crates. Since crate metadata doesn't contain HIR, it must be possible to generate inlined docs from the rustc_middle data. The \"clean\" AST acts as a common output format for both input formats. There is also some data in clean that doesn't correspond directly to HIR, such as synthetic impls for auto traits and blanket impls generated by the collect-trait-impls pass. Some additional data is stored in html::render::context::{Context, SharedContext}. These two types serve as ways to segregate rustdoc's data for an eventual future with multithreaded doc generation, as well as just keeping things organized: Context stores data used for generating the current page, such as its path, a list of HTML IDs that have been used (to avoid duplicate id=\"\"), and the pointer to SharedContext. SharedContext stores data that does not vary by page, such as the tcx pointer, and a list of all types.","breadcrumbs":"Rustdoc internals » From Soup to Nuts (or: \"An Unbroken Thread Stretches From Those First Cells To Us\" )","id":"605","title":"From Soup to Nuts (or: \"An Unbroken Thread Stretches From Those First Cells To Us\" )"},"606":{"body":"All this describes the process for generating HTML documentation from a Rust crate, but there are couple other major modes that rustdoc runs in. It can also be run on a standalone Markdown file, or it can run doctests on Rust code or standalone Markdown files. For the former, it shortcuts straight to html/markdown.rs, optionally including a mode which inserts a Table of Contents to the output HTML. For the latter, rustdoc runs a similar partial-compilation to get relevant documentation in test.rs, but instead of going through the full clean and render process, it runs a much simpler crate walk to grab just the hand-written documentation. Combined with the aforementioned \"find_testable_code\" in html/markdown.rs, it builds up a collection of tests to run before handing them off to the test runner. One notable location in test.rs is the function make_test, which is where hand-written doctests get transformed into something that can be executed. Some extra reading about make_test can be found here .","breadcrumbs":"Rustdoc internals » Other Tricks Up Its Sleeve","id":"606","title":"Other Tricks Up Its Sleeve"},"607":{"body":"Some features of the generated HTML documentation might require local storage to be used across pages, which doesn't work well without an HTTP server. To test these features locally, you can run a local HTTP server, like this: $ ./x doc library\n# The documentation has been generated into `build/[YOUR ARCH]/doc`.\n$ python3 -m http.server -d build/[YOUR ARCH]/doc Now you can browse your documentation just like you would if it was hosted on the internet. For example, the url for std will be rust/std/.","breadcrumbs":"Rustdoc internals » Testing Locally","id":"607","title":"Testing Locally"},"608":{"body":"The rustdoc api docs An overview of rustdoc The rustdoc user guide","breadcrumbs":"Rustdoc internals » See Also","id":"608","title":"See Also"},"609":{"body":"Rustdoc Search is two programs: search_index.rs and search.js. The first generates a nasty JSON file with a full list of items and function signatures in the crates in the doc bundle, and the second reads it, turns it into some in-memory structures, and scans them linearly to search. Search index format Parallel arrays and indexed maps Representing sparse columns VLQ Hex Roaring Bitmaps How descriptions are stored i, f, and p Searching by name Searching by type Re-exports Testing the search engine","breadcrumbs":"Rustdoc internals » Search » Rustdoc search","id":"609","title":"Rustdoc search"},"61":{"body":"If you use Bash, Zsh, Fish or PowerShell, you can find automatically-generated shell completion scripts for x.py in src/etc/completions . You can use source ./src/etc/completions/x.py. to load completions for your shell of choice, or & .\\src\\etc\\completions\\x.py.ps1 for PowerShell. Adding this to your shell's startup script (e.g. .bashrc) will automatically load this completion.","breadcrumbs":"How to build and run the compiler » Suggested workflows » Shell Completions","id":"61","title":"Shell Completions"},"610":{"body":"search.js calls this Raw, because it turns it into a more normal object tree after loading it. For space savings, it's also written without newlines or spaces. [ [ \"crate_name\", { // name \"n\": [\"function_name\", \"Data\"], // type \"t\": \"HF\", // parent module \"q\": [[0, \"crate_name\"]], // parent type \"i\": [2, 0], // type dictionary \"p\": [[1, \"i32\"], [1, \"str\"], [5, \"Data\", 0]], // function signature \"f\": \"{{gb}{d}}`\", // [[3, 1], [2]] // impl disambiguator \"b\": [], // deprecated flag \"c\": \"OjAAAAAAAAA=\", // empty bitmap // empty description flag \"e\": \"OjAAAAAAAAA=\", // empty bitmap // aliases \"a\": [[\"get_name\", 0]], // description shards \"D\": \"g\", // 3 // inlined re-exports \"r\": [], }]\n] src/librustdoc/html/static/js/rustdoc.d.ts defines an actual schema in a TypeScript type. Key Name Description n Names Item names t Item Type One-char item type code q Parent module Map i Parent type list of indexes f Function signature encoded b Impl disambiguator Map c Deprecation flag roaring bitmap e Description is empty roaring bitmap p Type dictionary [[item type, path]] a Alias Map D description shards encoded The above index defines a crate called crate_name with a free function called function_name and a struct called Data, with the type signature Data, i32 -> str, and an alias, get_name, that equivalently refers to function_name. The search index needs to fit the needs of the rustdoc compiler, the search.js frontend, and also be compact and fast to decode. It makes a lot of compromises: The rustdoc compiler runs on one crate at a time, so each crate has an essentially separate search index. It merges them by having each crate on one line and looking at the first quoted string. Names in the search index are given in their original case and with underscores. When the search index is loaded, search.js stores the original names for display, but also folds them to lowercase and strips underscores for search. You'll see them called normalized. The f array stores types as offsets into the p array. These types might actually be from another crate, so search.js has to turn the numbers into names and then back into numbers to deduplicate them if multiple crates in the same index mention the same types. It's a JSON file, but not designed to be human-readable. Browsers already include an optimized JSON decoder, so this saves on search.js code and performs better for small crates, but instead of using objects like normal JSON formats do, it tries to put data of the same type next to each other so that the sliding window used by DEFLATE can find redundancies. Where search.js does its own compression, it's designed to save memory when the file is finally loaded, not just size on disk or network transfer.","breadcrumbs":"Rustdoc internals » Search » Search index format","id":"610","title":"Search index format"},"611":{"body":"Abstractly, Rustdoc Search data is a table, stored in column-major form. Most data in the index represents a set of parallel arrays (the \"columns\") which refer to the same data if they're at the same position. For example, the above search index can be turned into this table: n t d q i f b c 0 crate_name D Documentation NULL 0 NULL NULL 0 1 function_name H This function gets the name of an integer with Data crate_name 2 {{gb}{d}} NULL 0 2 Data F The data struct crate_name 0 ` NULL 0 The crate row is implied in most columns, since its type is known (it's a crate), it can't have a parent (crates form the root of the module tree), its name is specified as the map key, and function-specific data like the impl disambiguator can't apply either. However, it can still have a description and it can still be deprecated. The crate, therefore, has a primary key of 0. The above code doesn't use c, which holds deprecated indices, or b, which maps indices to strings. If crate_name::function_name used both, it might look like this. \"b\": [[0, \"impl-Foo-for-Bar\"]], \"c\": \"OjAAAAEAAAAAAAIAEAAAABUAbgZYCQ==\", This attaches a disambiguator to index 1 and marks it deprecated. The advantage of this layout is that these APIs often have implicit structure that DEFLATE can take advantage of, but that rustdoc can't assume. Like how names are usually CamelCase or snake_case, but descriptions aren't. It also makes it easier to use a sparse data for things like boolean flags. q is a Map from the first applicable ID to a parent module path. This is a weird trick, but it makes more sense in pseudo-code: let mut parent_module = \"\";\nfor (i, entry) in search_index.iter().enumerate() { if q.contains(i) { parent_module = q.get(i); } // ... do other stuff with `entry` ...\n} This is valid because everything has a parent module (even if it's just the crate itself), and is easy to assemble because the rustdoc generator sorts by path before serializing. Doing this allows rustdoc to not only make the search index smaller, but reuse the same string representing the parent path across multiple in-memory items.","breadcrumbs":"Rustdoc internals » Search » Parallel arrays and indexed maps","id":"611","title":"Parallel arrays and indexed maps"},"612":{"body":"VLQ Hex This format is, as far as I know, used nowhere other than rustdoc. It follows this grammar: VLQHex = { VHItem | VHBackref }\nVHItem = VHNumber | ( '{', {VHItem}, '}' )\nVHNumber = { '@' | 'A' | 'B' | 'C' | 'D' | 'E' | 'F' | 'G' | 'H' | 'I' | 'J' | 'K' | 'L' | 'M' | 'N' | 'O' }, ( '`' | 'a' | 'b' | 'c' | 'd' | 'e' | 'f' | 'g' | 'h' | 'i' | 'j' | 'k ' | 'l' | 'm' | 'n' | 'o' )\nVHBackref = ( '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' | ':' | ';' | '<' | '=' | '>' | '?' ) A VHNumber is a variable-length, self-terminating base16 number (terminated because the last hexit is lowercase while all others are uppercase). The sign bit is represented using zig-zag encoding . This alphabet is chosen because the characters can be turned into hexits by masking off the last four bits of the ASCII encoding. A major feature of this encoding, as with all of the \"compression\" done in rustdoc, is that it can remain in its compressed format even in memory at runtime . This is why HBackref is only used at the top level, and why we don't just use Flate for everything: the decoder in search.js will reuse the entire decoded object whenever a backref is seen, saving decode work and memory. Roaring Bitmaps Flag-style data, such as deprecation and empty descriptions, are stored using the standard Roaring Bitmap serialization format with runs . The data is then base64 encoded when writing it. As a brief overview: a roaring bitmap is a chunked array of bits, described in this paper . A chunk can either be a list of integers, a bitfield, or a list of runs. In any case, the search engine has to base64 decode it, and read the chunk index itself, but the payload data stays as-is. All roaring bitmaps in rustdoc currently store a flag for each item index. The crate is item 0, all others start at 1.","breadcrumbs":"Rustdoc internals » Search » Representing sparse columns","id":"612","title":"Representing sparse columns"},"613":{"body":"The largest amount of data, and the main thing Rustdoc Search deals with that isn't actually used for searching, is descriptions. In a SERP table, this is what appears on the rightmost column. item type item path description (this part) function my_crate::my_function This function gets the name of an integer with Data When someone runs a search in rustdoc for the first time, their browser will work through a \"sandwich workload\" of three steps: Download the search-index.js and search.js files (a network bottleneck). Perform the actual search (a CPU and memory bandwidth bottleneck). Download the description data (another network bottleneck). Reducing the amount of data downloaded here will almost always increase latency, by delaying the decision of what to download behind other work and/or adding data dependencies where something can't be downloaded without first downloading something else. In this case, we can't start downloading descriptions until after the search is done, because that's what allows it to decide which descriptions to download (it needs to sort the results then truncate to 200). To do this, two columns are stored in the search index, building on both Roaring Bitmaps and on VLQ Hex. e is an index of e mpty descriptions. It's a roaring bitmap of each item (the crate itself is item 0, the rest start at 1). D is a shard list, stored in VLQ hex as flat list of integers. Each integer gives you the number of descriptions in the shard. As the decoder walks the index, it checks if the description is empty. if it's not, then it's in the \"current\" shard. When all items are exhausted, it goes on to the next shard. Inside each shard is a newline-delimited list of descriptions, wrapped in a JSONP-style function call.","breadcrumbs":"Rustdoc internals » Search » How descriptions are stored","id":"613","title":"How descriptions are stored"},"614":{"body":"i and f both index into p, the array of parent items. i is just a one-indexed number (not zero-indexed because 0 is used for items that have no parent item). It's different from q because q represents the parent module or crate , which everything has, while i/q are used for type and trait-associated items like methods. f, the function signatures, use a VLQ hex tree. A number is either a one-indexed reference into p, a negative number representing a generic, or zero for null. (the internal object representation also uses negative numbers, even after decoding, to represent generics). For example, {{gb}{d}} is equivalent to the json [[3, 1], [2]]. Because of zigzag encoding, ` is +0, a is -0 (which is not used), b is +1, and c is -1.","breadcrumbs":"Rustdoc internals » Search » i, f, and p","id":"614","title":"i, f, and p"},"615":{"body":"Searching by name works by looping through the search index and running these functions on each: editDistance is always used to determine a match (unless quotes are specified, which would use simple equality instead). It computes the number of swaps, inserts, and removes needed to turn the query name into the entry name. For example, foo has zero distance from itself, but a distance of 1 from ofo (one swap) and foob (one insert). It is checked against an heuristic threshold, and then, if it is within that threshold, the distance is stored for ranking. String.prototype.indexOf is always used to determine a match. If it returns anything other than -1, the result is added, even if editDistance exceeds its threshold, and the index is stored for ranking. checkPath is used if, and only if, a parent path is specified in the query. For example, vec has no parent path, but vec::vec does. Within checkPath, editDistance and indexOf are used, and the path query has its own heuristic threshold, too. If it's not within the threshold, the entry is rejected, even if the first two pass. If it's within the threshold, the path distance is stored for ranking. checkType is used only if there's a type filter, like the struct in struct:vec. If it fails, the entry is rejected. If all four criteria pass (plus the crate filter, which isn't technically part of the query), the results are sorted by sortResults .","breadcrumbs":"Rustdoc internals » Search » Searching by name","id":"615","title":"Searching by name"},"616":{"body":"Searching by type can be divided into two phases, and the second phase has two sub-phases. Turn names in the query into numbers. Loop over each entry in the search index: Quick rejection using a bloom filter. Slow rejection using a recursive type unification algorithm. In the names->numbers phase, if the query has only one name in it, the editDistance function is used to find a near match if the exact match fails, but if there's multiple items in the query, non-matching items are treated as generics instead. This means hahsmap will match hashmap on its own, but hahsmap, u32 is going to match the same things T, u32 matches (though rustdoc will detect this particular problem and warn about it). Then, when actually looping over each item, the bloom filter will probably reject entries that don't have every type mentioned in the query. For example, the bloom query allows a query of i32 -> u32 to match a function with the type i32, u32 -> bool, but unification will reject it later. The unification filter ensures that: Bag semantics are respected. If you query says i32, i32, then the function has to mention two i32s, not just one. Nesting semantics are respected. If your query says vec