ref: 87acad0c11beb15c6d32deeef2fb75585c71d5c2
parent: 354cd74663da3fd2ba71d09ff88006f07cccd67b
author: Ori Bernstein <[email protected]>
date: Wed Aug 8 12:32:40 EDT 2012
Advance varargs by size, not alignment.
--- a/test.myr
+++ b/test.myr
@@ -2,7 +2,6 @@
const main = {
var x : byte*[1024]
- var buf : byte[1024]
var sz
var i
@@ -25,7 +24,7 @@
;;
std.write(1, "Hello, 世界\n")
chartypes()
- std.put("format output %i %i %s\n", 123, 321, "asdf")
+ std.put("format output %i %i %s %s\n", 123, 321, "asdf", "ghij")
}
const chartypes = {
--- a/varargs.myr
+++ b/varargs.myr
@@ -15,21 +15,21 @@
generic vanext = {ap -> [@a, valist]
var v : @a
- var sz
+ var align
var p
if sizeof(@a) > 8
- sz = 8
+ align = 8
else
- sz = sizeof(@a)
+ align = sizeof(@a)
;;
p = ap castto(intptr)
- p = (p + sz - 1) & ~(sz - 1)
+ p = (p + align - 1) & ~(align - 1)
ap = p castto(valist)
v = *(ap castto(@a*))
- ap = ((p castto(intptr)) + sz) castto(valist)
+ ap = ((p castto(intptr)) + sizeof(@a)) castto(valist)
-> (v, ap)
}