| ... | @@ -9,9 +9,15 @@ test "global variable alignment" { | ... | @@ -9,9 +9,15 @@ test "global variable alignment" { |
| 9 | } | 9 | } |
| 10 | | 10 | |
| 11 | fn derp() align (@sizeOf(usize) * 2) -> i32 { 1234 } | 11 | fn derp() align (@sizeOf(usize) * 2) -> i32 { 1234 } |
| | 12 | fn noop1() align 1 {} |
| | 13 | fn noop4() align 4 {} |
| 12 | | 14 | |
| 13 | test "function alignment" { | 15 | test "function alignment" { |
| 14 | assert(derp() == 1234); | 16 | assert(derp() == 1234); |
| | 17 | assert(@typeOf(noop1) == fn() align 1); |
| | 18 | assert(@typeOf(noop4) == fn() align 4); |
| | 19 | noop1(); |
| | 20 | noop4(); |
| 15 | } | 21 | } |
| 16 | | 22 | |
| 17 | | 23 | |
| ... | @@ -96,3 +102,28 @@ fn sliceExpectsOnly1(slice: []align 1 u32) { | ... | @@ -96,3 +102,28 @@ fn sliceExpectsOnly1(slice: []align 1 u32) { |
| 96 | fn sliceExpects4(slice: []align 4 u32) { | 102 | fn sliceExpects4(slice: []align 4 u32) { |
| 97 | slice[0] += 1; | 103 | slice[0] += 1; |
| 98 | } | 104 | } |
| | 105 | |
| | 106 | |
| | 107 | test "implicitly decreasing fn alignment" { |
| | 108 | testImplicitlyDecreaseFnAlign(alignedSmall, 1234); |
| | 109 | testImplicitlyDecreaseFnAlign(alignedBig, 5678); |
| | 110 | } |
| | 111 | |
| | 112 | fn testImplicitlyDecreaseFnAlign(ptr: fn () align 1 -> i32, answer: i32) { |
| | 113 | assert(ptr() == answer); |
| | 114 | } |
| | 115 | |
| | 116 | fn alignedSmall() align 8 -> i32 { 1234 } |
| | 117 | fn alignedBig() align 16 -> i32 { 5678 } |
| | 118 | |
| | 119 | |
| | 120 | test "@alignCast functions" { |
| | 121 | assert(fnExpectsOnly1(simple4) == 0x19); |
| | 122 | } |
| | 123 | fn fnExpectsOnly1(ptr: fn()align 1 -> i32) -> i32 { |
| | 124 | fnExpects4(@alignCast(4, ptr)) |
| | 125 | } |
| | 126 | fn fnExpects4(ptr: fn()align 4 -> i32) -> i32 { |
| | 127 | ptr() |
| | 128 | } |
| | 129 | fn simple4() align 4 -> i32 { 0x19 } |