[Issue 4728] New: Crash by protected/private constructor in an other module
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Thu Aug 26 00:46:05 PDT 2010
http://d.puremagic.com/issues/show_bug.cgi?id=4728
Summary: Crash by protected/private constructor in an other
module
Product: D
Version: D2
Platform: Other
OS/Version: Windows
Status: NEW
Keywords: ice-on-invalid-code
Severity: normal
Priority: P2
Component: DMD
AssignedTo: nobody at puremagic.com
ReportedBy: rayerd.wiz at gmail.com
--- Comment #0 from Haruki Shigemori <rayerd.wiz at gmail.com> 2010-08-26 00:45:57 PDT ---
// a.d
import b;
void main()
{
new A();
}
// b.d
class A
{
protected this(){}
}
When these source codes are compiled with dmd trunk r628, dmd outputs a correct
error message and crashes.
>dmd a b
a.d(4): Error: class b.A member this is not accessible
<-- crash!!
The cause of the crash is an access to the null pointer as shown below.
// toctype.c
...
type *TypeFunction::toCtype()
{ type *t;
if (ctype)
return ctype;
if (1)
{
param_t *paramtypes;
tym_t tyf;
type *tp;
paramtypes = NULL;
size_t nparams = Parameter::dim(parameters);
for (size_t i = 0; i < nparams; i++)
{ Parameter *arg = Parameter::getNth(parameters, i);
tp = arg->type->toCtype();
if (arg->storageClass & (STCout | STCref))
{ // C doesn't have reference types, so it's really a pointer
// to the parameter type
tp = type_allocn(TYref, tp);
}
param_append_type(¶mtypes,tp);
}
tyf = totym();
t = type_alloc(tyf);
t->Tflags |= TFprototype;
if (varargs != 1)
t->Tflags |= TFfixed;
ctype = t;
t->Tnext = next->toCtype(); // <<<<<<<<<<<<<<<< next is null
t->Tnext->Tcount++;
t->Tparamtypes = paramtypes;
}
ctype = t;
return t;
}
...
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
More information about the Digitalmars-d-bugs
mailing list