diff options
| author | gingerBill <bill@gingerbill.org> | 2019-08-09 22:35:48 +0100 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2019-08-09 22:35:48 +0100 |
| commit | 27a3c5449ad8b09e54c70a494170fed8157eb6c3 (patch) | |
| tree | 526f721cf7607fa7511e2184e1614c283e9e8f11 /src/ir_print.cpp | |
| parent | 9c632128245e9a51bb63273d0d4531ba28773629 (diff) | |
Fix global variable initialization for certain types.
Diffstat (limited to 'src/ir_print.cpp')
| -rw-r--r-- | src/ir_print.cpp | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/src/ir_print.cpp b/src/ir_print.cpp index 58e7b8b0d..684ae81cd 100644 --- a/src/ir_print.cpp +++ b/src/ir_print.cpp @@ -2195,6 +2195,22 @@ void ir_print_type_name(irFileBuffer *f, irModule *m, irValue *v) { ir_write_byte(f, '\n'); } +bool ir_print_global_type_allowed(Type *t) { + if (t == nullptr) { + return true; + } + t = core_type(t); + switch (t->kind) { + case Type_DynamicArray: + case Type_Map: + case Type_Union: + case Type_BitField: + return false; + } + + return true; +} + void print_llvm_ir(irGen *ir) { irModule *m = &ir->module; @@ -2358,7 +2374,7 @@ void print_llvm_ir(irGen *ir) { ir_print_type(f, m, g->entity->type); ir_write_byte(f, ' '); if (!g->is_foreign) { - if (g->value != nullptr) { + if (g->value != nullptr && ir_print_global_type_allowed(g->entity->type)) { ir_print_value(f, m, g->value, g->entity->type); } else { ir_write_string(f, str_lit("zeroinitializer")); |