digitalmars.D.bugs - [Issue 10673] New: memory corruption in interpret.c
- d-bugmail puremagic.com (22/22) Jul 19 2013 http://d.puremagic.com/issues/show_bug.cgi?id=10673
- d-bugmail puremagic.com (255/255) Jul 19 2013 http://d.puremagic.com/issues/show_bug.cgi?id=10673
- d-bugmail puremagic.com (12/12) Jul 19 2013 http://d.puremagic.com/issues/show_bug.cgi?id=10673
- d-bugmail puremagic.com (12/12) Jul 19 2013 http://d.puremagic.com/issues/show_bug.cgi?id=10673
- d-bugmail puremagic.com (10/10) Jul 19 2013 http://d.puremagic.com/issues/show_bug.cgi?id=10673
http://d.puremagic.com/issues/show_bug.cgi?id=10673 Summary: memory corruption in interpret.c Product: D Version: D2 Platform: All OS/Version: All Status: NEW Severity: normal Priority: P2 Component: DMD AssignedTo: nobody puremagic.com ReportedBy: code dawg.eu During a compilation I kept triggering the following assertion. assert(e != EXP_CONTINUE_INTERPRET && e != EXP_BREAK_INTERPRET); https://github.com/D-Programming-Language/dmd/blob/de687981f72b0256b1dc1233306b4cfe94db626c/src/interpret.c#L976 While trying to reduce the test case it turned out that this must be a memory corruption, i.e. with ASLR it only asserts sometimes. When I removed unrelated modules from the compilation the error would go away. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Jul 19 2013
http://d.puremagic.com/issues/show_bug.cgi?id=10673 valgrind ../dmd/src/dmd -I../druntime/import -w -d -property -m32 -fPIC -g -debug -shared -unittest -ofgenerated/linux/debug/32/unittest/libphobos2-ut.so crc32.d std/algorithm.d std/array.d std/ascii.d std/container.d std/conv.d std/cstream.d std/csv.d std/datetime.d std/demangle.d std/encoding.d std/exception.d std/file.d std/format.d std/functional.d std/getopt.d std/md5.d std/metastrings.d std/mmfile.d std/regex.d ../druntime/lib/libdruntime-linux32so.a -defaultlib= -debuglib= ==4040== Memcheck, a memory error detector ==4040== Copyright (C) 2002-2012, and GNU GPL'd, by Julian Seward et al. ==4040== Using Valgrind-3.8.1 and LibVEX; rerun with -h for copyright info ==4040== Command: ../dmd/src/dmd -I../druntime/import -w -d -property -m32 -fPIC -g -debug -shared -unittest -ofgenerated/linux/debug/32/unittest/libphobos2-ut.so crc32.d std/algorithm.d std/array.d std/ascii.d std/container.d std/conv.d std/cstream.d std/csv.d std/datetime.d std/demangle.d std/encoding.d std/exception.d std/file.d std/format.d std/functional.d std/getopt.d std/md5.d std/metastrings.d std/mmfile.d std/regex.d ../druntime/lib/libdruntime-linux32so.a -defaultlib= -debuglib= ==4040== The 'crc32' module has been scheduled for deprecation. Please use 'std.digest.crc' instead. std.md5 is scheduled for deprecation. Please use std.digest.md instead ==4040== Conditional jump or move depends on uninitialised value(s) ==4040== at 0x51D30A: BreakStatement::interpret(InterState*) (interpret.c:1391) ==4040== by 0x51C740: CompoundStatement::interpret(InterState*) (interpret.c:1071) ==4040== by 0x51C740: CompoundStatement::interpret(InterState*) (interpret.c:1071) ==4040== by 0x51D9B0: SwitchStatement::interpret(InterState*) (interpret.c:1635) ==4040== by 0x51D69E: ForStatement::interpret(InterState*) (interpret.c:1533) ==4040== by 0x51C740: CompoundStatement::interpret(InterState*) (interpret.c:1071) ==4040== by 0x51D69E: ForStatement::interpret(InterState*) (interpret.c:1533) ==4040== by 0x51C740: CompoundStatement::interpret(InterState*) (interpret.c:1071) ==4040== by 0x51C740: CompoundStatement::interpret(InterState*) (interpret.c:1071) ==4040== by 0x51C740: CompoundStatement::interpret(InterState*) (interpret.c:1071) ==4040== by 0x5238F5: FuncDeclaration::interpret(InterState*, Array<Expression>*, Expression*) (interpret.c:954) ==4040== by 0x52553D: CallExp::interpret(InterState*, CtfeGoal) (interpret.c:4713) ==4040== ==4040== Conditional jump or move depends on uninitialised value(s) ==4040== at 0x51D30A: BreakStatement::interpret(InterState*) (interpret.c:1391) ==4040== by 0x51C740: CompoundStatement::interpret(InterState*) (interpret.c:1071) ==4040== by 0x51C740: CompoundStatement::interpret(InterState*) (interpret.c:1071) ==4040== by 0x51C7CF: UnrolledLoopStatement::interpret(InterState*) (interpret.c:1096) ==4040== by 0x51C740: CompoundStatement::interpret(InterState*) (interpret.c:1071) ==4040== by 0x51D9B0: SwitchStatement::interpret(InterState*) (interpret.c:1635) ==4040== by 0x51C740: CompoundStatement::interpret(InterState*) (interpret.c:1071) ==4040== by 0x51D69E: ForStatement::interpret(InterState*) (interpret.c:1533) ==4040== by 0x51C740: CompoundStatement::interpret(InterState*) (interpret.c:1071) ==4040== by 0x51C740: CompoundStatement::interpret(InterState*) (interpret.c:1071) ==4040== by 0x5238F5: FuncDeclaration::interpret(InterState*, Array<Expression>*, Expression*) (interpret.c:954) ==4040== by 0x52553D: CallExp::interpret(InterState*, CtfeGoal) (interpret.c:4713) ==4040== ==4040== Conditional jump or move depends on uninitialised value(s) ==4040== at 0x51C81F: UnrolledLoopStatement::interpret(InterState*) (interpret.c:1109) ==4040== by 0x51C740: CompoundStatement::interpret(InterState*) (interpret.c:1071) ==4040== by 0x51D9B0: SwitchStatement::interpret(InterState*) (interpret.c:1635) ==4040== by 0x51C740: CompoundStatement::interpret(InterState*) (interpret.c:1071) ==4040== by 0x51D69E: ForStatement::interpret(InterState*) (interpret.c:1533) ==4040== by 0x51C740: CompoundStatement::interpret(InterState*) (interpret.c:1071) ==4040== by 0x51C740: CompoundStatement::interpret(InterState*) (interpret.c:1071) ==4040== by 0x5238F5: FuncDeclaration::interpret(InterState*, Array<Expression>*, Expression*) (interpret.c:954) ==4040== by 0x52553D: CallExp::interpret(InterState*, CtfeGoal) (interpret.c:4713) ==4040== by 0x51C6C0: ExpStatement::interpret(InterState*) (interpret.c:1044) ==4040== by 0x51C740: CompoundStatement::interpret(InterState*) (interpret.c:1071) ==4040== by 0x51C740: CompoundStatement::interpret(InterState*) (interpret.c:1071) ==4040== ==4040== Conditional jump or move depends on uninitialised value(s) ==4040== at 0x51C824: UnrolledLoopStatement::interpret(InterState*) (interpret.c:1109) ==4040== by 0x51C740: CompoundStatement::interpret(InterState*) (interpret.c:1071) ==4040== by 0x51D9B0: SwitchStatement::interpret(InterState*) (interpret.c:1635) ==4040== by 0x51C740: CompoundStatement::interpret(InterState*) (interpret.c:1071) ==4040== by 0x51D69E: ForStatement::interpret(InterState*) (interpret.c:1533) ==4040== by 0x51C740: CompoundStatement::interpret(InterState*) (interpret.c:1071) ==4040== by 0x51C740: CompoundStatement::interpret(InterState*) (interpret.c:1071) ==4040== by 0x5238F5: FuncDeclaration::interpret(InterState*, Array<Expression>*, Expression*) (interpret.c:954) ==4040== by 0x52553D: CallExp::interpret(InterState*, CtfeGoal) (interpret.c:4713) ==4040== by 0x51C6C0: ExpStatement::interpret(InterState*) (interpret.c:1044) ==4040== by 0x51C740: CompoundStatement::interpret(InterState*) (interpret.c:1071) ==4040== by 0x51C740: CompoundStatement::interpret(InterState*) (interpret.c:1071) ==4040== ==4040== Conditional jump or move depends on uninitialised value(s) ==4040== at 0x51D8CF: SwitchStatement::interpret(InterState*) (interpret.c:1639) ==4040== by 0x51C740: CompoundStatement::interpret(InterState*) (interpret.c:1071) ==4040== by 0x51D69E: ForStatement::interpret(InterState*) (interpret.c:1533) ==4040== by 0x51C740: CompoundStatement::interpret(InterState*) (interpret.c:1071) ==4040== by 0x51C740: CompoundStatement::interpret(InterState*) (interpret.c:1071) ==4040== by 0x5238F5: FuncDeclaration::interpret(InterState*, Array<Expression>*, Expression*) (interpret.c:954) ==4040== by 0x52553D: CallExp::interpret(InterState*, CtfeGoal) (interpret.c:4713) ==4040== by 0x51C6C0: ExpStatement::interpret(InterState*) (interpret.c:1044) ==4040== by 0x51C740: CompoundStatement::interpret(InterState*) (interpret.c:1071) ==4040== by 0x51C740: CompoundStatement::interpret(InterState*) (interpret.c:1071) ==4040== by 0x51C740: CompoundStatement::interpret(InterState*) (interpret.c:1071) ==4040== by 0x5238F5: FuncDeclaration::interpret(InterState*, Array<Expression>*, Expression*) (interpret.c:954) ==4040== ==4040== Conditional jump or move depends on uninitialised value(s) ==4040== at 0x51D8D4: SwitchStatement::interpret(InterState*) (interpret.c:1639) ==4040== by 0x51C740: CompoundStatement::interpret(InterState*) (interpret.c:1071) ==4040== by 0x51D69E: ForStatement::interpret(InterState*) (interpret.c:1533) ==4040== by 0x51C740: CompoundStatement::interpret(InterState*) (interpret.c:1071) ==4040== by 0x51C740: CompoundStatement::interpret(InterState*) (interpret.c:1071) ==4040== by 0x5238F5: FuncDeclaration::interpret(InterState*, Array<Expression>*, Expression*) (interpret.c:954) ==4040== by 0x52553D: CallExp::interpret(InterState*, CtfeGoal) (interpret.c:4713) ==4040== by 0x51C6C0: ExpStatement::interpret(InterState*) (interpret.c:1044) ==4040== by 0x51C740: CompoundStatement::interpret(InterState*) (interpret.c:1071) ==4040== by 0x51C740: CompoundStatement::interpret(InterState*) (interpret.c:1071) ==4040== by 0x51C740: CompoundStatement::interpret(InterState*) (interpret.c:1071) ==4040== by 0x5238F5: FuncDeclaration::interpret(InterState*, Array<Expression>*, Expression*) (interpret.c:954) ==4040== ==4040== Conditional jump or move depends on uninitialised value(s) ==4040== at 0x51D78F: ForStatement::interpret(InterState*) (interpret.c:1541) ==4040== by 0x51C740: CompoundStatement::interpret(InterState*) (interpret.c:1071) ==4040== by 0x51C740: CompoundStatement::interpret(InterState*) (interpret.c:1071) ==4040== by 0x5238F5: FuncDeclaration::interpret(InterState*, Array<Expression>*, Expression*) (interpret.c:954) ==4040== by 0x52553D: CallExp::interpret(InterState*, CtfeGoal) (interpret.c:4713) ==4040== by 0x51C6C0: ExpStatement::interpret(InterState*) (interpret.c:1044) ==4040== by 0x51C740: CompoundStatement::interpret(InterState*) (interpret.c:1071) ==4040== by 0x51C740: CompoundStatement::interpret(InterState*) (interpret.c:1071) ==4040== by 0x51C740: CompoundStatement::interpret(InterState*) (interpret.c:1071) ==4040== by 0x5238F5: FuncDeclaration::interpret(InterState*, Array<Expression>*, Expression*) (interpret.c:954) ==4040== by 0x52553D: CallExp::interpret(InterState*, CtfeGoal) (interpret.c:4713) ==4040== by 0x526BE3: CommaExp::interpret(InterState*, CtfeGoal) (interpret.c:4787) ==4040== ==4040== Conditional jump or move depends on uninitialised value(s) ==4040== at 0x51D794: ForStatement::interpret(InterState*) (interpret.c:1541) ==4040== by 0x51C740: CompoundStatement::interpret(InterState*) (interpret.c:1071) ==4040== by 0x51C740: CompoundStatement::interpret(InterState*) (interpret.c:1071) ==4040== by 0x5238F5: FuncDeclaration::interpret(InterState*, Array<Expression>*, Expression*) (interpret.c:954) ==4040== by 0x52553D: CallExp::interpret(InterState*, CtfeGoal) (interpret.c:4713) ==4040== by 0x51C6C0: ExpStatement::interpret(InterState*) (interpret.c:1044) ==4040== by 0x51C740: CompoundStatement::interpret(InterState*) (interpret.c:1071) ==4040== by 0x51C740: CompoundStatement::interpret(InterState*) (interpret.c:1071) ==4040== by 0x51C740: CompoundStatement::interpret(InterState*) (interpret.c:1071) ==4040== by 0x5238F5: FuncDeclaration::interpret(InterState*, Array<Expression>*, Expression*) (interpret.c:954) ==4040== by 0x52553D: CallExp::interpret(InterState*, CtfeGoal) (interpret.c:4713) ==4040== by 0x526BE3: CommaExp::interpret(InterState*, CtfeGoal) (interpret.c:4787) ==4040== dmd: interpret.c:976: Expression* FuncDeclaration::interpret(InterState*, Expressions*, Expression*): Assertion `e != EXP_CONTINUE_INTERPRET && e != EXP_BREAK_INTERPRET' failed. ==4040== ==4040== HEAP SUMMARY: ==4040== in use at exit: 3,864,184,382 bytes in 8,707,602 blocks ==4040== total heap usage: 11,232,324 allocs, 2,524,722 frees, 7,045,249,464 bytes allocated ==4040== ==4040== LEAK SUMMARY: ==4040== definitely lost: 319,193,003 bytes in 3,779,713 blocks ==4040== indirectly lost: 42,443,969 bytes in 596,896 blocks ==4040== possibly lost: 3,472,644,660 bytes in 4,150,273 blocks ==4040== still reachable: 29,902,750 bytes in 180,720 blocks ==4040== suppressed: 0 bytes in 0 blocks ==4040== Rerun with --leak-check=full to see details of leaked memory ==4040== ==4040== For counts of detected and suppressed errors, rerun with: -v ==4040== Use --track-origins=yes to see where uninitialised values come from ==4040== ERROR SUMMARY: 10 errors from 8 contexts (suppressed: 2 from 2) -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Jul 19 2013
http://d.puremagic.com/issues/show_bug.cgi?id=10673 Martin Nowak <code dawg.eu> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords| |pull Severity|normal |regression This is a regression introduced with the fix to bug 10475. https://github.com/D-Programming-Language/dmd/pull/2363 -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Jul 19 2013
http://d.puremagic.com/issues/show_bug.cgi?id=10673 Commits pushed to master at https://github.com/D-Programming-Language/dmd https://github.com/D-Programming-Language/dmd/commit/ea416a3496467ba4ccf875c70e76873a322d92ba fix Issue 10673 - memory corruption in interpret.c - the gotoTarget field of LabelStatement was never initialized https://github.com/D-Programming-Language/dmd/commit/e9fdb8c4527c2c3f7e080fad9d21dd4f4710488f fix Issue 10673 - memory corruption in interpret.c -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Jul 19 2013
http://d.puremagic.com/issues/show_bug.cgi?id=10673 yebblies <yebblies gmail.com> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED CC| |yebblies gmail.com Resolution| |FIXED -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Jul 19 2013