D.gnu - Local variabled and nested functions
- Fredrik Olsson (34/34) Nov 29 2005 This small test-case:
- Thomas Kuehne (13/47) Dec 04 2005 -----BEGIN PGP SIGNED MESSAGE-----
This small test-case: import std.stdio; int foo(int a) { int bar(int b) { a += b; if (b > 0) { return bar(b - 1); } else { return a; } } return bar(a); } int main(char[][] args) { writefln("a=", foo(3)); return 0; } Correctly gives "a=9" on gdc 0.15. But "a=72592" on gdc 0.16. Same goes for the smaller example (with purely local variable): int bar() { int a = 1; int baz(bool onemore) { if (onemore) return baz(false); else return a; } return baz(true); } Should always give 1, but mostly gives 72504 for me. I guess the pointer to the parents locals get screwed up. It works as long as I do not use recursion. regards Fredrik Olsson
Nov 29 2005
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Fredrik Olsson schrieb am 2005-11-30:This small test-case: import std.stdio; int foo(int a) { int bar(int b) { a += b; if (b > 0) { return bar(b - 1); } else { return a; } } return bar(a); } int main(char[][] args) { writefln("a=", foo(3)); return 0; } Correctly gives "a=9" on gdc 0.15. But "a=72592" on gdc 0.16. Same goes for the smaller example (with purely local variable): int bar() { int a = 1; int baz(bool onemore) { if (onemore) return baz(false); else return a; } return baz(true); } Should always give 1, but mostly gives 72504 for me. I guess the pointer to the parents locals get screwed up. It works as long as I do not use recursion. regards Fredrik OlssonAdded to DStress as http://dstress.kuehne.cn/run/n/nested_function_07_A.d http://dstress.kuehne.cn/run/n/nested_function_07_B.d http://dstress.kuehne.cn/run/n/nested_function_07_C.d Thomas -----BEGIN PGP SIGNATURE----- iD8DBQFDlAHG3w+/yD4P9tIRAmj1AKC8p+lGpZxTIPLzOaGAqCskTX5eYwCguINl pYmZyBhGryz2XrYSfM0JWUs= =+uKA -----END PGP SIGNATURE-----
Dec 04 2005