View mode: basic / threaded / horizontal-split · Log in · Help
November 11, 2009
[Issue 3495] New: Segfault(typinf.c) instantiating D variadic function with too few arguments
http://d.puremagic.com/issues/show_bug.cgi?id=3495

          Summary: Segfault(typinf.c) instantiating D variadic function
                   with too few arguments
          Product: D
          Version: 1.051
         Platform: Other
       OS/Version: Windows
           Status: NEW
         Keywords: ice-on-invalid-code
         Severity: normal
         Priority: P2
        Component: DMD
       AssignedTo: nobody@puremagic.com
       ReportedBy: clugdbug@yahoo.com.au


--- Comment #0 from Don <clugdbug@yahoo.com.au> 2009-11-11 05:39:45 PST ---
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.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
November 11, 2009
[Issue 3495] Segfault(typinf.c) instantiating D variadic function with too few arguments
http://d.puremagic.com/issues/show_bug.cgi?id=3495


Don <clugdbug@yahoo.com.au> changed:

          What    |Removed                     |Added
----------------------------------------------------------------------------
          Keywords|                            |patch


--- Comment #1 from Don <clugdbug@yahoo.com.au> 2009-11-11 07:57:22 PST ---
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);

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
December 06, 2009
[Issue 3495] Segfault(typinf.c) instantiating D variadic function with too few arguments
http://d.puremagic.com/issues/show_bug.cgi?id=3495


Walter Bright <bugzilla@digitalmars.com> changed:

          What    |Removed                     |Added
----------------------------------------------------------------------------
            Status|NEW                         |RESOLVED
                CC|                            |bugzilla@digitalmars.com
        Resolution|                            |FIXED


--- Comment #2 from Walter Bright <bugzilla@digitalmars.com> 2009-12-06 00:47:06 PST ---
Fixed dmd 1.053 and 2.037

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Top | Discussion index | About this forum | D home