Browse Source

Correct union tag size for large alignments

gingerBill 4 years ago
parent
commit
89890d7900
1 changed files with 2 additions and 10 deletions
  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) {