summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Hodge <tpg@mutabah.net>2016-12-31 13:13:38 +0800
committerJohn Hodge <tpg@mutabah.net>2016-12-31 13:13:38 +0800
commit58d7abdfed79c85e6bfa274542b6674a1b78e6e7 (patch)
treecaf347a89e72555280b6a3c500bf623cbe1acfac
parent4096af147b55282863a57badf8f62a633f3901c6 (diff)
downloadmrust-58d7abdfed79c85e6bfa274542b6674a1b78e6e7.tar.gz
Expand Derive - Hack around getting a trait object to a [T]
-rw-r--r--src/expand/derive.cpp8
-rw-r--r--src/mir/cleanup.cpp2
2 files changed, 6 insertions, 4 deletions
diff --git a/src/expand/derive.cpp b/src/expand/derive.cpp
index 46457784..972ee442 100644
--- a/src/expand/derive.cpp
+++ b/src/expand/derive.cpp
@@ -311,12 +311,12 @@ public:
mv$(node), AST::PathNode("field",{}),
vec$(
NEWNODE(String, fld.m_name),
- NEWNODE(UniOp, AST::ExprNode_UniOp::REF,
+ NEWNODE(UniOp, AST::ExprNode_UniOp::REF, NEWNODE(UniOp, AST::ExprNode_UniOp::REF,
NEWNODE(Field,
NEWNODE(NamedValue, AST::Path("self")),
fld.m_name
)
- )
+ ))
)
);
}
@@ -333,12 +333,12 @@ public:
node = NEWNODE(CallMethod,
mv$(node), AST::PathNode("field",{}),
vec$(
- NEWNODE(UniOp, AST::ExprNode_UniOp::REF,
+ NEWNODE(UniOp, AST::ExprNode_UniOp::REF, NEWNODE(UniOp, AST::ExprNode_UniOp::REF,
NEWNODE(Field,
NEWNODE(NamedValue, AST::Path("self")),
FMT(idx)
)
- )
+ ))
)
);
}
diff --git a/src/mir/cleanup.cpp b/src/mir/cleanup.cpp
index 5c15c1a0..8a5ee1dc 100644
--- a/src/mir/cleanup.cpp
+++ b/src/mir/cleanup.cpp
@@ -603,6 +603,8 @@ bool MIR_Cleanup_Unsize_GetMetadata(const ::MIR::TypeResolve& state, MirMutator&
}
else
{
+ MIR_ASSERT(state, state.m_resolve.type_is_sized(state.sp, src_ty), "Attempting to get vtable for unsized type - " << src_ty);
+
::HIR::Path vtable { src_ty.clone(), trait_path.m_path.clone(), "#vtable" };
out_meta_val = ::MIR::RValue( ::MIR::Constant::make_ItemAddr(mv$(vtable)) );
}