about summary refs log tree commit diff
path: root/src/librustc/middle/astencode.rs
diff options
context:
space:
mode:
authorMichael Kainer <kaini1123@gmail.com>2014-09-29 18:27:07 +0200
committerMichael Kainer <kaini1123@gmail.com>2014-09-30 16:22:55 +0200
commit065a5b0424221b246d59fd068d4e6eb5d1ae5be1 (patch)
tree7b81f6081330ea2719bf66ba7582d2ea79ec595e /src/librustc/middle/astencode.rs
parentd2f8d4c5050be01923f28308b71ad14a2776b30e (diff)
downloadrust-065a5b0424221b246d59fd068d4e6eb5d1ae5be1.tar.gz
rust-065a5b0424221b246d59fd068d4e6eb5d1ae5be1.zip
Fixes ICE when using reexported unit-like structs
Fixes that unit-like structs cannot be used if they are reexported and
used in another crate. The compiler fails with an ICE, because unit-like
structs are exported as DefFn and the expression `UnitStruct` is
interpreted as function pointer instead of a call to the constructor.

To resolve this ambiguity tuple-like struct constructors are now exported
as CtorFn. When `rustc::metadata::decoder` finds a CtorFn it sets a new
flag `is_ctor` in DefFn to true.

Relevant changes are in `rustc::metadata::{encoder, decoder}` and in
`rustc::middle::ty`.

Closes #12660 and #16973.
Diffstat (limited to 'src/librustc/middle/astencode.rs')
-rw-r--r--src/librustc/middle/astencode.rs2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/librustc/middle/astencode.rs b/src/librustc/middle/astencode.rs
index f40d6d47281..2bd145706aa 100644
--- a/src/librustc/middle/astencode.rs
+++ b/src/librustc/middle/astencode.rs
@@ -440,7 +440,7 @@ fn decode_def(dcx: &DecodeContext, doc: rbml::Doc) -> def::Def {
 impl tr for def::Def {
     fn tr(&self, dcx: &DecodeContext) -> def::Def {
         match *self {
-          def::DefFn(did, p) => def::DefFn(did.tr(dcx), p),
+          def::DefFn(did, p, is_ctor) => def::DefFn(did.tr(dcx), p, is_ctor),
           def::DefStaticMethod(did, wrapped_did2, p) => {
             def::DefStaticMethod(did.tr(dcx),
                                    match wrapped_did2 {