digitalmars.D.bugs - [Issue 4667] New: Goto skipping variable initializations
- d-bugmail puremagic.com (58/58) Aug 17 2010 http://d.puremagic.com/issues/show_bug.cgi?id=4667
- d-bugmail puremagic.com (12/12) Aug 17 2010 http://d.puremagic.com/issues/show_bug.cgi?id=4667
- d-bugmail puremagic.com (8/8) Aug 17 2010 http://d.puremagic.com/issues/show_bug.cgi?id=4667
- d-bugmail puremagic.com (15/15) Aug 18 2010 http://d.puremagic.com/issues/show_bug.cgi?id=4667
http://d.puremagic.com/issues/show_bug.cgi?id=4667
Summary: Goto skipping variable initializations
Product: D
Version: D2
Platform: x86
OS/Version: Windows
Status: NEW
Keywords: diagnostic
Severity: normal
Priority: P2
Component: DMD
AssignedTo: nobody puremagic.com
ReportedBy: bearophile_hugs eml.cc
This D2 code runs with no errors (DMD 2.048):
import std.c.stdio: printf;
void main(string[] args) {
if (args.length < 2)
goto FOO1;
int x = 100;
FOO1:
printf("%d\n", x);
goto FOO2;
for (int i = 0; i < 10; i++) {
FOO2:
printf("%d\n", i);
break;
}
}
But that's not good code, the initialization of i is always skipped, and the
initialization of x is sometimes skipped.
bernardh in IRC #D quotes from TDPL:
"another restriction is that a goto cannot skip the definition point of a value
that's visible at the landing point."
See also bug 3820
Similar code in C99:
#include "stdio.h"
int main(int argc, const char* argv[]) {
if (argc < 2)
goto FOO1;
int x = 100;
FOO1:
printf("%d\n", x);
goto FOO2;
for (int i = 0; i < 10; i++) {
FOO2:
printf("%d\n", i);
break;
}
return 0;
}
Compiled with GCC 4.5.0 shows a warning:
...>gcc -Wall -std=c99 -m32 test.c -o test
test.c: In function 'main':
test.c:13:15: warning: 'i' is used uninitialized in this function
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Aug 17 2010
http://d.puremagic.com/issues/show_bug.cgi?id=4667
Lars T. Kyllingstad <bugzilla kyllingen.net> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|NEW |RESOLVED
CC| |bugzilla kyllingen.net
Resolution| |DUPLICATE
09:51:02 PDT ---
*** This issue has been marked as a duplicate of issue 602 ***
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Aug 17 2010
http://d.puremagic.com/issues/show_bug.cgi?id=4667 Thank you and sorry for the dupe. (I hope the people that try to fix one bug take a look at all the contents of the 'duplicated' bugs, because sometimes they may be not fully duplicated.) -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Aug 17 2010
http://d.puremagic.com/issues/show_bug.cgi?id=4667
Stewart Gordon <smjg iname.com> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |smjg iname.com
If a duplicate bug provides more information or a testcase that might still
fail after the original is fixed, then it's a good idea to add it as a comment
to the original bug report, possibly with a note at the beginning like "From
duplicate bug 4667".
But looking at duplicate bug reports just in case is probably indeed also a
good idea.
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Aug 18 2010









d-bugmail puremagic.com 