digitalmars.D.bugs - Another case of debug/version IPF: for loops
- Stewart Gordon (32/32) Apr 18 2005 (Accidentally posted before to the wrong 'group. Hopefully my cancel
- zwang (9/44) Apr 18 2005 Confirmed on WinXP, dmd .121.
- Stewart Gordon (11/18) Apr 18 2005 I also tried my snippet with while, if and switch, and the problem
- zwang (2/24) Apr 18 2005 ";" is an empty statement that does nothing.
- Stewart Gordon (10/11) Apr 18 2005 According to which bit of the D spec? From what I recall, Walter
- zwang (4/18) Apr 18 2005 You are correct. According to the spec, "Expressions that have no effec...
- Stewart Gordon (8/26) Apr 18 2005 Not only that, but in your example there is no expression at all, so
- Manfred Nowak (5/7) Apr 18 2005 Nope. It is an empty declaration, specific a "DeclDef":
- Stewart Gordon (7/17) Apr 19 2005 Nope. A DeclDef isn't a valid form of statement. The DeclDef applies
- Manfred Nowak (9/11) Apr 19 2005 According to the current specs correct. But according to the
- Thomas Kuehne (22/34) Apr 18 2005 -----BEGIN PGP SIGNED MESSAGE-----
(Accidentally posted before to the wrong 'group. Hopefully my cancel request worked....) Using DMD 0.120, Windows 98SE. This code crashes DMD with an IPF, just like it did within catch blocks before. --------- void main() { for (int i = 0; i < 10; i++) { debug writefln(i); } } --------- DMD caused an invalid page fault in module DMD.EXE at 0167:00429038. Registers: EAX=00724dc8 CS=0167 EIP=00429038 EFLGS=00010202 EBX=007299dc SS=016f ESP=0070fb60 EBP=0072a2c8 ECX=00000000 DS=016f ESI=0072a32c FS=4d87 EDX=004b1598 ES=016f EDI=0072a32c GS=0000 Bytes at CS:EIP: 8b 01 ff 50 3c b8 01 00 00 00 59 c3 51 53 89 cb Stack dump: 00724dc8 0041e95f 007299dc 007297c0 00000001 004947ae 00000000 00000000 0070fc3c 0072fad8 0072edf4 00000035 00720540 0049fd5e 0072edf4 00000020 --------- Again, it applies equally to debug or version. Again, the presence or absence of braces around either the for content or the debug content doesn't seem to make a difference. Stewart. -- My e-mail is valid but not my primary mailbox. Please keep replies on the 'group where everyone may benefit.
Apr 18 2005
Stewart Gordon wrote:(Accidentally posted before to the wrong 'group. Hopefully my cancel request worked....) Using DMD 0.120, Windows 98SE. This code crashes DMD with an IPF, just like it did within catch blocks before. --------- void main() { for (int i = 0; i < 10; i++) { debug writefln(i); } } --------- DMD caused an invalid page fault in module DMD.EXE at 0167:00429038. Registers: EAX=00724dc8 CS=0167 EIP=00429038 EFLGS=00010202 EBX=007299dc SS=016f ESP=0070fb60 EBP=0072a2c8 ECX=00000000 DS=016f ESI=0072a32c FS=4d87 EDX=004b1598 ES=016f EDI=0072a32c GS=0000 Bytes at CS:EIP: 8b 01 ff 50 3c b8 01 00 00 00 59 c3 51 53 89 cb Stack dump: 00724dc8 0041e95f 007299dc 007297c0 00000001 004947ae 00000000 00000000 0070fc3c 0072fad8 0072edf4 00000035 00720540 0049fd5e 0072edf4 00000020 --------- Again, it applies equally to debug or version. Again, the presence or absence of braces around either the for content or the debug content doesn't seem to make a difference. Stewart.Confirmed on WinXP, dmd .121. Besides, a while loop may also produce the problem: <code> void main(){ while(1) debug; } </code>
Apr 18 2005
zwang wrote: <snip>Besides, a while loop may also produce the problem: <code> void main(){ while(1) debug; } </code>I also tried my snippet with while, if and switch, and the problem didn't show. But what does debug; by itself mean? My guess is that it's this that's crashing the compiler when you try.... Stewart. -- My e-mail is valid but not my primary mailbox. Please keep replies on the 'group where everyone may benefit.
Apr 18 2005
Stewart Gordon wrote:zwang wrote: <snip>";" is an empty statement that does nothing.Besides, a while loop may also produce the problem: <code> void main(){ while(1) debug; } </code>I also tried my snippet with while, if and switch, and the problem didn't show. But what does debug; by itself mean? My guess is that it's this that's crashing the compiler when you try.... Stewart.
Apr 18 2005
zwang wrote: <snip>";" is an empty statement that does nothing.According to which bit of the D spec? From what I recall, Walter deliberately left this out to avoid the common C typo of if (qwert == 42); yuiop(); Stewart. -- My e-mail is valid but not my primary mailbox. Please keep replies on the 'group where everyone may benefit.
Apr 18 2005
Stewart Gordon wrote:zwang wrote: <snip>You are correct. According to the spec, "Expressions that have no effect, like (x + x), are illegal in expression statements." But an illegal statement should not crash a compiler, right?";" is an empty statement that does nothing.According to which bit of the D spec? From what I recall, Walter deliberately left this out to avoid the common C typo of if (qwert == 42); yuiop(); Stewart.
Apr 18 2005
zwang wrote:Stewart Gordon wrote:Not only that, but in your example there is no expression at all, so such a thing isn't even syntactically valid.zwang wrote: <snip>You are correct. According to the spec, "Expressions that have no effect, like (x + x), are illegal in expression statements."";" is an empty statement that does nothing.According to which bit of the D spec? From what I recall, Walter deliberately left this out to avoid the common C typo of if (qwert == 42); yuiop(); Stewart.But an illegal statement should not crash a compiler, right?Correct. Stewart. -- My e-mail is valid but not my primary mailbox. Please keep replies on the 'group where everyone may benefit.
Apr 18 2005
Stewart Gordon <smjg_1998 yahoo.com> wrote: [...]but in your example there is no expression at all, so such a thing isn't even syntactically valid.Nope. It is an empty declaration, specific a "DeclDef": http://www.digitalmars.com/d/module.html -manfred
Apr 18 2005
Manfred Nowak wrote:Stewart Gordon <smjg_1998 yahoo.com> wrote: [...]Nope. A DeclDef isn't a valid form of statement. The DeclDef applies only at module level. Stewart. -- My e-mail is valid but not my primary mailbox. Please keep replies on the 'group where everyone may benefit.but in your example there is no expression at all, so such a thing isn't even syntactically valid.Nope. It is an empty declaration, specific a "DeclDef": http://www.digitalmars.com/d/module.html
Apr 19 2005
Stewart Gordon <smjg_1998 yahoo.com> wrote: [...]Nope. A DeclDef isn't a valid form of statement. The DeclDef applies only at module level.According to the current specs correct. But according to the implementation empty declarations are allowed also in class and function bodys. Astonishingly the specs currently do not hold a definition for "functionBody". So: what to fix? -manfred
Apr 19 2005
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Stewart Gordon schrieb am Mon, 18 Apr 2005 11:29:51 +0100:(Accidentally posted before to the wrong 'group. Hopefully my cancel request worked....) Using DMD 0.120, Windows 98SE. This code crashes DMD with an IPF, just like it did within catch blocks before. --------- void main() { for (int i = 0; i < 10; i++) { debug writefln(i); } } ---------Added to DStress as http://dstress.kuehne.cn/run/do_while_04.d http://dstress.kuehne.cn/run/do_while_05.d http://dstress.kuehne.cn/run/else_01.d http://dstress.kuehne.cn/run/else_02.d http://dstress.kuehne.cn/run/for_04.d http://dstress.kuehne.cn/run/for_05.d http://dstress.kuehne.cn/run/foreach_28.d http://dstress.kuehne.cn/run/foreach_29.d http://dstress.kuehne.cn/run/if_07.d http://dstress.kuehne.cn/run/if_08.d http://dstress.kuehne.cn/run/while_04.d http://dstress.kuehne.cn/run/while_05.d Thomas -----BEGIN PGP SIGNATURE----- iD8DBQFCY7ah3w+/yD4P9tIRAmaEAKDPOmJTYmp/cB4QagI+uUH4ap3XQwCgxMlp 0GQA5WiZeAwulcOv3jmvkHw= =ptSR -----END PGP SIGNATURE-----
Apr 18 2005