auto merge of #17653 : kaini/rust/master, r=alexcrichton
Fixes that unit-like structs cannot be used if they are re-exported and used in another crate. (ICE)
The relevant changes are in `rustc::metadata::{decoder, encoder}` and `rustc::middle::ty`.
A test case is included.
The problem is that the expressoin `UnitStruct` is an `ExprPath` to an `DefFn`, which is of expr kind `RvalueDatumExpr`, but for unit-struct ctors the expr kind should be `RvalueDpsExpr`. I fixed this (in a I guess clean way) by introducing `CtorFn` in the metadata and including a `is_ctor` flag in `DefFn`.
This commit is contained in:
commit
8ab6fce95e
19 changed files with 81 additions and 32 deletions
21
src/test/auxiliary/issue-12660-aux.rs
Normal file
21
src/test/auxiliary/issue-12660-aux.rs
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
// 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.
|
||||
|
||||
#![crate_type="lib"]
|
||||
#![crate_name="issue12660aux"]
|
||||
|
||||
pub use my_mod::{MyStruct, my_fn};
|
||||
|
||||
mod my_mod {
|
||||
pub struct MyStruct;
|
||||
|
||||
pub fn my_fn(my_struct: MyStruct) {
|
||||
}
|
||||
}
|
||||
21
src/test/run-pass/issue-12660.rs
Normal file
21
src/test/run-pass/issue-12660.rs
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
// 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.
|
||||
|
||||
// aux-build:issue-12660-aux.rs
|
||||
|
||||
extern crate issue12660aux;
|
||||
|
||||
use issue12660aux::{my_fn, MyStruct};
|
||||
|
||||
#[allow(path_statement)]
|
||||
fn main() {
|
||||
my_fn(MyStruct);
|
||||
MyStruct;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue