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 Olsson
Added 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








Thomas Kuehne <thomas-dloop kuehne.cn>