Bug 3495 – Segfault(typinf.c) instantiating D variadic function with too few arguments
Status
RESOLVED
Resolution
FIXED
Severity
normal
Priority
P2
Component
dmd
Product
D
Version
D1 (retired)
Platform
Other
OS
Windows
Creation time
2009-11-11T05:39:00Z
Last change time
2014-04-18T09:12:03Z
Keywords
ice-on-invalid-code, patch
Assigned to
nobody
Creator
clugdbug
Comments
Comment #0 by clugdbug — 2009-11-11T05:39:45Z
Segfaulting in createTypeInfoArray(): exps[i] is null.
Applies to DMD0.175 and later, including both D2.036 and D1.051.
---
void foo(int,...) {}
void bar(){
foo();
}
---
arr.d(4): Error: function arr.foo (int _param_0,...) is not callable using argum
ent types ()
arr.d(4): Error: expected 1 function arguments, not 0
<segfault>
Doesn't happen with C-style variadics.
Comment #1 by clugdbug — 2009-11-11T07:57:22Z
CAUSE: if not enough arguments, tries to create a negatively-sized type info array!
PATCH: expression.c, line 802 (DMD2 svn 241), at end of functionArguments():
---
// If D linkage and variadic, add _arguments[] as first argument
- if (tf->linkage == LINKd && tf->varargs == 1)
+ if (tf->linkage == LINKd && tf->varargs == 1 && arguments->dim >= nparams)
{
Expression *e;
e = createTypeInfoArray(sc, (Expression **)&arguments->data[nparams],
arguments->dim - nparams);
arguments->insert(0, e);