wcc/ww: reject mismatched integer binop operands (#26)
cstage rejects a binop whose two integer operands have different types (e.g. int vs i32 from len()); wwstage accepted it, miscompiling under no-implicit-promotion. Align wwstage UP: unifyarith now chases aliases and loud-rejects an integer-type mismatch, routing the ordered-comparison ops through the same path with the error message threaded on `e`. Per the user's no-implicit-promotion decision. Scope carve-outs: EQ/NEQ stay out of the reject (#34, the comparison operators keep their own widening rule) and a rune literal is exempt (#35, N_RUNELIT is still untyped at this point). Adds the 29-case test/wcc/949_intbinop_mismatch.c and its Makefile wiring.
This commit is contained in:
7
Makefile
7
Makefile
@@ -421,6 +421,7 @@ TESTS = $(BIN)/test_smoke $(BIN)/test_lex $(BIN)/test_parse $(BIN)/test_check \
|
||||
$(BIN)/test_tagged_structlit_payload_run \
|
||||
$(BIN)/test_forrange_fieldbase_run \
|
||||
$(BIN)/test_errtype_compare \
|
||||
$(BIN)/test_intbinop_mismatch \
|
||||
$(BIN)/test_tuple_elem_slice_len_run \
|
||||
$(BIN)/test_str_forrange_loopvar_run \
|
||||
$(BIN)/test_composite_call_arg \
|
||||
@@ -2612,6 +2613,12 @@ $(BIN)/test_errtype_compare: test/wcc/949_errtype_compare.c \
|
||||
$(LIB)/libwwrt.a | $(BIN)
|
||||
$(CC) $(CFLAGS) -o $@ $<
|
||||
|
||||
$(BIN)/test_intbinop_mismatch: test/wcc/949_intbinop_mismatch.c \
|
||||
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
||||
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
||||
$(LIB)/libwwrt.a | $(BIN)
|
||||
$(CC) $(CFLAGS) -o $@ $<
|
||||
|
||||
$(BIN)/test_composite_call_arg: test/wcc/723_composite_call_arg.c \
|
||||
$(BIN)/w6c $(BIN)/w6c_ww | $(BIN)
|
||||
$(CC) $(CFLAGS) -o $@ $<
|
||||
|
||||
Reference in New Issue
Block a user