Handle functions with anonymous arguments

Example:

int f(int a, int, int c) {
    return a + c;
}
This commit is contained in:
Jack Palevich 2009-08-19 10:53:43 -07:00
parent 761aeb431e
commit 0a01a5db56
3 changed files with 19 additions and 2 deletions

View File

@ -4891,11 +4891,15 @@ class Compiler : public ErrorSink {
int argCount = 0;
for (Type* pP = pDecl->pTail; pP; pP = pP->pTail) {
Type* pArg = pP->pHead;
addLocalSymbol(pArg);
if (pArg->id) {
addLocalSymbol(pArg);
}
/* read param name and compute offset */
size_t alignment = pGen->stackAlignmentOf(pArg);
a = (a + alignment - 1) & ~ (alignment-1);
VI(pArg->id)->pAddress = (void*) a;
if (pArg->id) {
VI(pArg->id)->pAddress = (void*) a;
}
a = a + pGen->stackSizeOf(pArg);
argCount++;
}

View File

@ -0,0 +1,8 @@
int f(int a,int, int c) {
return a + c;
}
int main() {
return f(1,2,3);
}

View File

@ -437,6 +437,11 @@ result: 0
def testDefines(self):
self.compileCheck(["-R", "data/defines.c"], """Executing compiled code:
result: 3
""","""""")
def testFuncArgs(self):
self.compileCheck(["-R", "data/funcargs.c"], """Executing compiled code:
result: 4
""","""""")
def main():