mirror of
https://github.com/c3lang/c3c.git
synced 2026-02-27 12:01:16 +00:00
Int128 alignment fixed on x64 Linux.
This commit is contained in:
@@ -63,6 +63,7 @@
|
||||
- Fix Vec2.angle
|
||||
- Update to libc::setjmp on Win32, to do no stack unwinding.
|
||||
- Recursively follow interfaces when looking up method.
|
||||
- Int128 alignment fixed on x64 Linux.
|
||||
|
||||
### Stdlib changes
|
||||
|
||||
|
||||
@@ -1546,20 +1546,21 @@ static AlignData os_target_alignment_of_int(OsType os, ArchType arch, uint32_t b
|
||||
case ARCH_TYPE_PPC64:
|
||||
case ARCH_TYPE_PPC:
|
||||
case ARCH_TYPE_PPC64LE:
|
||||
case ARCH_TYPE_X86_64:
|
||||
case ARCH_TYPE_WASM64:
|
||||
case ARCH_TYPE_RISCV32:
|
||||
case ARCH_TYPE_WASM32:
|
||||
case ARCH_TYPE_XTENSA:
|
||||
return (AlignData) { MIN(64u, bits), MIN(64u, bits) };
|
||||
case ARCH_TYPE_X86_64:
|
||||
case ARCH_TYPE_RISCV64:
|
||||
return (AlignData) { bits, bits };
|
||||
case ARCH_TYPE_AARCH64:
|
||||
case ARCH_TYPE_AARCH64_BE:
|
||||
if (bits < 32 && !os_is_apple(os) && os != OS_TYPE_WIN32) return (AlignData){ bits, 32 };
|
||||
if (bits < 32) return (AlignData){ bits, 32 };
|
||||
return (AlignData) { bits, bits };
|
||||
case ARCH_TYPE_X86:
|
||||
if (bits < 32) return (AlignData) { bits, bits };
|
||||
if (bits <= 32) return (AlignData) { bits, bits };
|
||||
if (bits == 128) return (AlignData) { 128, 128 };
|
||||
if (os == OS_TYPE_ELFIAMCU) return (AlignData) { 32, 32 };
|
||||
if (os == OS_TYPE_WIN32 || os == OS_TYPE_NACL) return (AlignData) { 64, 64 };
|
||||
return (AlignData) { 32, 64 };
|
||||
|
||||
18
test/test_suite/dynamic/dynamic_inherit_deep.c3t
Normal file
18
test/test_suite/dynamic/dynamic_inherit_deep.c3t
Normal file
@@ -0,0 +1,18 @@
|
||||
module abc;
|
||||
interface AstNode {
|
||||
fn void free();
|
||||
fn double get_span();
|
||||
fn void dump(int depth);
|
||||
}
|
||||
|
||||
interface AstBodyStatement : AstNode {
|
||||
}
|
||||
|
||||
interface AstExpression : /* AstNode,*/ AstBodyStatement {
|
||||
}
|
||||
|
||||
fn void main()
|
||||
{
|
||||
AstExpression a = null;
|
||||
a.dump(100);
|
||||
}
|
||||
@@ -26,5 +26,5 @@ const int128 I128 = 0b0100_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_000
|
||||
@test.I = local_unnamed_addr constant i32 1073741824, align 4
|
||||
@test.UL = local_unnamed_addr constant i64 -9223372036854775808, align 8
|
||||
@test.L = local_unnamed_addr constant i64 4611686018427387904, align 8
|
||||
@test.UI128 = local_unnamed_addr constant i128 -170141183460469231731687303715884105728, align 8
|
||||
@test.I128 = local_unnamed_addr constant i128 85070591730234615865843651857942052864, align 8
|
||||
@test.UI128 = local_unnamed_addr constant i128 -170141183460469231731687303715884105728, align 16
|
||||
@test.I128 = local_unnamed_addr constant i128 85070591730234615865843651857942052864, align 16
|
||||
Reference in New Issue
Block a user