summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Hodge <tpg@ucc.asn.au>2018-12-22 18:40:23 +0800
committerJohn Hodge <tpg@ucc.asn.au>2018-12-22 18:40:23 +0800
commitefc95784c83cc054ed5a0f2d71ff0c66e3dfb2cf (patch)
treea86cdd38c66d3b194b42af71bc1aac970fc7d289
parentb8e2907cd4a5f9efa17718008ecdfb560ad61674 (diff)
downloadmrust-efc95784c83cc054ed5a0f2d71ff0c66e3dfb2cf.tar.gz
Codegen MMIR - Remove places where assert body needs to be evaluated (ref #97)
-rw-r--r--src/trans/codegen_mmir.cpp20
1 files changed, 12 insertions, 8 deletions
diff --git a/src/trans/codegen_mmir.cpp b/src/trans/codegen_mmir.cpp
index b2c5282a..a7d47c0e 100644
--- a/src/trans/codegen_mmir.cpp
+++ b/src/trans/codegen_mmir.cpp
@@ -18,6 +18,14 @@
namespace
{
+ size_t Target_GetSizeOf_Required(const Span& sp, const StaticTraitResolve& resolve, const ::HIR::TypeRef& ty)
+ {
+ size_t size;
+ bool type_has_size = Target_GetSizeOf(sp, resolve, ty, size);
+ ASSERT_BUG(sp, type_has_size, "Attempting to get the size of a unsized type");
+ return size;
+ }
+
template<typename T>
struct Fmt
{
@@ -779,8 +787,7 @@ namespace
cur_ofs ++;
}
emit_literal_as_bytes(le[i], repr->fields[i].ty, out_relocations, base_ofs + cur_ofs);
- size_t size;
- assert(Target_GetSizeOf(sp, m_resolve, repr->fields[i].ty, size));
+ size_t size = Target_GetSizeOf_Required(sp, m_resolve, repr->fields[i].ty);
cur_ofs += size;
}
while(cur_ofs < repr->size)
@@ -803,8 +810,7 @@ namespace
emit_literal_as_bytes(*le.val, repr->fields[le.idx].ty, out_relocations, base_ofs + cur_ofs);
- size_t size;
- assert(Target_GetSizeOf(sp, m_resolve, repr->fields[le.idx].ty, size));
+ size_t size = Target_GetSizeOf(sp, m_resolve, repr->fields[le.idx].ty);
cur_ofs += size;
}
@@ -819,8 +825,7 @@ namespace
auto v = ::HIR::Literal::make_Integer(le.idx);
emit_literal_as_bytes(v, repr->fields[ve->field.index].ty, out_relocations, base_ofs + cur_ofs);
- size_t size;
- assert(Target_GetSizeOf(sp, m_resolve, repr->fields[ve->field.index].ty, size));
+ size_t size = Target_GetSizeOf_Required(sp, m_resolve, repr->fields[ve->field.index].ty)
cur_ofs += size;
}
// TODO: Nonzero?
@@ -888,8 +893,7 @@ namespace
for(const auto& v : lit.as_List())
{
emit_literal_as_bytes(v, *te.inner, out_relocations, base_ofs);
- size_t size;
- assert(Target_GetSizeOf(sp, m_resolve, *te.inner, size));
+ size_t size = Target_GetSizeOf(sp, m_resolve, *te.inner, size);
base_ofs += size;
}
} break;