1
Fork 0

Auto merge of #26503 - GuillaumeGomez:patch-4, r=Manishearth

r? @Manishearth
This commit is contained in:
bors 2015-06-23 15:55:19 +00:00
commit d54ab412ef
2 changed files with 25 additions and 3 deletions

View file

@ -1551,7 +1551,7 @@ pub fn ast_ty_to_ty<'tcx>(this: &AstConv<'tcx>,
ast::TyParen(ref typ) => ast_ty_to_ty(this, rscope, &**typ),
ast::TyBareFn(ref bf) => {
if bf.decl.variadic && bf.abi != abi::C {
span_err!(tcx.sess, ast_ty.span, E0222,
span_err!(tcx.sess, ast_ty.span, E0045,
"variadic function must have C calling convention");
}
let bare_fn = ty_of_bare_fn(this, bf.unsafety, bf.abi, &*bf.decl);

View file

@ -380,6 +380,28 @@ fn main() {
```
"##,
E0045: r##"
Rust only supports variadic parameters for interoperability with C code in its
FFI. As such, variadic parameters can only be used with functions which are
using the C ABI. Examples of erroneous code:
```
extern "rust-call" { fn foo(x: u8, ...); }
// or
fn foo(x: u8, ...) {}
```
To fix such code, put them in an extern "C" block:
```
extern "C" fn foo (x: u8, ...);
// or:
extern "C" {
fn foo (x: u8, ...);
}
```
"##,
E0046: r##"
When trying to make some type implement a trait `Foo`, you must, at minimum,
provide implementations for all of `Foo`'s required methods (meaning the
@ -1467,7 +1489,6 @@ For more information see the [opt-in builtin traits RFC](https://github.com/rust
register_diagnostics! {
E0044, // foreign items may not have type parameters
E0045, // variadic function must have C calling convention
E0068,
E0071,
E0074,
@ -1535,7 +1556,8 @@ register_diagnostics! {
E0219, // associated type defined in higher-ranked supertrait
E0220, // associated type not found for type parameter
E0221, // ambiguous associated type in bounds
E0222, // variadic function must have C calling convention
//E0222, // Error code E0045 (variadic function must have C calling
// convention) duplicate
E0223, // ambiguous associated type
E0224, // at least one non-builtin train is required for an object type
E0225, // only the builtin traits can be used as closure or object bounds