aboutsummaryrefslogtreecommitdiff
path: root/src/ir.cpp
diff options
context:
space:
mode:
authorRocknest <35231115+Rocknest@users.noreply.github.com>2019-10-11 01:28:43 +0300
committerGitHub <noreply@github.com>2019-10-11 01:28:43 +0300
commit352663a34c885eb9b944929ac076806ce2f0d416 (patch)
treecb4e7c48d6ac2191d23842b3d97ffd6f82c05243 /src/ir.cpp
parent429d5f287982cf82ee4229acd44509d782304141 (diff)
parentd15a71afc95f148966be2f5fd9f66b8396e8293d (diff)
downloadzig-352663a34c885eb9b944929ac076806ce2f0d416.tar.gz
zig-352663a34c885eb9b944929ac076806ce2f0d416.zip
Merge branch 'master' into docs-local
Diffstat (limited to 'src/ir.cpp')
-rw-r--r--src/ir.cpp9
1 files changed, 4 insertions, 5 deletions
diff --git a/src/ir.cpp b/src/ir.cpp
index 0e6153ebcd..7dd141423c 100644
--- a/src/ir.cpp
+++ b/src/ir.cpp
@@ -13122,7 +13122,6 @@ static bool ir_resolve_float_mode(IrAnalyze *ira, IrInstruction *value, FloatMod
return true;
}
-
static Buf *ir_resolve_str(IrAnalyze *ira, IrInstruction *value) {
if (type_is_invalid(value->value.type))
return nullptr;
@@ -13143,11 +13142,11 @@ static Buf *ir_resolve_str(IrAnalyze *ira, IrInstruction *value) {
assert(ptr_field->data.x_ptr.special == ConstPtrSpecialBaseArray);
ConstExprValue *array_val = ptr_field->data.x_ptr.data.base_array.array_val;
- if (array_val->data.x_array.special == ConstArraySpecialBuf) {
- return array_val->data.x_array.data.s_buf;
- }
expand_undef_array(ira->codegen, array_val);
size_t len = bigint_as_usize(&len_field->data.x_bigint);
+ if (array_val->data.x_array.special == ConstArraySpecialBuf && len == buf_len(array_val->data.x_array.data.s_buf)) {
+ return array_val->data.x_array.data.s_buf;
+ }
Buf *result = buf_alloc();
buf_resize(result, len);
for (size_t i = 0; i < len; i += 1) {
@@ -17952,7 +17951,7 @@ static IrInstruction *ir_analyze_container_field_ptr(IrAnalyze *ira, Buf *field_
union_val->special = ConstValSpecialStatic;
bigint_init_bigint(&union_val->data.x_union.tag, &field->enum_field->value);
union_val->data.x_union.payload = payload_val;
- } else {
+ } else if (bare_type->data.unionation.layout != ContainerLayoutExtern) {
TypeUnionField *actual_field = find_union_field_by_tag(bare_type, &union_val->data.x_union.tag);
if (actual_field == nullptr)
zig_unreachable();