| ... | ... | @@ -9,9 +9,15 @@ test "global variable alignment" { |
| 9 | 9 | } |
| 10 | 10 | |
| 11 | 11 | fn derp() align (@sizeOf(usize) * 2) -> i32 { 1234 } |
| 12 | fn noop1() align 1 {} |
| 13 | fn noop4() align 4 {} |
| 12 | 14 | |
| 13 | 15 | test "function alignment" { |
| 14 | 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 | 102 | fn sliceExpects4(slice: []align 4 u32) { |
| 97 | 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 } |