fixes and changes the recently introduced 'alignas' to be 'align' (#12666)

* fixes and changes the recently introduced 'alignas' to be 'align'

* more improvements
This commit is contained in:
Andreas Rumpf 2019-11-15 20:24:14 +01:00 • committed by GitHub
commit 58f3e07b1a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 50 additions and 44 deletions

View file

@ -1,3 +1,3 @@
var myglobal1* {.alignas(128).}: int32
var myglobal2* {.alignas(128).}: int32
var myglobal3* {.alignas(128).}: int32
var myglobal1* {.align(128).}: int32
var myglobal2* {.align(128).}: int32
var myglobal3* {.align(128).}: int32

View file

@ -1,7 +1,7 @@
discard """
ccodeCheck: "\\i @'alignas(128) NI mylocal1' .*"
ccodeCheck: "\\i @'NIM_ALIGN(128) NI mylocal1' .*"
target: "c cpp"
output: "alignas ok"
output: "align ok"
"""
# This is for Azure. The keyword ``alignof`` only exists in ``c++11``
@ -11,14 +11,14 @@ when defined(cpp) and not defined(windows):
import globalalignas
var toplevel1 {.alignas: 32.} : int32
var toplevel2 {.alignas: 32.} : int32
var toplevel3 {.alignas: 32.} : int32
var toplevel1 {.align: 32.} : int32
var toplevel2 {.align: 32.} : int32
var toplevel3 {.align: 32.} : int32
proc foobar() =
var myvar1 {.global, alignas(64).}: int = 123
var myvar2 {.global, alignas(64).}: int = 123
var myvar3 {.global, alignas(64).}: int = 123
var myvar1 {.global, align(64).}: int = 123
var myvar2 {.global, align(64).}: int = 123
var myvar3 {.global, align(64).}: int = 123
doAssert (cast[uint](addr(myglobal1)) and 127) == 0
doAssert (cast[uint](addr(myglobal2)) and 127) == 0
@ -32,15 +32,15 @@ proc foobar() =
doAssert (cast[uint](addr(toplevel2)) and 31) == 0
doAssert (cast[uint](addr(toplevel3)) and 31) == 0
# test multiple alignas expressions
var mylocal1 {.alignas(0), alignas(128), alignas(32).}: int = 123
var mylocal2 {.alignas(128), alignas(0), alignas(32).}: int = 123
var mylocal3 {.alignas(0), alignas(32), alignas(128).}: int = 123
# test multiple align expressions
var mylocal1 {.align(0), align(128), align(32).}: int = 123
var mylocal2 {.align(128), align(0), align(32).}: int = 123
var mylocal3 {.align(0), align(32), align(128).}: int = 123
doAssert (cast[uint](addr(mylocal1)) and 127) == 0
doAssert (cast[uint](addr(mylocal2)) and 127) == 0
doAssert (cast[uint](addr(mylocal3)) and 127) == 0
echo "alignas ok"
echo "align ok"
foobar()

View file

@ -4,4 +4,4 @@ errormsg: "power of two or 0 expected"
"""
proc foobar() =
let something {.alignas(33).} = 123
let something {.align(33).} = 123

View file

@ -336,10 +336,10 @@ testinstance:
a: int32
b: T
# this type mixes `packed` with `alignas`.
# this type mixes `packed` with `align`.
MyCustomAlignPackedObject {.objectconfig.} = object
a: char
b {.alignas: 32.}: int32 # alignas overrides `packed` for this field.
b {.align: 32.}: int32 # align overrides `packed` for this field.
c: char
d: int32 # unaligned
@ -496,11 +496,11 @@ type
MyCustomAlignUnion {.union.} = object
c: char
a {.alignas: 32.}: int
a {.align: 32.}: int
MyCustomAlignObject = object
c: char
a {.alignas: 32.}: int
a {.align: 32.}: int
doAssert sizeof(MyUnionType) == 4
doAssert sizeof(MyCustomAlignUnion) == 32