소스 검색

Correct union tag size for large alignments

gingerBill 4 년 전
부모
커밋
89890d7900
1개의 변경된 파일2개의 추가작업 그리고 10개의 파일을 삭제
  1. 2 10
      src/types.cpp

+ 2 - 10
src/types.cpp

@@ -2208,7 +2208,6 @@ i64 union_tag_size(Type *u) {
 		return 0;
 	}
 
-#if 1
 	// TODO(bill): Is this an okay approach?
 	i64 max_align = 1;
 	for_array(i, u->Union.variants) {
@@ -2219,15 +2218,8 @@ i64 union_tag_size(Type *u) {
 		}
 	}
 
-	u->Union.tag_size = gb_min(max_align, build_context.max_align);
-	return max_align;
-#else
-	i64 bytes = next_pow2(cast(i64)(floor_log2(n)/8 + 1));
-	i64 tag_size = gb_max(bytes, 1);
-
-	u->Union.tag_size = tag_size;
-	return tag_size;
-#endif
+	u->Union.tag_size = gb_min3(max_align, build_context.max_align, 8);
+	return u->Union.tag_size;
 }
 
 Type *union_tag_type(Type *u) {