Thread overview |
---|
March 19, 2007 [Issue 1068] New: stack corruption with mixins and function templates | ||||
---|---|---|---|---|
| ||||
http://d.puremagic.com/issues/show_bug.cgi?id=1068 Summary: stack corruption with mixins and function templates Product: D Version: 1.009 Platform: PC URL: http://www-users.mat.uni.torun.pl/~h3r3tic/bug.zip OS/Version: Windows Status: NEW Keywords: wrong-code Severity: critical Priority: P2 Component: DMD AssignedTo: bugzilla@digitalmars.com ReportedBy: h3r3tic@mat.uni.torun.pl When compiled as: dmd Test.d Module.d, the resulting executable prints: context: Module.Context 00900FE0 <context.func thisptr: 00900FE0 str length: 540698740 str: 'Error: Access Violation The addresses may vary, but generally random stack corruption happens with slight modifications to the source code. The correct output is: context: Context 00A20FE0 <context.func thisptr: 00A20FE0 str length: 1 str: 'a' context.func> returning from opCall The correct executable can be obtained by compiling the program with earlier versions of DMD. I tried 0.175 and 1.0. The error goes away when the order of modules is reversed at compilation, like 'dmd Module.d Test.d'. It also happens with DMD 1.007, but doesnt happen with gdcWin 0.23 (@1.007). Test files (as in bugzilla's 'URL'): Module.d --- template Mix() { static void foobar() { auto context = new Context; printf(`context: %.*s %0.8X`\n, context.toString, cast(void*)context); context.func!(typeof(this))(); printf(`returning from opCall`\n); } } class Bar { mixin Mix; } void someFunc(char[] z) { printf(`str length: %d`\n, z.length); printf(`str: '%.*s'`\n, z); } class Context { void func(T)() { printf(`<context.func`\n); printf(`thisptr: %0.8X`\n, this); someFunc(`a`); printf(`context.func>`\n); } } --- Test.d --- import Module; class Foo { mixin Mix; } void main() { Bar.foobar(); } --- -- |
April 17, 2007 [Issue 1068] stack corruption with mixins and function templates | ||||
---|---|---|---|---|
| ||||
Posted in reply to d-bugmail | http://d.puremagic.com/issues/show_bug.cgi?id=1068 bugzilla@digitalmars.com changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED Resolution| |FIXED ------- Comment #1 from bugzilla@digitalmars.com 2007-04-16 22:21 ------- Fixed DMD 1.012 -- |
April 25, 2007 [Issue 1068] stack corruption with mixins and function templates | ||||
---|---|---|---|---|
| ||||
Posted in reply to d-bugmail | http://d.puremagic.com/issues/show_bug.cgi?id=1068 thomas-dloop@kuehne.cn changed: What |Removed |Added ---------------------------------------------------------------------------- OS/Version|Windows |All ------- Comment #2 from thomas-dloop@kuehne.cn 2007-04-25 12:48 ------- Added to DStress as http://dstress.kuehne.cn/run/t/template_62_A.d http://dstress.kuehne.cn/run/t/template_62_B.d -- |
Copyright © 1999-2021 by the D Language Foundation