瀏覽代碼

Fix printing IR of integer as a pointer with endianness.

When converting an integer value into a pointer and writing out the IR
for it in 'ir_print_exact_value', 'is_type_integer_endian_{little,big}'
did not correct handle being asked about pointer types.

They now reply with whether the endianness of 'uintptr' matches the
endianness being asked about.
Tetralux 6 年之前
父節點
當前提交
46c610d6e5
共有 1 個文件被更改,包括 4 次插入0 次删除
  1. 4 0
      src/types.cpp

+ 4 - 0
src/types.cpp

@@ -1041,6 +1041,8 @@ bool is_type_integer_endian_big(Type *t) {
 		return build_context.endian_kind == TargetEndian_Big;
 	} else if (t->kind == Type_BitSet) {
 		return is_type_integer_endian_big(bit_set_to_int(t));
+	} else if (t->kind == Type_Pointer) {
+		return is_type_integer_endian_big(&basic_types[Basic_uintptr]);
 	} else {
 		GB_PANIC("Unsupported type: %s", type_to_string(t));
 	}
@@ -1058,6 +1060,8 @@ bool is_type_integer_endian_little(Type *t) {
 		return build_context.endian_kind == TargetEndian_Little;
 	} else if (t->kind == Type_BitSet) {
 		return is_type_integer_endian_little(bit_set_to_int(t));
+	} else if (t->kind == Type_Pointer) {
+		return is_type_integer_endian_little(&basic_types[Basic_uintptr]);
 	} else {
 		GB_PANIC("Unsupported type: %s", type_to_string(t));
 	}