authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2017-08-06 18:15:11-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2017-08-06 18:15:11-04:00
logd83e4092bfee7bfdb59d1522289aa0bc7df407e4
treebbfd8e765bbd7130c22245095f18d8a4f8414951
parenta0a57beed53a08346a3b6e0d739ee221f151ceca

fix constant debug info when number literal is 0


2 files changed, 18 insertions(+), 19 deletions(-)

src/analyze.cpp+15-19
...@@ -813,8 +813,19 @@ static const char *calling_convention_name(CallingConvention cc) {...@@ -813,8 +813,19 @@ static const char *calling_convention_name(CallingConvention cc) {
813 case CallingConventionCold: return "coldcc";813 case CallingConventionCold: return "coldcc";
814 case CallingConventionNaked: return "nakedcc";814 case CallingConventionNaked: return "nakedcc";
815 case CallingConventionStdcall: return "stdcallcc";815 case CallingConventionStdcall: return "stdcallcc";
816 default: zig_unreachable();
817 }816 }
817 zig_unreachable();
818}
819
820static const char *calling_convention_fn_type_str(CallingConvention cc) {
821 switch (cc) {
822 case CallingConventionUnspecified: return "";
823 case CallingConventionC: return "extern ";
824 case CallingConventionCold: return "coldcc ";
825 case CallingConventionNaked: return "nakedcc ";
826 case CallingConventionStdcall: return "stdcallcc ";
827 }
828 zig_unreachable();
818}829}
819830
820TypeTableEntry *get_fn_type(CodeGen *g, FnTypeId *fn_type_id) {831TypeTableEntry *get_fn_type(CodeGen *g, FnTypeId *fn_type_id) {
...@@ -832,24 +843,7 @@ TypeTableEntry *get_fn_type(CodeGen *g, FnTypeId *fn_type_id) {...@@ -832,24 +843,7 @@ TypeTableEntry *get_fn_type(CodeGen *g, FnTypeId *fn_type_id) {
832843
833 // populate the name of the type844 // populate the name of the type
834 buf_resize(&fn_type->name, 0);845 buf_resize(&fn_type->name, 0);
835 const char *cc_str;846 const char *cc_str = calling_convention_fn_type_str(fn_type->data.fn.fn_type_id.cc);
836 switch (fn_type->data.fn.fn_type_id.cc) {
837 case CallingConventionUnspecified:
838 cc_str = "";
839 break;
840 case CallingConventionC:
841 cc_str = "extern ";
842 break;
843 case CallingConventionCold:
844 cc_str = "coldcc ";
845 break;
846 case CallingConventionNaked:
847 cc_str = "nakedcc ";
848 break;
849 case CallingConventionStdcall:
850 cc_str = "stdcallcc ";
851 break;
852 }
853 buf_appendf(&fn_type->name, "%sfn(", cc_str);847 buf_appendf(&fn_type->name, "%sfn(", cc_str);
854 for (size_t i = 0; i < fn_type_id->param_count; i += 1) {848 for (size_t i = 0; i < fn_type_id->param_count; i += 1) {
855 FnTypeParamInfo *param_info = &fn_type_id->param_info[i];849 FnTypeParamInfo *param_info = &fn_type_id->param_info[i];
...@@ -4145,6 +4139,8 @@ void render_const_value(CodeGen *g, Buf *buf, ConstExprValue *const_val) {...@@ -4145,6 +4139,8 @@ void render_const_value(CodeGen *g, Buf *buf, ConstExprValue *const_val) {
4145}4139}
41464140
4147TypeTableEntry *make_int_type(CodeGen *g, bool is_signed, uint32_t size_in_bits) {4141TypeTableEntry *make_int_type(CodeGen *g, bool is_signed, uint32_t size_in_bits) {
4142 assert(size_in_bits > 0);
4143
4148 TypeTableEntry *entry = new_type_table_entry(TypeTableEntryIdInt);4144 TypeTableEntry *entry = new_type_table_entry(TypeTableEntryIdInt);
4149 entry->is_copyable = true;4145 entry->is_copyable = true;
4150 entry->type_ref = LLVMIntType(size_in_bits);4146 entry->type_ref = LLVMIntType(size_in_bits);
src/codegen.cpp+3
...@@ -3891,6 +3891,9 @@ static void do_code_gen(CodeGen *g) {...@@ -3891,6 +3891,9 @@ static void do_code_gen(CodeGen *g) {
3891 ConstExprValue *const_val = var->value;3891 ConstExprValue *const_val = var->value;
3892 assert(const_val->special != ConstValSpecialRuntime);3892 assert(const_val->special != ConstValSpecialRuntime);
3893 size_t bits_needed = bigint_bits_needed(&const_val->data.x_bigint);3893 size_t bits_needed = bigint_bits_needed(&const_val->data.x_bigint);
3894 if (bits_needed < 8) {
3895 bits_needed = 8;
3896 }
3894 TypeTableEntry *var_type = get_int_type(g, const_val->data.x_bigint.is_negative, bits_needed);3897 TypeTableEntry *var_type = get_int_type(g, const_val->data.x_bigint.is_negative, bits_needed);
3895 LLVMValueRef init_val = bigint_to_llvm_const(var_type->type_ref, &const_val->data.x_bigint);3898 LLVMValueRef init_val = bigint_to_llvm_const(var_type->type_ref, &const_val->data.x_bigint);
3896 gen_global_var(g, var, init_val, var_type);3899 gen_global_var(g, var, init_val, var_type);