Skip to content

Compiling eval.c with zig cc generates implicit conversion warning and affects chibi-scheme excutable's functionality #1021

@congcongkuo

Description

@congcongkuo

Zig version: 0.14.0
OS: macOS 15.4

zig cc -c -Iinclude -o eval.o eval.c
eval.c:1861:19: warning: implicit conversion from 'sexp_sint_t' (aka 'long') to 'long double' changes value from 4611686018427387903 to 4611686018427387904 [-Wimplicit-const-int-float-conversion]
 1861 |   if ((f*1000.0 > SEXP_MAX_FIXNUM) || (f*1000.0 < SEXP_MIN_FIXNUM)
      |                 ~ ^~~~~~~~~~~~~~~
include/chibi/sexp.h:352:88: note: expanded from macro 'SEXP_MAX_FIXNUM'
  352 | #define SEXP_MAX_FIXNUM ((((sexp_sint_t)1)<<(sizeof(sexp_sint_t)*8-SEXP_FIXNUM_BITS-1))-1)
      |                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~
1 warning generated.

If I ignore this warning, I can build libchibi-scheme and chibi-scheme successfully. But when I run

chibi-scheme -V

I got

thread 13403759 panic: store of misaligned address 0x140055331 for type 'sexp_uint_t' (aka 'unsigned long'), which requires 8 byte alignment
chibi/vm.c:166:72: 0x1051cf347 in sexp_emit_word (chibi/vm.c)
  *((sexp_uint_t*)(&(data[sexp_unbox_fixnum(sexp_context_pos(ctx))]))) = val;
                                                                       ^
chibi/vm.c:273:5: 0x1051d1bef in generate_non_global_ref (chibi/vm.c)
    sexp_emit_word(ctx, sexp_param_index(ctx, lambda, name));
    ^
chibi/vm.c:306:7: 0x1050ea357 in generate_ref (chibi/vm.c)
      generate_non_global_ref(ctx, sexp_ref_name(ref), sexp_ref_cell(ref),
      ^
chibi/vm.c:769:23: 0x1050e3b0b in sexp_generate (chibi/vm.c)
    case SEXP_REF:    generate_ref(ctx, x, 1); break;
                      ^
chibi/vm.c:394:9: 0x1051c9c37 in generate_opcode_app (chibi/vm.c)
        sexp_generate(ctx, 0, 0, 0, sexp_car(ls));
        ^
chibi/vm.c:563:5: 0x1050e41ef in generate_app (chibi/vm.c)
    generate_opcode_app(ctx, app);
    ^
chibi/vm.c:766:23: 0x1050e3abf in sexp_generate (chibi/vm.c)
    case SEXP_PAIR:   generate_app(ctx, name, loc, lam, x); break;
                      ^
chibi/vm.c:394:9: 0x1051c9c37 in generate_opcode_app (chibi/vm.c)
        sexp_generate(ctx, 0, 0, 0, sexp_car(ls));
        ^
chibi/vm.c:563:5: 0x1050e41ef in generate_app (chibi/vm.c)
    generate_opcode_app(ctx, app);
    ^
chibi/vm.c:766:23: 0x1050e3abf in sexp_generate (chibi/vm.c)
    case SEXP_PAIR:   generate_app(ctx, name, loc, lam, x); break;
                      ^
chibi/vm.c:716:3: 0x1050e70a7 in generate_lambda (chibi/vm.c)
  sexp_generate(ctx2, name, loc, lam, sexp_lambda_body(lambda));
  ^
chibi/vm.c:767:23: 0x1050e3adb in sexp_generate (chibi/vm.c)
    case SEXP_LAMBDA: generate_lambda(ctx, name, loc, lam, x); break;
                      ^
chibi/vm.c:319:5: 0x1050eb213 in generate_set (chibi/vm.c)
    sexp_generate(ctx, sexp_ref_name(ref), sexp_ref_loc(ref), sexp_set_value(set), sexp_set_value(set));
    ^
chibi/vm.c:770:23: 0x1050e3b1b in sexp_generate (chibi/vm.c)
    case SEXP_SET:    generate_set(ctx, x); break;
                      ^
chibi/eval.c:2694:3: 0x105241197 in sexp_generate_op (chibi/eval.c)
  sexp_generate(ctx2, 0, 0, 0, ast);
  ^
chibi/eval.c:2728:15: 0x105243027 in sexp_compile_op (chibi/eval.c)
        res = sexp_generate_op(ctx2, self, n, ast, ctx2);
              ^
chibi/eval.c:2751:40: 0x105212e7f in sexp_eval_op (chibi/eval.c)
  res = sexp_exceptionp(ctx2) ? ctx2 : sexp_compile_op(ctx2, self, n, obj, env);
                                       ^
chibi/eval.c:1545:38: 0x1052115cb in sexp_load_op (chibi/eval.c)
      res = sexp_exceptionp(x) ? x : sexp_eval(ctx2, x, env);
                                     ^
chibi/eval.c:2401:11: 0x105233107 in sexp_load_module_file (chibi/eval.c)
    res = sexp_load(ctx, path, env);
          ^
chibi/eval.c:2552:9: 0x10523a1bf in sexp_load_standard_env (chibi/eval.c)
  tmp = sexp_load_module_file(ctx, init_file, e);
        ^
chibi/main.c:252:7: 0x10482a5d7 in sexp_load_standard_repl_env (chibi/main.c)
  e = sexp_load_standard_env(ctx, env, k);
      ^
chibi/main.c:481:7: 0x10481d8c7 in run_main (chibi/main.c)
      load_init(1);
      ^
chibi/main.c:684:9: 0x1048307cf in main (chibi/main.c)
  res = run_main(argc, argv);
        ^
???:?:?: 0x1939bc273 in ??? (???)
???:?:?: 0x0 in ??? (???)
fish: Job 1, 'chibi-scheme -V' terminated by signal SIGABRT (Abort)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions