//! This library is used to gather all error codes into one place, to make
//! their maintenance easier.

// tidy-alphabetical-start
#![deny(rustdoc::invalid_codeblock_attributes)]
// tidy-alphabetical-end

// This higher-order macro defines the error codes that are in use. It is used
// in the `rustc_errors` crate. Removed error codes are listed in the comment
// below.
//
// /!\ IMPORTANT /!\
//
// Error code explanation are defined in `error_codes/EXXXX.md` files. They must follow the RFC
// 1567 available here:
// https://rust-lang.github.io/rfcs/1567-long-error-codes-explanation-normalization.html
//
// Also, the contents of this macro is checked by tidy (in `check_error_codes_docs`). If you change
// the macro syntax you will need to change tidy as well.
//
// Do *not* remove entries from this list. Instead, just add a note to the corresponding markdown
// file saying that this error is not emitted by the compiler any more (see E0001.md for an
// example), and remove all code examples that do not build any more by marking them
// with `ignore (no longer emitted)`.
#[macro_export]
#[rustfmt::skip]
macro_rules! error_codes {
    ($macro:path) => (
        $macro!(
0001,
0002,
0004,
0005,
0007,
0009,
0010,
0013,
0014,
0015,
0023,
0025,
0026,
0027,
0029,
0030,
0033,
0034,
0038,
0040,
0044,
0045,
0046,
0049,
0050,
0053,
0054,
0055,
0057,
0059,
0060,
0061,
0062,
0063,
0067,
0069,
0070,
0071,
0072,
0073,
0074,
0075,
0076,
0077,
0080,
0081,
0084,
0087,
0088,
0089,
0090,
0091,
0092,
0093,
0094,
0106,
0107,
0109,
0110,
0116,
0117,
0118,
0119,
0120,
0121,
0124,
0128,
0130,
0131,
0132,
0133,
0136,
0137,
0138,
0139,
0152,
0154,
0158,
0161,
0162,
0164,
0165,
0170,
0178,
0183,
0184,
0185,
0186,
0191,
0192,
0193,
0195,
0197,
0198,
0199,
0200,
0201,
0203,
0204,
0205,
0206,
0207,
0208,
0210,
0211,
0212,
0214,
0220,
0221,
0222,
0223,
0224,
0225,
0226,
0227,
0228,
0229,
0230,
0231,
0232,
0243,
0244,
0251,
0252,
0253,
0254,
0255,
0256,
0259,
0260,
0261,
0262,
0263,
0264,
0267,
0268,
0271,
0275,
0276,
0277,
0281,
0282,
0283,
0284,
0297,
0301,
0302,
0303,
0307,
0308,
0309,
0310,
0311,
0312,
0316,
0317,
0320,
0321,
0322,
0323,
0324,
0325,
0326,
0328,
0329,
0364,
0365,
0366,
0367,
0368,
0369,
0370,
0371,
0373,
0374,
0375,
0376,
0377,
0378,
0379,
0380,
0381,
0382,
0383,
0384,
0386,
0387,
0388,
0389,
0390,
0391,
0392,
0393,
0398,
0399,
0401,
0403,
0404,
0405,
0407,
0408,
0409,
0411,
0412,
0415,
0416,
0422,
0423,
0424,
0425,
0426,
0428,
0429,
0430,
0431,
0432,
0433,
0434,
0435,
0436,
0437,
0438,
0439,
0445,
0446,
0447,
0448,
0449,
0451,
0452,
0453,
0454,
0455,
0457,
0458,
0459,
0460,
0461,
0462,
0463,
0464,
0466,
0468,
0469,
0472,
0476,
0477,
0478,
0482,
0491,
0492,
0493,
0495,
0496,
0497,
0498,
0499,
0500,
0501,
0502,
0503,
0504,
0505,
0506,
0507,
0508,
0509,
0510,
0511,
0512,
0514,
0515,
0516,
0517,
0518,
0519,
0520,
0521,
0522,
0523,
0524,
0525,
0527,
0528,
0529,
0530,
0531,
0532,
0533,
0534,
0535,
0536,
0537,
0538,
0539,
0541,
0542,
0543,
0544,
0545,
0546,
0547,
0549,
0550,
0551,
0552,
0554,
0556, // REMOVED: merged with other attribute error codes
0557,
0559,
0560,
0561,
0562,
0565,
0566,
0567,
0568,
0569,
0570,
0571,
0572,
0573,
0574,
0575,
0576,
0577,
0578,
0579,
0580,
0581,
0582,
0583,
0584,
0585,
0586,
0587,
0588,
0589,
0590,
0591,
0592,
0593,
0594,
0595,
0596,
0597,
0599,
0600,
0601,
0602,
0603,
0604,
0605,
0606,
0607,
0608,
0609,
0610,
0614,
0615,
0616,
0617,
0618,
0619,
0620,
0621,
0622, // REMOVED: rustc-intrinsic ABI was removed
0623,
0624,
0625,
0626,
0627,
0628,
0631,
0632,
0633,
0634,
0635,
0636,
0637,
0638,
0639,
0640,
0641,
0642,
0643,
0644,
0646,
0647,
0648,
0657,
0658,
0659,
0660,
0661,
0662,
0663,
0664,
0665,
0666,
0667,
0668,
0669,
0670,
0671,
0687,
0688,
0689,
0690,
0691,
0692,
0693,
0695,
0696,
0697,
0698,
0699, // REMOVED: merged into generic inference var error
0700,
0701,
0703,
0704,
0705,
0706,
0708,
0710,
0712,
0713,
0714,
0715,
0716,
0711,
0717,
0718,
0719,
0720,
0722,
0724,
0725,
0726,
0727,
0728,
0729,
0730,
0731,
0732,
0733,
0734,
0735,
0736,
0737,
0739,
0740,
0741,
0742,
0743,
0744,
0745,
0746,
0747,
0748,
0749,
0750,
0751,
0752,
0753,
0754,
0755,
0756,
0757,
0758,
0759,
0760,
0761,
0762,
0763,
0764,
0765,
0766,
0767,
0768,
0769,
0770,
0771,
0772,
0773, // REMOVED: no longer an error
0774,
0775,
0776,
0777,
0778,
0779,
0780,
0781,
0782,
0783,
0784,
0785,
0786,
0787,
0788,
0789,
0790,
0791,
0792,
0793,
0794,
0795,
0796,
0797,
0798,
0799,
0800,
0801,
0802,
0803,
0804,
0805,
0806,
        );
    )
}

// Undocumented removed error codes. Note that many removed error codes are kept in the list above
// and marked as no-longer emitted with a note in the markdown file (see E0001 for an example).
//  E0006, // merged with E0005
//  E0008, // cannot bind by-move into a pattern guard
//  E0019, // merged into E0015
//  E0035, // merged into E0087/E0089
//  E0036, // merged into E0087/E0089
//  E0068,
//  E0085,
//  E0086,
//  E0101, // replaced with E0282
//  E0102, // replaced with E0282
//  E0103,
//  E0104,
//  E0122, // bounds in type aliases are ignored, turned into proper lint
//  E0123,
//  E0127,
//  E0129,
//  E0134,
//  E0135,
//  E0141,
//  E0153, // unused error code
//  E0157, // unused error code
//  E0159, // use of trait `{}` as struct constructor
//  E0163, // merged into E0071
//  E0167,
//  E0168,
//  E0172, // non-trait found in a type sum, moved to resolve
//  E0173, // manual implementations of unboxed closure traits are experimental
//  E0174,
//  E0182, // merged into E0229
//  E0187, // cannot infer the kind of the closure
//  E0188, // can not cast an immutable reference to a mutable pointer
//  E0189, // deprecated: can only cast a boxed pointer to a boxed object
//  E0190, // deprecated: can only cast a &-pointer to an &-object
//  E0194, // merged into E0403
//  E0196, // cannot determine a type for this closure
//  E0209, // builtin traits can only be implemented on structs or enums
//  E0213, // associated types are not accepted in this context
//  E0215, // angle-bracket notation is not stable with `Fn`
//  E0216, // parenthetical notation is only stable with `Fn`
//  E0217, // ambiguous associated type, defined in multiple supertraits
//  E0218, // no associated type defined
//  E0219, // associated type defined in higher-ranked supertrait
//  E0233,
//  E0234,
//  E0235, // structure constructor specifies a structure of type but
//  E0236, // no lang item for range syntax
//  E0237, // no lang item for range syntax
//  E0238, // parenthesized parameters may only be used with a trait
//  E0239, // `next` method of `Iterator` trait has unexpected type
//  E0240,
//  E0241,
//  E0242,
//  E0245, // not a trait
//  E0246, // invalid recursive type
//  E0247,
//  E0248, // value used as a type, now reported earlier during resolution
//         // as E0412
//  E0249,
//  E0257,
//  E0258,
//  E0272, // on_unimplemented #0
//  E0273, // on_unimplemented #1
//  E0274, // on_unimplemented #2
//  E0278, // requirement is not satisfied
//  E0279,
//  E0280, // changed to ICE
//  E0285, // overflow evaluation builtin bounds
//  E0296, // replaced with a generic attribute input check
//  E0298, // cannot compare constants
//  E0299, // mismatched types between arms
//  E0300, // unexpanded macro
//  E0304, // expected signed integer constant
//  E0305, // expected constant
//  E0313, // removed: found unreachable
//  E0314, // closure outlives stack frame
//  E0315, // cannot invoke closure outside of its lifetime
//  E0319, // trait impls for defaulted traits allowed just for structs/enums
//  E0372, // coherence not dyn-compatible
//  E0385, // {} in an aliasable location
//  E0402, // cannot use an outer type parameter in this context
//  E0406, // merged into 420
//  E0410, // merged into 408
//  E0413, // merged into 530
//  E0414, // merged into 530
//  E0417, // merged into 532
//  E0418, // merged into 532
//  E0419, // merged into 531
//  E0420, // merged into 532
//  E0421, // merged into 531
//  E0427, // merged into 530
//  E0445, // merged into 446 and type privacy lints
//  E0456, // plugin `..` is not available for triple `..`
//  E0465, // removed: merged with E0464
//  E0467, // removed
//  E0470, // removed
//  E0471, // constant evaluation error (in pattern)
//  E0473, // dereference of reference outside its lifetime
//  E0474, // captured variable `..` does not outlive the enclosing closure
//  E0475, // index of slice outside its lifetime
//  E0479, // the type `..` (provided as the value of a type parameter) is...
//  E0480, // lifetime of method receiver does not outlive the method call
//  E0481, // lifetime of function argument does not outlive the function call
//  E0483, // lifetime of operand does not outlive the operation
//  E0484, // reference is not valid at the time of borrow
//  E0485, // automatically reference is not valid at the time of borrow
//  E0486, // type of expression contains references that are not valid during..
//  E0487, // unsafe use of destructor: destructor might be called while...
//  E0488, // lifetime of variable does not enclose its declaration
//  E0489, // type/lifetime parameter not in scope here
//  E0490, // removed: unreachable
//  E0526, // shuffle indices are not constant
//  E0540, // multiple rustc_deprecated attributes
//  E0548, // replaced with a generic attribute input check
//  E0553, // multiple rustc_const_unstable attributes
//  E0555, // replaced with a generic attribute input check
//  E0558, // replaced with a generic attribute input check
//  E0563, // cannot determine a type for this `impl Trait` removed in 6383de15
//  E0564, // only named lifetimes are allowed in `impl Trait`,
//         // but `{}` was found in the type `{}`
//  E0598, // lifetime of {} is too short to guarantee its contents can be...
//  E0611, // merged into E0616
//  E0612, // merged into E0609
//  E0613, // Removed (merged with E0609)
//  E0629, // missing 'feature' (rustc_const_unstable)
//  E0630, // rustc_const_unstable attribute must be paired with stable/unstable
//         // attribute
//  E0645, // trait aliases not finished
//  E0694, // an unknown tool name found in scoped attributes
//  E0702, // replaced with a generic attribute input check
//  E0707, // multiple elided lifetimes used in arguments of `async fn`
//  E0709, // multiple different lifetimes used in arguments of `async fn`
//  E0721, // `await` keyword
//  E0722, // replaced with a generic attribute input check
//  E0723, // unstable feature in `const` context
//  E0738, // Removed; errored on `#[track_caller] fn`s in `extern "Rust" { ... }`.
//  E0744, // merged into E0728
//  E0776, // Removed; `#[cmse_nonsecure_entry]` is now `extern "cmse-nonsecure-entry"`
//  E0796, // unused error code. We use `static_mut_refs` lint instead.
