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) {
813813 case CallingConventionCold: return "coldcc";
814814 case CallingConventionNaked: return "nakedcc";
815815 case CallingConventionStdcall: return "stdcallcc";
816 default: zig_unreachable();
817816 }
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();
818829}
819830
820831TypeTableEntry *get_fn_type(CodeGen *g, FnTypeId *fn_type_id) {
......@@ -832,24 +843,7 @@ TypeTableEntry *get_fn_type(CodeGen *g, FnTypeId *fn_type_id) {
832843
833844 // populate the name of the type
834845 buf_resize(&fn_type->name, 0);
835 const char *cc_str;
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 }
846 const char *cc_str = calling_convention_fn_type_str(fn_type->data.fn.fn_type_id.cc);
853847 buf_appendf(&fn_type->name, "%sfn(", cc_str);
854848 for (size_t i = 0; i < fn_type_id->param_count; i += 1) {
855849 FnTypeParamInfo *param_info = &fn_type_id->param_info[i];
......@@ -4145,6 +4139,8 @@ void render_const_value(CodeGen *g, Buf *buf, ConstExprValue *const_val) {
41454139}
41464140
41474141TypeTableEntry *make_int_type(CodeGen *g, bool is_signed, uint32_t size_in_bits) {
4142 assert(size_in_bits > 0);
4143
41484144 TypeTableEntry *entry = new_type_table_entry(TypeTableEntryIdInt);
41494145 entry->is_copyable = true;
41504146 entry->type_ref = LLVMIntType(size_in_bits);
src/codegen.cpp+3
......@@ -3891,6 +3891,9 @@ static void do_code_gen(CodeGen *g) {
38913891 ConstExprValue *const_val = var->value;
38923892 assert(const_val->special != ConstValSpecialRuntime);
38933893 size_t bits_needed = bigint_bits_needed(&const_val->data.x_bigint);
3894 if (bits_needed < 8) {
3895 bits_needed = 8;
3896 }
38943897 TypeTableEntry *var_type = get_int_type(g, const_val->data.x_bigint.is_negative, bits_needed);
38953898 LLVMValueRef init_val = bigint_to_llvm_const(var_type->type_ref, &const_val->data.x_bigint);
38963899 gen_global_var(g, var, init_val, var_type);