Skip to content

Commit

Permalink
Fix most MSVC compilation warnings
Browse files Browse the repository at this point in the history
  • Loading branch information
dstogov committed Feb 27, 2023
1 parent 81d8744 commit 9b34731
Show file tree
Hide file tree
Showing 12 changed files with 100 additions and 73 deletions.
2 changes: 1 addition & 1 deletion gen_ir_fold_hash.c
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ int find_hash(uint32_t *mask, uint32_t count)

static int find_op(const char *s, size_t len)
{
return ir_strtab_find(&strtab, s, len) - 1;
return ir_strtab_find(&strtab, s, (uint8_t)len) - 1;
}

static int parse_rule(const char *buf)
Expand Down
21 changes: 13 additions & 8 deletions ir.c
Original file line number Diff line number Diff line change
Expand Up @@ -70,10 +70,10 @@ const char *ir_op_name[IR_LAST_OP] = {
void ir_print_const(ir_ctx *ctx, ir_insn *insn, FILE *f)
{
if (insn->op == IR_FUNC) {
fprintf(f, "%s", ir_get_str(ctx, insn->val.addr));
fprintf(f, "%s", ir_get_str(ctx, insn->val.i32));
return;
} else if (insn->op == IR_STR) {
fprintf(f, "\"%s\"", ir_get_str(ctx, insn->val.addr));
fprintf(f, "\"%s\"", ir_get_str(ctx, insn->val.i32));
return;
}
IR_ASSERT(IR_IS_CONST_OP(insn->op) || insn->op == IR_FUNC_ADDR);
Expand Down Expand Up @@ -611,18 +611,23 @@ ir_ref ir_const_str(ir_ctx *ctx, ir_ref str)

ir_ref ir_str(ir_ctx *ctx, const char *s)
{
size_t len;

if (!ctx->strtab.data) {
ir_strtab_init(&ctx->strtab, 64, 4096);
}
return ir_strtab_lookup(&ctx->strtab, s, strlen(s), ir_strtab_count(&ctx->strtab) + 1);
len = strlen(s);
IR_ASSERT(len <= 0xffffffff);
return ir_strtab_lookup(&ctx->strtab, s, (uint32_t)len, ir_strtab_count(&ctx->strtab) + 1);
}

ir_ref ir_strl(ir_ctx *ctx, const char *s, size_t len)
{
if (!ctx->strtab.data) {
ir_strtab_init(&ctx->strtab, 64, 4096);
}
return ir_strtab_lookup(&ctx->strtab, s, len, ir_strtab_count(&ctx->strtab) + 1);
IR_ASSERT(len <= 0xffffffff);
return ir_strtab_lookup(&ctx->strtab, s, (uint32_t)len, ir_strtab_count(&ctx->strtab) + 1);
}

const char *ir_get_str(ir_ctx *ctx, ir_ref idx)
Expand Down Expand Up @@ -1346,16 +1351,16 @@ static ir_alias ir_check_partial_aliasing(ir_ctx *ctx, ir_ref addr1, ir_ref addr
insn2 = &ctx->ir_base[addr2];
if (insn1->op == IR_ADD && IR_IS_CONST_REF(insn1->op2)) {
if (insn1->op1 == addr2) {
uintptr_t offset1 = ctx->ir_base[insn1->op2].val.u64;
uintptr_t offset1 = ctx->ir_base[insn1->op2].val.addr;
uintptr_t size2 = ir_type_size[type2];

return (offset1 < size2) ? IR_MUST_ALIAS : IR_NO_ALIAS;
} else if (insn2->op == IR_ADD && IR_IS_CONST_REF(insn1->op2) && insn1->op1 == insn2->op1) {
if (insn1->op2 == insn2->op2) {
return IR_MUST_ALIAS;
} else if (IR_IS_CONST_REF(insn1->op2) && IR_IS_CONST_REF(insn2->op2)) {
uintptr_t offset1 = ctx->ir_base[insn1->op2].val.u64;
uintptr_t offset2 = ctx->ir_base[insn2->op2].val.u64;
uintptr_t offset1 = ctx->ir_base[insn1->op2].val.addr;
uintptr_t offset2 = ctx->ir_base[insn2->op2].val.addr;

if (offset1 == offset2) {
return IR_MUST_ALIAS;
Expand All @@ -1376,7 +1381,7 @@ static ir_alias ir_check_partial_aliasing(ir_ctx *ctx, ir_ref addr1, ir_ref addr
}
} else if (insn2->op == IR_ADD && IR_IS_CONST_REF(insn2->op2)) {
if (insn2->op1 == addr1) {
uintptr_t offset2 = ctx->ir_base[insn2->op2].val.u64;
uintptr_t offset2 = ctx->ir_base[insn2->op2].val.addr;
uintptr_t size1 = ir_type_size[type1];

return (offset2 < size1) ? IR_MUST_ALIAS : IR_NO_ALIAS;
Expand Down
38 changes: 26 additions & 12 deletions ir.g
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,9 @@

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#ifndef _WIN32
# include <unistd.h>
#endif

const unsigned char *yy_buf;
const unsigned char *yy_end;
Expand All @@ -58,22 +60,32 @@ static ir_strtab op_tab;
((ir_ref)0xc0000000 - (ref))

static ir_ref ir_use_var(ir_parser_ctx *p, uint32_t n, const char *str, size_t len) {
ir_ref ref = ir_strtab_find(&p->var_tab, str, len);
ir_ref ref;
uint32_t len32;

IR_ASSERT(len <= 0xffffffff);
len32 = (uint32_t)len;
ref = ir_strtab_find(&p->var_tab, str, len32);
if (!ref) {
p->undef_count++;
/* create a linked list of unresolved references with header in "var_tab" */
ref = IR_UNUSED; /* list terminator */
ir_strtab_lookup(&p->var_tab, str, len, IR_ENCODE_UNRESOLVED_REF(p->ctx->insns_count, n));
ir_strtab_lookup(&p->var_tab, str, len32, IR_ENCODE_UNRESOLVED_REF(p->ctx->insns_count, n));
} else if (IR_IS_UNRESOLVED(ref)) {
/* keep the linked list of unresolved references with header in "var_tab" */
/* "ref" keeps the tail of the list */
ir_strtab_update(&p->var_tab, str, len, IR_ENCODE_UNRESOLVED_REF(p->ctx->insns_count, n));
ir_strtab_update(&p->var_tab, str, len32, IR_ENCODE_UNRESOLVED_REF(p->ctx->insns_count, n));
}
return ref;
}

static void ir_define_var(ir_parser_ctx *p, const char *str, size_t len, ir_ref ref) {
ir_ref old_ref = ir_strtab_lookup(&p->var_tab, str, len, ref);
ir_ref old_ref;
uint32_t len32;

IR_ASSERT(len <= 0xffffffff);
len32 = (uint32_t)len;
old_ref = ir_strtab_lookup(&p->var_tab, str, len32, ref);
if (ref != old_ref) {
if (IR_IS_UNRESOLVED(old_ref)) {
p->undef_count--;
Expand All @@ -83,9 +95,9 @@ static void ir_define_var(ir_parser_ctx *p, const char *str, size_t len, ir_ref
old_ref = *ptr;
*ptr = ref;
} while (old_ref != IR_UNUSED);
ir_strtab_update(&p->var_tab, str, len, ref);
ir_strtab_update(&p->var_tab, str, len32, ref);
} else {
fprintf(stderr, "ERROR: Redefined variable `%*s` on line %d\n", (int)len, str, yy_line);
fprintf(stderr, "ERROR: Redefined variable `%*s` on line %d\n", (int)len32, str, yy_line);
exit(2);
}
}
Expand Down Expand Up @@ -241,7 +253,8 @@ type(uint8_t *t):
{size_t len;}
{ir_ref ref;}
ID(&str, &len)
{ref = ir_strtab_find(&type_tab, str, len);}
{IR_ASSERT(len <= 0xffffffff);}
{ref = ir_strtab_find(&type_tab, str, (uint32_t)len);}
{if (!ref) yy_error("invalid type");}
{*t = ref;}
;
Expand All @@ -251,7 +264,8 @@ func(uint8_t *op):
{size_t len;}
{ir_ref ref;}
ID(&str, &len)
{ref = ir_strtab_find(&op_tab, str, len);}
{IR_ASSERT(len <= 0xffffffff);}
{ref = ir_strtab_find(&op_tab, str, (uint32_t)len);}
{if (!ref) yy_error("invalid op");}
{*op = ref - 1;}
;
Expand All @@ -270,7 +284,7 @@ val(ir_parser_ctx *p, uint8_t op, uint32_t n, ir_ref *ref):
| DECNUMBER(IR_I32, &val)
{if (kind != IR_OPND_NUM && kind != IR_OPND_PROB) yy_error("unexpected number");}
{if (val.i64 < 0 || val.i64 > 0x7fffffff) yy_error("number out of range");}
{*ref = val.u64;}
{*ref = val.i32;}
| "null"
{*ref = IR_UNUSED;}
)
Expand Down Expand Up @@ -388,12 +402,12 @@ void ir_loader_init(void)
ir_strtab_init(&type_tab, IR_LAST_OP, 0);
for (i = 1; i < IR_LAST_TYPE; i++) {
ir_strtab_lookup(&type_tab, ir_type_cname[i], strlen(ir_type_cname[i]), i);
ir_strtab_lookup(&type_tab, ir_type_cname[i], (uint32_t)strlen(ir_type_cname[i]), i);
}
ir_strtab_init(&op_tab, IR_LAST_OP, 0);
for (i = 0; i < IR_LAST_OP; i++) {
ir_strtab_lookup(&op_tab, ir_op_name[i], strlen(ir_op_name[i]), i + 1);
ir_strtab_lookup(&op_tab, ir_op_name[i], (uint32_t)strlen(ir_op_name[i]), i + 1);
}
}
Expand Down
8 changes: 4 additions & 4 deletions ir_aarch64.dasc
Original file line number Diff line number Diff line change
Expand Up @@ -3775,7 +3775,7 @@ static void ir_emit_call(ir_ctx *ctx, ir_ref def, ir_insn *insn)

IR_ASSERT(addr_insn->type == IR_ADDR);
if (addr_insn->op == IR_FUNC) {
addr = ir_resolve_sym_name(ir_get_str(ctx, addr_insn->val.addr));
addr = ir_resolve_sym_name(ir_get_str(ctx, addr_insn->val.i32));
} else {
addr = (void*)addr_insn->val.addr;
}
Expand Down Expand Up @@ -3852,7 +3852,7 @@ static void ir_emit_tailcall(ir_ctx *ctx, ir_ref def, ir_insn *insn)

IR_ASSERT(addr_insn->type == IR_ADDR);
if (addr_insn->op == IR_FUNC) {
addr = ir_resolve_sym_name(ir_get_str(ctx, addr_insn->val.addr));
addr = ir_resolve_sym_name(ir_get_str(ctx, addr_insn->val.i32));
} else {
addr = (void*)addr_insn->val.addr;
}
Expand Down Expand Up @@ -4232,7 +4232,7 @@ static void ir_emit_exitcall(ir_ctx *ctx, ir_ref def, ir_insn *insn)

IR_ASSERT(addr_insn->type == IR_ADDR);
if (addr_insn->op == IR_FUNC) {
addr = ir_resolve_sym_name(ir_get_str(ctx, addr_insn->val.addr));
addr = ir_resolve_sym_name(ir_get_str(ctx, addr_insn->val.i32));
} else {
addr = (void*)addr_insn->val.addr;
}
Expand Down Expand Up @@ -5186,7 +5186,7 @@ void *ir_emit_code(ir_ctx *ctx, size_t *size_ptr)
}
} else if (insn->op == IR_STR) {
int label = ctx->cfg_blocks_count + i;
const char *str = ir_get_str(ctx, insn->val.addr);
const char *str = ir_get_str(ctx, insn->val.i32);
int i = 0;

if (!data.rodata_label) {
Expand Down
2 changes: 1 addition & 1 deletion ir_emit.c
Original file line number Diff line number Diff line change
Expand Up @@ -241,7 +241,7 @@ static void *ir_jmp_addr(ir_ctx *ctx, ir_insn *insn, ir_insn *addr_insn)

IR_ASSERT(addr_insn->type == IR_ADDR);
if (addr_insn->op == IR_FUNC) {
addr = ir_resolve_sym_name(ir_get_str(ctx, addr_insn->val.addr));
addr = ir_resolve_sym_name(ir_get_str(ctx, addr_insn->val.i32));
} else {
IR_ASSERT(addr_insn->op == IR_ADDR || addr_insn->op == IR_FUNC_ADDR);
addr = (void*)addr_insn->val.addr;
Expand Down
4 changes: 2 additions & 2 deletions ir_emit_c.c
Original file line number Diff line number Diff line change
Expand Up @@ -525,7 +525,7 @@ static void ir_emit_call(ir_ctx *ctx, FILE *f, ir_ref def, ir_insn *insn)
ir_emit_def_ref(ctx, f, def);
}
if (IR_IS_CONST_REF(insn->op2)) {
fprintf(f, "%s", ir_get_str(ctx, ctx->ir_base[insn->op2].val.addr));
fprintf(f, "%s", ir_get_str(ctx, ctx->ir_base[insn->op2].val.i32));
} else {
ir_emit_ref(ctx, f, insn->op2);
}
Expand All @@ -548,7 +548,7 @@ static void ir_emit_tailcall(ir_ctx *ctx, FILE *f, ir_insn *insn)
fprintf(f, "\treturn ");
}
if (IR_IS_CONST_REF(insn->op2)) {
fprintf(f, "%s", ir_get_str(ctx, ctx->ir_base[insn->op2].val.addr));
fprintf(f, "%s", ir_get_str(ctx, ctx->ir_base[insn->op2].val.i32));
} else {
ir_emit_ref(ctx, f, insn->op2);
}
Expand Down
4 changes: 2 additions & 2 deletions ir_gcm.c
Original file line number Diff line number Diff line change
Expand Up @@ -666,7 +666,7 @@ int ir_schedule(ir_ctx *ctx)
while (ref != IR_TRUE) {
_xlat[ref] = ref;
if (new_insn->op == IR_FUNC || new_insn->op == IR_STR) {
new_insn->val.addr = ir_str(&new_ctx, ir_get_str(ctx, new_insn->val.addr));
new_insn->val.addr = ir_str(&new_ctx, ir_get_str(ctx, new_insn->val.i32));
}
new_insn++;
ref++;
Expand All @@ -682,7 +682,7 @@ int ir_schedule(ir_ctx *ctx)
new_insn->optx = insn->optx;
new_insn->prev_const = 0;
if (insn->op == IR_FUNC || insn->op == IR_STR) {
new_insn->val.addr = ir_str(&new_ctx, ir_get_str(ctx, insn->val.addr));
new_insn->val.addr = ir_str(&new_ctx, ir_get_str(ctx, insn->val.i32));
} else {
new_insn->val.u64 = insn->val.u64;
}
Expand Down
36 changes: 24 additions & 12 deletions ir_load.c
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
#include <stdio.h>
#include <stdlib.h>
#ifndef _WIN32
#include <unistd.h>
# include <unistd.h>
#endif

const unsigned char *yy_buf;
Expand All @@ -42,22 +42,32 @@ static ir_strtab op_tab;
((ir_ref)0xc0000000 - (ref))

static ir_ref ir_use_var(ir_parser_ctx *p, uint32_t n, const char *str, size_t len) {
ir_ref ref = ir_strtab_find(&p->var_tab, str, len);
ir_ref ref;
uint32_t len32;

IR_ASSERT(len <= 0xffffffff);
len32 = (uint32_t)len;
ref = ir_strtab_find(&p->var_tab, str, len32);
if (!ref) {
p->undef_count++;
/* create a linked list of unresolved references with header in "var_tab" */
ref = IR_UNUSED; /* list terminator */
ir_strtab_lookup(&p->var_tab, str, len, IR_ENCODE_UNRESOLVED_REF(p->ctx->insns_count, n));
ir_strtab_lookup(&p->var_tab, str, len32, IR_ENCODE_UNRESOLVED_REF(p->ctx->insns_count, n));
} else if (IR_IS_UNRESOLVED(ref)) {
/* keep the linked list of unresolved references with header in "var_tab" */
/* "ref" keeps the tail of the list */
ir_strtab_update(&p->var_tab, str, len, IR_ENCODE_UNRESOLVED_REF(p->ctx->insns_count, n));
ir_strtab_update(&p->var_tab, str, len32, IR_ENCODE_UNRESOLVED_REF(p->ctx->insns_count, n));
}
return ref;
}

static void ir_define_var(ir_parser_ctx *p, const char *str, size_t len, ir_ref ref) {
ir_ref old_ref = ir_strtab_lookup(&p->var_tab, str, len, ref);
ir_ref old_ref;
uint32_t len32;

IR_ASSERT(len <= 0xffffffff);
len32 = (uint32_t)len;
old_ref = ir_strtab_lookup(&p->var_tab, str, len32, ref);
if (ref != old_ref) {
if (IR_IS_UNRESOLVED(old_ref)) {
p->undef_count--;
Expand All @@ -67,9 +77,9 @@ static void ir_define_var(ir_parser_ctx *p, const char *str, size_t len, ir_ref
old_ref = *ptr;
*ptr = ref;
} while (old_ref != IR_UNUSED);
ir_strtab_update(&p->var_tab, str, len, ref);
ir_strtab_update(&p->var_tab, str, len32, ref);
} else {
fprintf(stderr, "ERROR: Redefined variable `%*s` on line %d\n", (int)len, str, yy_line);
fprintf(stderr, "ERROR: Redefined variable `%*s` on line %d\n", (int)len32, str, yy_line);
exit(2);
}
}
Expand Down Expand Up @@ -862,7 +872,8 @@ static int parse_type(int sym, uint8_t *t) {
size_t len;
ir_ref ref;
sym = parse_ID(sym, &str, &len);
ref = ir_strtab_find(&type_tab, str, len);
IR_ASSERT(len <= 0xffffffff);
ref = ir_strtab_find(&type_tab, str, (uint32_t)len);
if (!ref) yy_error("invalid type");
*t = ref;
return sym;
Expand All @@ -873,7 +884,8 @@ static int parse_func(int sym, uint8_t *op) {
size_t len;
ir_ref ref;
sym = parse_ID(sym, &str, &len);
ref = ir_strtab_find(&op_tab, str, len);
IR_ASSERT(len <= 0xffffffff);
ref = ir_strtab_find(&op_tab, str, (uint32_t)len);
if (!ref) yy_error("invalid op");
*op = ref - 1;
return sym;
Expand All @@ -896,7 +908,7 @@ static int parse_val(int sym, ir_parser_ctx *p, uint8_t op, uint32_t n, ir_ref *
sym = parse_DECNUMBER(sym, IR_I32, &val);
if (kind != IR_OPND_NUM && kind != IR_OPND_PROB) yy_error("unexpected number");
if (val.i64 < 0 || val.i64 > 0x7fffffff) yy_error("number out of range");
*ref = val.u64;
*ref = val.i32;
} else if (sym == YY_NULL) {
sym = get_sym();
*ref = IR_UNUSED;
Expand Down Expand Up @@ -1049,12 +1061,12 @@ void ir_loader_init(void)

ir_strtab_init(&type_tab, IR_LAST_OP, 0);
for (i = 1; i < IR_LAST_TYPE; i++) {
ir_strtab_lookup(&type_tab, ir_type_cname[i], strlen(ir_type_cname[i]), i);
ir_strtab_lookup(&type_tab, ir_type_cname[i], (uint32_t)strlen(ir_type_cname[i]), i);
}

ir_strtab_init(&op_tab, IR_LAST_OP, 0);
for (i = 0; i < IR_LAST_OP; i++) {
ir_strtab_lookup(&op_tab, ir_op_name[i], strlen(ir_op_name[i]), i + 1);
ir_strtab_lookup(&op_tab, ir_op_name[i], (uint32_t)strlen(ir_op_name[i]), i + 1);
}
}

Expand Down
Loading

0 comments on commit 9b34731

Please sign in to comment.