rust/src/test/run-pass/enum-size-variance.rs
Corey Richardson c327080ee0 rustc: add a lint for large enum variants
It can be easy to accidentally bloat the size of an enum by making one variant
larger than the others. When this happens, it usually goes unnoticed. This
commit adds a lint that can warn when the largest variant in an enum is more
than 3 times larger than the second-largest variant. This requires a little
bit of rejiggering, because size information is only available in trans, but
lint levels are only available in the lint context.

It is allow by default because it's pretty noisy, and isn't really *that*
undesirable.

Closes #10362
2014-05-22 23:01:47 -07:00

43 lines
928 B
Rust

// Copyright 2014 The Rust Project Developers. See the COPYRIGHT
// file at the top-level directory of this distribution and at
// http://rust-lang.org/COPYRIGHT.
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.
//
// ignore-pretty
#![deny(enum_size_variance)]
#![allow(dead_code)]
enum Enum1 { }
enum Enum2 { A, B, C }
enum Enum3 { D(int), E, F }
enum Enum4 { H(int), I(int), J }
enum Enum5 { //~ ERROR three times larger
L(int, int, int, int), //~ NOTE this variant is the largest
M(int),
N
}
enum Enum6<T, U> {
O(T),
P(U),
Q(int)
}
#[allow(enum_size_variance)]
enum Enum7 {
R(int, int, int, int),
S(int),
T
}
pub fn main() { }