shithub: mc

Download patch

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)
 }