www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 4667] New: Goto skipping variable initializations

reply d-bugmail puremagic.com writes:
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


--- Comment #0 from bearophile_hugs eml.cc 2010-08-17 07:49:03 PDT ---
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
next sibling parent d-bugmail puremagic.com writes:
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


--- Comment #1 from Lars T. Kyllingstad <bugzilla kyllingen.net> 2010-08-17
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
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=4667



--- Comment #2 from bearophile_hugs eml.cc 2010-08-17 10:51:52 PDT ---
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
prev sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=4667


Stewart Gordon <smjg iname.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |smjg iname.com


--- Comment #3 from Stewart Gordon <smjg iname.com> 2010-08-18 09:02:59 PDT ---
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