aboutsummaryrefslogtreecommitdiff
path: root/src/ir_print.cpp
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2019-08-09 22:35:48 +0100
committergingerBill <bill@gingerbill.org>2019-08-09 22:35:48 +0100
commit27a3c5449ad8b09e54c70a494170fed8157eb6c3 (patch)
tree526f721cf7607fa7511e2184e1614c283e9e8f11 /src/ir_print.cpp
parent9c632128245e9a51bb63273d0d4531ba28773629 (diff)
Fix global variable initialization for certain types.
Diffstat (limited to 'src/ir_print.cpp')
-rw-r--r--src/ir_print.cpp18
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"));