www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Bug 29] New: undefined behaviour of: scope(...){ return X; }

reply d-bugmail puremagic.com writes:
http://d.puremagic.com/bugzilla/show_bug.cgi?id=29

           Summary: undefined behaviour of: scope(...){ return X; }
           Product: D
           Version: 0.149
          Platform: PC
        OS/Version: Linux
            Status: NEW
          Keywords: accepts-invalid, EH
          Severity: normal
          Priority: P2
         Component: DMD
        AssignedTo: walter digitalmars.com
        ReportedBy: thomas-dloop kuehne.cn


void main(){
        scope(exit){
                return 0; // should fail to compile
        }
}

int main(){
        scope(exit){
                return 0; // undefined behaviour
        }

        return 1;
}

test cases:
http://dstress.kuehne.cn/nocompile/s/scope_08_A.d
http://dstress.kuehne.cn/nocompile/s/scope_08_C.d
http://dstress.kuehne.cn/nocompile/s/scope_08_B.d
http://dstress.kuehne.cn/undefined/scope_08_D.d
http://dstress.kuehne.cn/undefined/scope_08_E.d
http://dstress.kuehne.cn/undefined/scope_08_F.d


-- 
Mar 09 2006
next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/bugzilla/show_bug.cgi?id=29


walter digitalmars.com changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
         Resolution|                            |INVALID




------- Comment #1 from walter digitalmars.com  2006-03-09 19:15 -------
It shouldn't fail to compile. It means the same thing as a return inside a
finally block. Not a bug.


-- 
Mar 09 2006
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/bugzilla/show_bug.cgi?id=29





------- Comment #2 from ddparnell bigpond.com  2006-03-09 19:44 -------
But it *does* fail to compile now. For example, this program ...
-------------------
 import std.stdio;
 int Foo(int x)
 {
    scope(exit) if (x < 5) return x+9;
    return x;
 }

 void main()
 {
   for(int i = 0; i < 10; i++)
    writefln("IN %s OUT %s", i, Foo(i));
 }
-------------------

gives this compiler message ...

"test.d(4): return statements cannot be in finally bodies"


-- 
Mar 09 2006
prev sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/bugzilla/show_bug.cgi?id=29


thomas-dloop kuehne.cn changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|RESOLVED                    |REOPENED
         Resolution|INVALID                     |




------- Comment #3 from thomas-dloop kuehne.cn  2006-03-10 00:46 -------
(In reply to comment #1)
 It shouldn't fail to compile. It means the same thing as a return inside a
 finally block. Not a bug.

The correlation wiht finally isn't documented. http://www.digitalmars.com/d/statement.html#try # A FinallyStatement may not exit with a goto, break, continue, or # return; nor may it be entered with a goto. Thus the code below is illegal, yet compiles: # int test(){ # scope(exit) return 0; # } # void test(){ # scope(exit) return 0; # } --
Mar 09 2006