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);
Comment #2 by bugzilla — 2009-12-06T00:47:06Z
Fixed dmd 1.053 and 2.037