diff options
| author | bors <bors@rust-lang.org> | 2019-09-29 06:08:50 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2019-09-29 06:08:50 +0000 |
| commit | fe2f7e0e5350a431e00e72cfd00df2669f94fe06 (patch) | |
| tree | 612c17e3a2c2f7815be281b5be840aec1a50353a /src/libsyntax | |
| parent | 0bbab7d99dde8620604fb265706dc8bff20345a7 (diff) | |
| parent | 0d4afa164bd1146eeba957dfe5a784624038bc3a (diff) | |
| download | rust-fe2f7e0e5350a431e00e72cfd00df2669f94fe06.tar.gz rust-fe2f7e0e5350a431e00e72cfd00df2669f94fe06.zip | |
Auto merge of #64886 - Centril:rollup-30dqh8j, r=Centril
Rollup of 5 pull requests Successful merges: - #63492 (Remove redundancy from the implementation of C variadics.) - #64589 (Differentiate AArch64 bare-metal targets between hf and non-hf.) - #64799 (Fix double panic when printing query stack during an ICE) - #64824 (No StableHasherResult everywhere) - #64884 (Add pkg-config to dependency list if building for Linux on Linux) Failed merges: r? @ghost
Diffstat (limited to 'src/libsyntax')
| -rw-r--r-- | src/libsyntax/ast.rs | 7 | ||||
| -rw-r--r-- | src/libsyntax/ext/build.rs | 1 | ||||
| -rw-r--r-- | src/libsyntax/feature_gate/check.rs | 11 | ||||
| -rw-r--r-- | src/libsyntax/mut_visit.rs | 2 | ||||
| -rw-r--r-- | src/libsyntax/parse/parser.rs | 7 | ||||
| -rw-r--r-- | src/libsyntax/parse/parser/expr.rs | 1 | ||||
| -rw-r--r-- | src/libsyntax/parse/parser/item.rs | 3 | ||||
| -rw-r--r-- | src/libsyntax/parse/parser/ty.rs | 3 | ||||
| -rw-r--r-- | src/libsyntax/print/pprust/tests.rs | 1 | ||||
| -rw-r--r-- | src/libsyntax/ptr.rs | 7 |
10 files changed, 23 insertions, 20 deletions
diff --git a/src/libsyntax/ast.rs b/src/libsyntax/ast.rs index a7f035dc9ec..bc468c1ad0e 100644 --- a/src/libsyntax/ast.rs +++ b/src/libsyntax/ast.rs @@ -1893,7 +1893,6 @@ impl Param { pub struct FnDecl { pub inputs: Vec<Param>, pub output: FunctionRetTy, - pub c_variadic: bool, } impl FnDecl { @@ -1903,6 +1902,12 @@ impl FnDecl { pub fn has_self(&self) -> bool { self.inputs.get(0).map(Param::is_self).unwrap_or(false) } + pub fn c_variadic(&self) -> bool { + self.inputs.last().map(|arg| match arg.ty.kind { + TyKind::CVarArgs => true, + _ => false, + }).unwrap_or(false) + } } /// Is the trait definition an auto trait? diff --git a/src/libsyntax/ext/build.rs b/src/libsyntax/ext/build.rs index 6b93d045588..8c5289671c9 100644 --- a/src/libsyntax/ext/build.rs +++ b/src/libsyntax/ext/build.rs @@ -562,7 +562,6 @@ impl<'a> ExtCtxt<'a> { P(ast::FnDecl { inputs, output, - c_variadic: false }) } diff --git a/src/libsyntax/feature_gate/check.rs b/src/libsyntax/feature_gate/check.rs index 622b48ab928..d7fc74955bb 100644 --- a/src/libsyntax/feature_gate/check.rs +++ b/src/libsyntax/feature_gate/check.rs @@ -531,7 +531,7 @@ impl<'a> Visitor<'a> for PostExpansionVisitor<'a> { self.check_abi(header.abi, span); } - if fn_decl.c_variadic { + if fn_decl.c_variadic() { gate_feature_post!(&self, c_variadic, span, "C-variadic functions are unstable"); } @@ -564,7 +564,7 @@ impl<'a> Visitor<'a> for PostExpansionVisitor<'a> { if block.is_none() { self.check_abi(sig.header.abi, ti.span); } - if sig.decl.c_variadic { + if sig.decl.c_variadic() { gate_feature_post!(&self, c_variadic, ti.span, "C-variadic functions are unstable"); } @@ -601,7 +601,12 @@ impl<'a> Visitor<'a> for PostExpansionVisitor<'a> { } match ii.kind { - ast::ImplItemKind::Method(..) => {} + ast::ImplItemKind::Method(ref sig, _) => { + if sig.decl.c_variadic() { + gate_feature_post!(&self, c_variadic, ii.span, + "C-variadic functions are unstable"); + } + } ast::ImplItemKind::OpaqueTy(..) => { gate_feature_post!( &self, diff --git a/src/libsyntax/mut_visit.rs b/src/libsyntax/mut_visit.rs index 43b5df38e14..80dfe9e5be0 100644 --- a/src/libsyntax/mut_visit.rs +++ b/src/libsyntax/mut_visit.rs @@ -717,7 +717,7 @@ pub fn noop_visit_asyncness<T: MutVisitor>(asyncness: &mut IsAsync, vis: &mut T) } pub fn noop_visit_fn_decl<T: MutVisitor>(decl: &mut P<FnDecl>, vis: &mut T) { - let FnDecl { inputs, output, c_variadic: _ } = decl.deref_mut(); + let FnDecl { inputs, output } = decl.deref_mut(); inputs.flat_map_in_place(|param| vis.flat_map_param(param)); match output { FunctionRetTy::Default(span) => vis.visit_span(span), diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index cc582819b6b..f22fd5ad703 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -1194,7 +1194,7 @@ impl<'a> Parser<'a> { } fn parse_fn_params(&mut self, named_params: bool, allow_c_variadic: bool) - -> PResult<'a, (Vec<Param> , bool)> { + -> PResult<'a, Vec<Param>> { let sp = self.token.span; let mut c_variadic = false; let (params, _): (Vec<Option<Param>>, _) = self.parse_paren_comma_seq(|p| { @@ -1218,6 +1218,8 @@ impl<'a> Parser<'a> { let span = p.token.span; p.span_err(span, "`...` must be the last argument of a C-variadic function"); + // FIXME(eddyb) this should probably still push `CVarArgs`. + // Maybe AST validation/HIR lowering should emit the above error? Ok(None) } else { Ok(Some(param)) @@ -1245,7 +1247,7 @@ impl<'a> Parser<'a> { "C-variadic function must be declared with at least one named argument"); } - Ok((params, c_variadic)) + Ok(params) } /// Returns the parsed optional self parameter and whether a self shortcut was used. @@ -1414,7 +1416,6 @@ impl<'a> Parser<'a> { Ok(P(FnDecl { inputs: fn_inputs, output: self.parse_ret_ty(true)?, - c_variadic: false })) } diff --git a/src/libsyntax/parse/parser/expr.rs b/src/libsyntax/parse/parser/expr.rs index c776704b285..23674ad589d 100644 --- a/src/libsyntax/parse/parser/expr.rs +++ b/src/libsyntax/parse/parser/expr.rs @@ -1176,7 +1176,6 @@ impl<'a> Parser<'a> { Ok(P(FnDecl { inputs: inputs_captures, output, - c_variadic: false })) } diff --git a/src/libsyntax/parse/parser/item.rs b/src/libsyntax/parse/parser/item.rs index 370030d02c7..92b19b73e57 100644 --- a/src/libsyntax/parse/parser/item.rs +++ b/src/libsyntax/parse/parser/item.rs @@ -1292,13 +1292,12 @@ impl<'a> Parser<'a> { /// Parses the argument list and result type of a function declaration. fn parse_fn_decl(&mut self, allow_c_variadic: bool) -> PResult<'a, P<FnDecl>> { - let (args, c_variadic) = self.parse_fn_params(true, allow_c_variadic)?; + let args = self.parse_fn_params(true, allow_c_variadic)?; let ret_ty = self.parse_ret_ty(true)?; Ok(P(FnDecl { inputs: args, output: ret_ty, - c_variadic, })) } diff --git a/src/libsyntax/parse/parser/ty.rs b/src/libsyntax/parse/parser/ty.rs index b4c006ca2b1..c52d3733b5e 100644 --- a/src/libsyntax/parse/parser/ty.rs +++ b/src/libsyntax/parse/parser/ty.rs @@ -292,12 +292,11 @@ impl<'a> Parser<'a> { }; self.expect_keyword(kw::Fn)?; - let (inputs, c_variadic) = self.parse_fn_params(false, true)?; + let inputs = self.parse_fn_params(false, true)?; let ret_ty = self.parse_ret_ty(false)?; let decl = P(FnDecl { inputs, output: ret_ty, - c_variadic, }); Ok(TyKind::BareFn(P(BareFnTy { abi, diff --git a/src/libsyntax/print/pprust/tests.rs b/src/libsyntax/print/pprust/tests.rs index 05d78cdd87e..faa70edbfa2 100644 --- a/src/libsyntax/print/pprust/tests.rs +++ b/src/libsyntax/print/pprust/tests.rs @@ -29,7 +29,6 @@ fn test_fun_to_string() { let decl = ast::FnDecl { inputs: Vec::new(), output: ast::FunctionRetTy::Default(syntax_pos::DUMMY_SP), - c_variadic: false }; let generics = ast::Generics::default(); assert_eq!( diff --git a/src/libsyntax/ptr.rs b/src/libsyntax/ptr.rs index b5eb8ca94c0..7300ce24954 100644 --- a/src/libsyntax/ptr.rs +++ b/src/libsyntax/ptr.rs @@ -33,8 +33,7 @@ use std::{slice, vec}; use rustc_serialize::{Encodable, Decodable, Encoder, Decoder}; -use rustc_data_structures::stable_hasher::{StableHasher, StableHasherResult, - HashStable}; +use rustc_data_structures::stable_hasher::{StableHasher, HashStable}; /// An owned smart pointer. #[derive(Hash, PartialEq, Eq)] pub struct P<T: ?Sized> { @@ -218,9 +217,7 @@ impl<T: Decodable> Decodable for P<[T]> { impl<CTX, T> HashStable<CTX> for P<T> where T: ?Sized + HashStable<CTX> { - fn hash_stable<W: StableHasherResult>(&self, - hcx: &mut CTX, - hasher: &mut StableHasher<W>) { + fn hash_stable(&self, hcx: &mut CTX, hasher: &mut StableHasher) { (**self).hash_stable(hcx, hasher); } } |
