Merge pull request #3264 from joelgallant/extern-type-complexity
Fixes #3222 by checking the BareFnTy Abi type
This commit is contained in:
commit
78abcab808
|
@ -16,6 +16,7 @@ use std::borrow::Cow;
|
||||||
use crate::syntax::ast::{FloatTy, IntTy, UintTy};
|
use crate::syntax::ast::{FloatTy, IntTy, UintTy};
|
||||||
use crate::syntax::source_map::Span;
|
use crate::syntax::source_map::Span;
|
||||||
use crate::syntax::errors::DiagnosticBuilder;
|
use crate::syntax::errors::DiagnosticBuilder;
|
||||||
|
use crate::rustc_target::spec::abi::Abi;
|
||||||
use crate::utils::{comparisons, differing_macro_contexts, higher, in_constant, in_macro, last_path_segment, match_def_path, match_path,
|
use crate::utils::{comparisons, differing_macro_contexts, higher, in_constant, in_macro, last_path_segment, match_def_path, match_path,
|
||||||
match_type, multispan_sugg, opt_def_id, same_tys, snippet, snippet_opt, span_help_and_lint, span_lint,
|
match_type, multispan_sugg, opt_def_id, same_tys, snippet, snippet_opt, span_help_and_lint, span_lint,
|
||||||
span_lint_and_sugg, span_lint_and_then, clip, unsext, sext, int_bits};
|
span_lint_and_sugg, span_lint_and_then, clip, unsext, sext, int_bits};
|
||||||
|
@ -1224,7 +1225,7 @@ impl<'tcx> Visitor<'tcx> for TypeComplexityVisitor {
|
||||||
TyKind::Path(..) | TyKind::Slice(..) | TyKind::Tup(..) | TyKind::Array(..) => (10 * self.nest, 1),
|
TyKind::Path(..) | TyKind::Slice(..) | TyKind::Tup(..) | TyKind::Array(..) => (10 * self.nest, 1),
|
||||||
|
|
||||||
// function types bring a lot of overhead
|
// function types bring a lot of overhead
|
||||||
TyKind::BareFn(..) => (50 * self.nest, 1),
|
TyKind::BareFn(ref bare) if bare.abi == Abi::Rust => (50 * self.nest, 1),
|
||||||
|
|
||||||
TyKind::TraitObject(ref param_bounds, _) => {
|
TyKind::TraitObject(ref param_bounds, _) => {
|
||||||
let has_lifetime_parameters = param_bounds
|
let has_lifetime_parameters = param_bounds
|
||||||
|
|
|
@ -40,5 +40,22 @@ fn test3() {
|
||||||
let _y: Vec<Vec<Box<(u32, u32, u32, u32)>>> = vec![];
|
let _y: Vec<Vec<Box<(u32, u32, u32, u32)>>> = vec![];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[repr(C)]
|
||||||
|
struct D {
|
||||||
|
// should not warn, since we don't have control over the signature (#3222)
|
||||||
|
test4: extern "C" fn(
|
||||||
|
itself: &D,
|
||||||
|
a: usize,
|
||||||
|
b: usize,
|
||||||
|
c: usize,
|
||||||
|
d: usize,
|
||||||
|
e: usize,
|
||||||
|
f: usize,
|
||||||
|
g: usize,
|
||||||
|
h: usize,
|
||||||
|
i: usize,
|
||||||
|
),
|
||||||
|
}
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue