mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-13 22:04:09 +02:00
Fixed packing issue, made Packed infer Ordered
This commit is contained in:
parent
76c8b62780
commit
cf7914f71a
2 changed files with 16 additions and 1 deletions
|
@ -2146,6 +2146,8 @@ bool BfModule::DoPopulateType(BfType* resolvedTypeRef, BfPopulateType populateTy
|
||||||
bool isCRepr = false;
|
bool isCRepr = false;
|
||||||
bool isOrdered = false;
|
bool isOrdered = false;
|
||||||
ProcessTypeInstCustomAttributes(isPacked, isUnion, isCRepr, isOrdered);
|
ProcessTypeInstCustomAttributes(isPacked, isUnion, isCRepr, isOrdered);
|
||||||
|
if (isPacked) // Packed infers ordered
|
||||||
|
isOrdered = true;
|
||||||
typeInstance->mIsUnion = isUnion;
|
typeInstance->mIsUnion = isUnion;
|
||||||
if ((typeInstance->IsEnum()) && (typeInstance->IsStruct()))
|
if ((typeInstance->IsEnum()) && (typeInstance->IsStruct()))
|
||||||
typeInstance->mIsUnion = true;
|
typeInstance->mIsUnion = true;
|
||||||
|
@ -2783,7 +2785,9 @@ bool BfModule::DoPopulateType(BfType* resolvedTypeRef, BfPopulateType populateTy
|
||||||
|
|
||||||
bool needsExplicitAlignment = !isCRepr || resolvedFieldType->NeedsExplicitAlignment();
|
bool needsExplicitAlignment = !isCRepr || resolvedFieldType->NeedsExplicitAlignment();
|
||||||
|
|
||||||
int nextDataPos = (dataPos + (alignSize - 1)) & ~(alignSize - 1);
|
int nextDataPos = dataPos;
|
||||||
|
if (!isPacked)
|
||||||
|
nextDataPos = (dataPos + (alignSize - 1)) & ~(alignSize - 1);
|
||||||
int padding = nextDataPos - dataPos;
|
int padding = nextDataPos - dataPos;
|
||||||
if ((alignSize > 1) && (needsExplicitAlignment) && (padding > 0))
|
if ((alignSize > 1) && (needsExplicitAlignment) && (padding > 0))
|
||||||
{
|
{
|
||||||
|
|
|
@ -111,6 +111,13 @@ namespace Tests
|
||||||
int8 mD;
|
int8 mD;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Packed]
|
||||||
|
struct StructJ
|
||||||
|
{
|
||||||
|
int8 mA;
|
||||||
|
int32 mB;
|
||||||
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
static void TestBasics()
|
static void TestBasics()
|
||||||
{
|
{
|
||||||
|
@ -153,6 +160,10 @@ namespace Tests
|
||||||
Test.Assert(sizeof(StructI) == 16);
|
Test.Assert(sizeof(StructI) == 16);
|
||||||
Test.Assert(alignof(StructI) == 4);
|
Test.Assert(alignof(StructI) == 4);
|
||||||
Test.Assert(strideof(StructI) == 16);
|
Test.Assert(strideof(StructI) == 16);
|
||||||
|
|
||||||
|
Test.Assert(sizeof(StructJ) == 5);
|
||||||
|
Test.Assert(alignof(StructJ) == 1);
|
||||||
|
Test.Assert(strideof(StructJ) == 5);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int Test<T>(T val)
|
public int Test<T>(T val)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue