digitalmars.D.bugs - [Issue 6473] New: segfault in Lexer::uniqueId
- d-bugmail puremagic.com (57/57) Aug 11 2011 http://d.puremagic.com/issues/show_bug.cgi?id=6473
- d-bugmail puremagic.com (23/23) Sep 19 2011 http://d.puremagic.com/issues/show_bug.cgi?id=6473
- d-bugmail puremagic.com (6/6) Oct 18 2011 http://d.puremagic.com/issues/show_bug.cgi?id=6473
- d-bugmail puremagic.com (10/10) Dec 22 2011 http://d.puremagic.com/issues/show_bug.cgi?id=6473
- d-bugmail puremagic.com (11/11) Feb 01 2012 http://d.puremagic.com/issues/show_bug.cgi?id=6473
http://d.puremagic.com/issues/show_bug.cgi?id=6473 Summary: segfault in Lexer::uniqueId Product: D Version: D1 & D2 Platform: All OS/Version: All Status: NEW Keywords: ice-on-valid-code Severity: major Priority: P2 Component: DMD AssignedTo: nobody puremagic.com ReportedBy: mrmocool gmx.de struct Eins { ~this() {} } struct Zwei { void build(Eins devices = Eins()) { } } $ gdb --batch -ex "run program.d" -ex "bt 10" dmd DMD v2.054 DEBUG Program received signal SIGSEGV, Segmentation fault. 0x00007ffff72e4893 in vfprintf () from /lib/x86_64-linux-gnu/libc.so.6 lexer.c:2881 sc=0x1128a70) at expression.c:3648 sc=0x1128a70) at declaration.c:1280 sc=0x1128670) at expression.c:4910 expression.c:5626 expression.c:5646 build as a free function doesn't trigger it. Nor does a global 'Eins devices = Eins();'. btw, lexer.c(2876): Identifier *Lexer::uniqueId(const char *s, int num) { char buffer[32]; size_t slen = strlen(s); assert(slen + sizeof(num) * 3 + 1 <= sizeof(buffer)); sprintf(buffer, "%s%d", s, num); Why that sizeof(num) there? It's always 4. Why isn't snprintf(buffer, 32.... used? -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Aug 11 2011
http://d.puremagic.com/issues/show_bug.cgi?id=6473 Don <clugdbug yahoo.com.au> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |clugdbug yahoo.com.au Version|D1 & D2 |D2 Summary|segfault in Lexer::uniqueId |Stack overflow with struct | |destructor as default | |parameter It's not a segfault, and it has nothing to do with Lexer::uniqueId. It's a stack overflow. It's also D2-only, because it requires a struct destructor. StructLiteralExp::semantic() sees that Eins has a destructor, so it rewrites it as Eins devices = (Eins tmp = Eins(), tmp); Then, it runs semantic on the comma expression it created. VarDeclaration::semantic on tmp calls StructLiteralExp::semantic, which again sees Eins has destructor, so it does an another rewrite. Eins devices = (Eins tmp = (Eins tmp2 = Eins(), tmp2), tmp); -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Sep 19 2011
http://d.puremagic.com/issues/show_bug.cgi?id=6473 Very interesting. Any idea how to solve it? -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Oct 18 2011
http://d.puremagic.com/issues/show_bug.cgi?id=6473 Kenji Hara <k.hara.pg gmail.com> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords| |patch https://github.com/D-Programming-Language/dmd/pull/575 -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Dec 22 2011
http://d.puremagic.com/issues/show_bug.cgi?id=6473 Trass3r <mrmocool gmx.de> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED Resolution| |FIXED https://github.com/D-Programming-Language/dmd/commit/4bda5de701e817b5ea4967fb311350e854a70dde -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Feb 01 2012